Esta es la configuración de Visual Studio Code que se recomienda para seguir este curso.
Esta lección no detalla los pasos para configurar Visual Studio Code. En caso necesario, puede consultar la lección Personalización de VSC de los apuntes de Informática general, en la que se explica detalladamente cómo se personaliza Visual Studio Code. En dichos apuntes también puede consultar lecciones dedicadas a Visual Studio Code, como Presentación general, Instalación, Uso y otras, que le pueden ser de ayuda si no conoce Visual Studio Code.
El tema de color es un aspecto muy personal por lo que se deja a elección del alumno el tema de color empleado.
En las capturas de los apuntes se empleará el Tema Dark+ (default dark).
Esta es el área de trabajo recomendada para seguir este curso.
Estas son las preferencias de configuración que se aconseja establecer para seguir este curso.
Las preferencias propuestas relacionadas con extensiones requieren la instalación de las extensiones correspondientes.
//
//
// Configuraciones recomendadas para el curso Introducción a la programación con Python
//
// Extensión multi-command
"multiCommand.commands": [
{
"command": "multiCommand.clearTerminal",
"sequence": [
{
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "clear\u000D"
}
},
"workbench.action.focusActiveEditorGroup",
],
},
{
"command": "multiCommand.pythonExecuteInTerminal",
"sequence": [
"workbench.action.terminal.focus",
{
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "cd '${fileDirname}'\u000Dclear\u000Dpy '${fileBasename}'\u000D"
}
},
"workbench.action.focusActiveEditorGroup",
],
},
{
"command": "multiCommand.pythonExecuteAndFocusInTerminal",
"sequence": [
"workbench.action.terminal.focus",
{
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "cd '${fileDirname}'\u000Dclear\u000Dpy '${fileBasename}'\u000D"
}
},
],
},
{
"command": "multiCommand.pythonMptcInTerminal",
"sequence": [
"workbench.action.terminal.focus",
{
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "cd '${fileDirname}'\u000Dclear\u000Dmptc '${fileBasename}' "
}
},
],
},
],
//
// Extensión pylint
"python.linting.pylintArgs": [
"--extension-pkg-whitelist=pygame",
"--disable=C0103, C0114, C0115, C0116, C0330",
// Pylint features. Pylint global options and switches
// http://pylint.pycqa.org/en/2.4/technical_reference/features.html
// http://pylint.pycqa.org/en/latest/technical_reference/features.html
// C0103: invalid-name - Used when the name doesn't conform to naming rules associated to its type (constant, variable, class...).
// C0114: missing-module-docstring - Used when a module has no docstring.Empty modules do not require a docstring.
// C0115: missing-class-docstring - Used when a class has no docstring.Even an empty class must have a docstring.
// C0116: missing-function-docstring - Used when a function or method has no docstring.Some special methods like __init__ do not require a docstring.
// C0330: bad-continuation - Wrong %s indentation%s%s. TODO
],
//
//
{
// Configuraciones recomendadas para el curso Introducción a la programación con Python
//
// Extensión multi-command
"multiCommand.commands": [
{
"command": "multiCommand.clearTerminal",
"sequence": [
{
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "clear\u000D"
}
},
"workbench.action.focusActiveEditorGroup",
],
},
{
"command": "multiCommand.pythonExecuteInTerminal",
"sequence": [
"workbench.action.terminal.focus",
{
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "cd '${fileDirname}'\u000Dclear\u000Dpy '${fileBasename}'\u000D"
}
},
"workbench.action.focusActiveEditorGroup",
],
},
{
"command": "multiCommand.pythonExecuteAndFocusInTerminal",
"sequence": [
"workbench.action.terminal.focus",
{
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "cd '${fileDirname}'\u000Dclear\u000Dpy '${fileBasename}'\u000D"
}
},
],
},
{
"command": "multiCommand.pythonMptcInTerminal",
"sequence": [
"workbench.action.terminal.focus",
{
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "cd '${fileDirname}'\u000Dclear\u000Dmptc '${fileBasename}' "
}
},
],
},
],
//
// Extensión pylint
"python.linting.pylintArgs": [
"--extension-pkg-whitelist=pygame",
"--disable=C0103, C0114, C0115, C0116, C0330",
// Pylint features. Pylint global options and switches
// http://pylint.pycqa.org/en/2.4/technical_reference/features.html
// http://pylint.pycqa.org/en/latest/technical_reference/features.html
// C0103: invalid-name - Used when the name doesn't conform to naming rules associated to its type (constant, variable, class...).
// C0114: missing-module-docstring - Used when a module has no docstring.Empty modules do not require a docstring.
// C0115: missing-class-docstring - Used when a class has no docstring.Even an empty class must have a docstring.
// C0116: missing-function-docstring - Used when a function or method has no docstring.Some special methods like __init__ do not require a docstring.
// C0330: bad-continuation - Wrong %s indentation%s%s. TODO
],
//
}
Estas son las dos extensiones que se aconseja instalar para seguir este curso.
Autor: ryuta46
Marketplace: multi-command
Repositorio GitHub: multi-command
Esta extensión permite crear comandos que ejecuten a su vez varios comandos de Visual Studio Code.
Autor: Microsoft (Don Jayamanne)
Marketplace: Python
Repositorio GitHub: Python
Don Jayamanne, el creador de la extensión Python trabaja en Microsoft desde noviembre de 2017. Desde entonces, la extensión se publica como extensión oficial por parte de Microsoft y además se publica regularmente todos los meses.
En el Blog de Python en Microsoft se anuncian las novedades mensuales en la extensión Python:
Al instalar la extensión Python en Visual Studio Code, se debe instalar el módulo pylint y es conveniente instalar un módulo de autoformato.
Al guardar por primera vez un programa de Python, Visual Studio Code mostrará un aviso indicando que pylint no está instalado y que le ofrecerá la opción de instalarlo automáticamente.
Nota: Como puede verse en la captura, se muestra un aviso en color amarillo indicando que los paquetes se han instalado en una carpeta que no está en la variable de entorno de Windows PATH. Eso se debe a que VSCode instala los paquetes con la opción --user, por lo que los paquetes se instalan en la carpeta ..\AppData\Roaming\Programs\Python\..., mientras que Python está instalado en ..\AppData\Local\Programs\Python\... En principio no es necesario añadir ninguna carpeta al PATH de Windows.
La configuración inicial de Pylint en VSCode es una configuración mínima (documentación de VSCode) que conviene modificar, sobre todo si trabajamos con pygame, para evitar que se muestren muchos avisos irrelevantes.
La lista de mensajes de error y avisos de Pylint se encuentra en el apartado Pylint Features de la documentación de Pylint.
Nota: Estas preferencias están incluidas en el apartado anterior de preferencias de configuración. No es necesario añadirlas si ya se han añadido anteriormente.
//
// Extensión pylint (configuración para ejercicios pygame)
"python.linting.pylintArgs": [
"--extension-pkg-whitelist=pygame",
"--disable=C0103, C0114, C0115, C0116, C0330",
// Pylint features. Pylint global options and switches
// http://pylint.pycqa.org/en/2.4/technical_reference/features.html
// http://pylint.pycqa.org/en/latest/technical_reference/features.html
// C0103: invalid-name - Used when the name doesn't conform to naming rules associated to its type (constant, variable, class...).
// C0114: missing-module-docstring - Used when a module has no docstring.Empty modules do not require a docstring.
// C0115: missing-class-docstring - Used when a class has no docstring.Even an empty class must have a docstring.
// C0116: missing-function-docstring - Used when a function or method has no docstring.Some special methods like __init__ do not require a docstring.
// C0330: bad-continuation - Wrong %s indentation%s%s. TODO
],
//
//
Al formatear código por primera vez después de instalar la extensión Python, Visual Studio Code mostrará un aviso indicando que no hay ningún formateador de código de Python instalado y que le ofrecerá la opción de instalar algún módulo de autoformato. Actualmente (enero de 2020), los módulos de autoformato que ofrece son:
Nota: En estos apuntes se recomienda el módulo black, pero se podría utilizar otro módulo. El formato aplicado no afecta al resultado ni a la velocidad de ejecución de los programas.
Nota: Como puede verse en la captura, se muestra un aviso en color amarillo indicando que los paquetes se han instalado en una carpeta que no está en la variable de entorno de Windows PATH. Eso se debe a que VSCode instala los paquetes con la opción --user, por lo que los paquetes se instalan en la carpeta ..\AppData\Roaming\Programs\Python\..., mientras que Python está instalado en ..\AppData\Local\Programs\Python\... En principio no es necesario añadir ninguna carpeta al PATH de Windows.
Hay situaciones en las que el formateador black entra en conflicto con el validador pylint.
Una de estas situaciones se produce con el sangrado de las condiciones en una sentencia if como el del ejemplo siguiente:
a = 5
b = 7
c = 10
if (
c > a
and c > b
):
print("c es mayor que a y que b")
else:
print("c no es mayor que a y que b")
En este ejemplo, las líneas de la condición (líneas 4 y 5) tienen el mismo sangrado que los bloques de instrucciones (líneas 8 y 10). Este sangrado uniforme es el que aplica black, pero pylint indica un aviso "Wrong hanging indentation before block (add 4 spaces). pylint(bad-continuation)"
pylint prefiere que la condición tenga más sangrado que los bloques de instrucciones, como en el ejemplo siguiente:
a = 5
b = 7
c = 10
if (
c > a
and c > b
):
print("c es mayor que a y que b")
else:
print("c no es mayor que a y que b")
Ambos sangrados son sintácticamente válidos y siguen las reglas de formato de Python (Pep 8, pero el problema es que cada vez que formateamos con black el segundo programa, black lo deja como el primero y pylint muestra un aviso (en realidad, muestra varias veces el mismo aviso, uno por línea).
Hace tiempo que se ha pedido tanto a black como a pylint que resuelvan esta situación (pylint issue #289 y black issue #48), pero ninguno de los dos da su brazo a torcer.
A la espera de que black o pylint corrijan su comportamiento, la única solución que he encontrado ha sido desactivar el aviso C0330 de pylint.
No es necesario añadir ninguna tarea específica.
Estos son los atajos de teclado que se aconseja añadir para seguir este curso.
//
// Atajos de teclado recomendados para el curso Introducción a la programación con Python de www.mclibre.org
{
// Pasar el foco al terminal
"key": "ctrl+alt+NumPad_Add",
"command": "workbench.action.terminal.focus"
},
{
// Pasar el foco al editor de programa
"key": "ctrl+alt+NumPad_Subtract",
"command": "workbench.action.focusActiveEditorGroup",
"when": "terminalFocus"
},
{
// Eliminar atajo predeterminado para liberar el atajo Ctrl+Alt+t
"key": "ctrl+alt+t",
"command": "-workbench.action.terminal.focus"
},
{
// Limpiar el terminal
"key": "ctrl+alt+t ctrl+alt+l",
"command": "multiCommand.clearTerminal"
},
{
// Cerrar el terminal
"key": "ctrl+alt+t ctrl+alt+c",
"command": "workbench.action.terminal.kill"
},
{
// Ejecutar programa de Python en el terminal (manteniendo el foco en el editor)
"key": "ctrl+alt+f5",
"command": "multiCommand.pythonExecuteInTerminal",
},
{
// Ejecutar programa de Python en el terminal (pasando el foco al termninal)
"key": "ctrl+alt+shift+f5",
"command": "multiCommand.pythonExecuteAndFocusInTerminal"
},
{
// Ejecutar MPTC en el terminal (el usuario debe escribir el código MPTC)
"key": "ctrl+alt+f6",
"command": "multiCommand.pythonMptcInTerminal",
},
//
// Atajos de teclado recomendados para el curso Introducción a la programación con Python de www.mclibre.org
[
{
// Pasar el foco al terminal
"key": "ctrl+alt+NumPad_Add",
"command": "workbench.action.terminal.focus"
},
{
// Pasar el foco al editor de programa
"key": "ctrl+alt+NumPad_Subtract",
"command": "workbench.action.focusActiveEditorGroup",
"when": "terminalFocus"
},
{
// Eliminar atajo predeterminado para liberar el atajo Ctrl+Alt+t
"key": "ctrl+alt+t",
"command": "-workbench.action.terminal.focus"
},
{
// Limpiar el terminal
"key": "ctrl+alt+t ctrl+alt+l",
"command": "multiCommand.clearTerminal"
},
{
// Cerrar el terminal
"key": "ctrl+alt+t ctrl+alt+c",
"command": "workbench.action.terminal.kill"
},
{
// Ejecutar programa de Python en el terminal (manteniendo el foco en el editor)
"key": "ctrl+alt+f5",
"command": "multiCommand.pythonExecuteInTerminal",
},
{
// Ejecutar programa de Python en el terminal (pasando el foco al termninal)
"key": "ctrl+alt+shift+f5",
"command": "multiCommand.pythonExecuteAndFocusInTerminal"
},
{
// Ejecutar MPTC en el terminal (el usuario debe escribir el código MPTC)
"key": "ctrl+alt+f6",
"command": "multiCommand.pythonMptcInTerminal",
},
]
Entre los atajos recomendados, cuatro de ellos están relacionados con la ventana de terminal:
Si no se había abierto todavía ninguna ventana de termninal, el atajo abre una nueva ventana de terminal automáticamente. La primera vez que se abre una ventana de terminal, la ventana se abre en el directorio raíz del área de trabajo.
Los dos atajos (Ctrl+Alt+F5 y Ctrl+Alt+Shift+F5) permiten ejecutar el programa de Python que se esté editando. El programa se ejecuta en la ventana de terminal PowerShell de Visual Studio Code. Se ha elegido la tecla F5 ya que esta es la tecla que permite ejecutar programas en IDLE.
Ambos atajos cambian automáticamente al directorio en el que se encuentra el programa y lo ejecutan en ese directorio.
La diferencia entre ambos atajos es que:
Si no se define el atajo de teclado, el programa se puede ejecutar igualmente haciendo clic derecho en el cuerpo del programa y eligiendo la opción "Ejecutar archivo Python en la terminal".
En este caso, el terminal se abre en el directorio raíz del área de trabajo y el foco se mantiene en el editor.
El atajo Ctrl+Alt+F6 está pensado para facilitar el uso de MPTC. .