Skip to content

2. Configuración de un entorno de trabajo

2.1. Python 3.8.1

Los ejemplos de este documento se han probado con el intérprete de Python 3.8.1 disponible en URL |https://www.python.org/downloads/| (feb. 2020) en un equipo con Windows 10:

Image

La instalación de Python crea el árbol de archivos [1] y el menú [2] en la lista de programas:

Image

  • [3-4]: dos intérpretes interactivos de Python;
  • [5]: la documentación de Python;
  • [6]: la documentación de los módulos de Python;

No utilizaremos el intérprete interactivo de Python. Solo hay que saber que los scripts de este documento podrían ejecutarse con este intérprete. Aunque resulta útil para probar el funcionamiento de una funcionalidad de Python, no lo es tanto para scripts que deban reutilizarse. He aquí un ejemplo con el option [4] anterior:

Image

El indicador >>> permite introducir una instrucción de Python que se ejecuta inmediatamente. El código escrito anteriormente tiene el siguiente significado:

1
2
3
4
5
6
>>> nom="tintin"
>>> print("nom=%s" % nom)
nom=tintin
>>> print("type=%s" % type(nom))
type=<class 'str'>
>>>

Líneas:

  • 1: inicialización de una variable. En Python, no se declara el tipo de las variables. Estas adoptan automáticamente el tipo del valor que se les asigna. Este tipo puede cambiar con el tiempo;
  • 2: visualización del nombre. «nom=%s» es un formato de visualización en el que %s es un parámetro formal que designa una cadena de caracteres. nom es el parámetro efectivo que se mostrará en lugar de %s;
  • 3: el resultado de la visualización;
  • 4: visualización del tipo de la variable nombre;
  • 5: la variable nombre es aquí de tipo class. Con Python 2.7 tendría el valor <type 'str'>;

Ahora, abramos una consola de Windows:

Image

El hecho de que hayamos podido escribir [python] en lugar de [1] y de que se haya encontrado el ejecutable [python.exe] demuestra que este se encuentra en el directorio PATH de la máquina Windows. Esto es importante porque significa que las herramientas de desarrollo de Python podrán encontrar el intérprete de Python. Se puede comprobar de la siguiente manera:

Image

  • en [2], salimos del intérprete de Python;
  • en [3], el comando que muestra el PATH de los ejecutables de la máquina Windows;
  • en [4], se ve que la carpeta del intérprete de Python 3.8 forma parte de PATH;

2.2. El IDE PyCharm Community

2.2.1. Introducción

Para compilar y ejecutar los scripts de este documento, hemos utilizado el editor [PyCharm] edición Community disponible (feb. 2020) en URL |https://www.jetbrains.com/fr-fr/pycharm/download/#section=windows| :

Image

Descargue IDE PyCharm Community [1-3] e instálelo.

Ejecutemos IDE PyCharm y creemos un primer proyecto en Python:

Image

Image

  • En [2-4], cree un nuevo proyecto;

El IDE PyCharm presenta el proyecto creado de la siguiente forma:

Image

  • en [2-3], examinemos las propiedades de IDE;

Image

  • en [4], el intérprete de Python que se utilizará para el proyecto;
  • en [5], una lista desplegable de los intérpretes disponibles;
  • En [6], se selecciona el intérprete descargado en el apartado |Python 3.8.1|;

Image

  • en [7], el intérprete seleccionado;
  • en [8], la lista de paquetes disponibles con este intérprete. Los paquetes contienen módulos que pueden utilizar los scripts de Python. Hay cientos de módulos disponibles;

Empecemos por crear una carpeta en la que pondremos nuestro primer script de Python:

Image

  • haga clic con el botón derecho del ratón sobre el proyecto y, a continuación, seleccione [1-2] para crear una carpeta;
  • En [3], escribe el nombre de la carpeta: se creará en la carpeta del proyecto;

A continuación, creemos un script de Python:

Image

  • Haga clic con el botón derecho del ratón en la carpeta [bases] y, a continuación, en [1-3];
  • en [4-5], indique el nombre del script;

Escribamos nuestro primer script:

Image

  • en [3], escribimos el siguiente script:

    • líneas 1 y 3: los comentarios comienzan con el signo #;
    • línea 2: inicialización de una variable. Python no declara el tipo de sus variables;
    • línea 4: visualización en pantalla. La sintaxis utilizada aquí es [format % données] con:
      • formato: nombre=%s, donde %s designa la ubicación de una cadena de caracteres. Esta se encontrará en la parte [données] de la expresión;
      • datos: el valor de la variable [nom] sustituirá al formato %s en la cadena de formato;
    • con [4-5], se reformatea el código según las recomendaciones del organismo que gestiona Python;

El script se ejecuta haciendo clic con el botón derecho del ratón sobre el código [6]:

Image

  • en [7], el comando ejecutado;
  • en [8], el resultado de la ejecución;

Para ejecutar el script del documento, descargue el código en URL |https://tahe.developpez.com/tutoriels-cours/python-flask-2020/documents/python-flask-2020.rar| y, a continuación, en PyCharm, proceda de la siguiente manera:

Image

  • en [1-2], abrir un proyecto existente: seleccione la carpeta del código descargado;
  • en [3], el proyecto abierto;
  • en [4-5], ejecución de uno de los scripts del proyecto;

Image

  • en [7-8], los resultados de la ejecución;

2.2.2. Entorno de ejecución virtual

Nuestro entorno de trabajo ya está operativo. Sin embargo, lo modificaremos para escribir los scripts de este curso. En primer lugar, modifiquemos la configuración de Pycharm:

Image

En la ventana de la derecha:

  • por defecto, la casilla [1] está marcada. La desmarcamos para que Pycharm no abra por defecto el último proyecto abierto, sino que nos permita elegir el que queremos abrir;
  • en [2], no confirmamos la salida de Pycharm al cerrar la ventana de la aplicación;
  • en [3], se abren los nuevos proyectos en otra ventana;
  • en [4], si cerramos Pycharm y hay un programa en ejecución, este se detiene;

Ahora cerremos PyCharm y volvamos a abrirlo:

Image

  • en [1], creamos un nuevo proyecto;
  • en [2], indicamos la carpeta del proyecto;
  • En [3], se utiliza un entorno virtual. Un entorno virtual es específico del proyecto que se está creando. No se mezcla con los entornos virtuales de otros proyectos. Un proyecto de Python/Flask utiliza numerosas bibliotecas externas que hay que instalar. Un proyecto P1 puede utilizar una biblioteca B en su version v1 y un proyecto P2 puede utilizar la misma biblioteca B, pero en su version v2. Estas dos versiones pueden ser más o menos compatibles. Sin embargo, cuando se instala una biblioteca en su version v2 y ya hay instalada una version v1, esta última es sobrescrita por la version v2. Esto puede suponer un problema para el proyecto que utilizaba la version v1 si la nueva version v2 no es totalmente compatible con la version v1. Para evitar estos problemas, se aísla cada proyecto en un entorno virtual;
  • en [4], especifique la carpeta donde se almacenarán las bibliotecas de Python que se descargarán durante el proyecto. Aquí hemos elegido una carpeta [venv] (entorno virtual) dentro de la carpeta del proyecto. No es obligatorio hacerlo;
  • en [5], el intérprete de Python del proyecto. Es el que hemos instalado en el paso anterior;
  • en [6], crear el proyecto;

Image

  • en [7-8], el proyecto creado;
  • en [9], el entorno de ejecución del proyecto, denominado entorno virtual;
  • en [10], la carpeta [site-packages] es la carpeta en la que se almacenarán las bibliotecas descargadas posteriormente;

2.2.3. Git

A continuación, se activa un software de control de código fuente. En este caso será Git [1-4]:

Image

Un software de control del código fuente (VCS: Version Control System) permite seguir la evolución de un proyecto. Se pueden tomar instantáneas, mediante una operación llamada «commit», del proyecto en diferentes momentos de su vida. Si se realizan dos commits en los momentos T y T+1, el VCS permite saber qué ha cambiado entre las dos versiones confirmadas. Normalmente, el VCS lo utiliza un equipo de desarrolladores. Estos realizan commits de su código cuando este ha sido debidamente probado. A partir del VCS, los demás desarrolladores pueden recuperar este código validado y utilizarlo.

En este caso, solo hay un desarrollador. La experiencia demuestra que puede darse el caso de que una aplicación funcione en el momento T y deje de funcionar en el momento T+1. En ese caso, nos gustaría volver atrás al momento T para empezar de cero. El VCS permite hacerlo y por eso lo vamos a utilizar aquí.

Mostramos cómo hacerlo con Git.

Image

  • En [1], selecciona la pestaña [Git] (abajo a la izquierda);
  • en [2], vemos que hay 495 archivos del proyecto que no están controlados por Git. Esto significa que no formarán parte de las fotos del proyecto durante los commits;
  • en [3], el botón de [commit] o botón de validación del proyecto. Como se ha dicho, Git toma entonces una instantánea del proyecto y la almacena en una carpeta [.git] en la raíz del proyecto (no mostrada por Pycharm pero visible en el explorador de Windows);

Validemos [3] el proyecto en su estado actual.

  • En [4], la lista de archivos sin versionar;
  • en [5], todos estos archivos sin versionar pertenecen al entorno virtual [venv];
  • en [6], toda confirmación debe ir acompañada de un mensaje. El desarrollador incluye aquí los cambios introducidos por version, que se va a confirmar, con respecto a la última confirmación version;

Git puede ignorar algunas carpetas o archivos. En ese caso, nunca forman parte del repositorio. En [5], arriba, hagamos clic con el botón derecho en la carpeta [venv].

  • En [1-3], se indica que la carpeta [venv] no debe formar parte de las instantáneas de Git. La lista de carpetas y archivos ignorados por Git se guarda en un archivo llamado [.gitignore] [4];

Image

Image

  • Tras la operación anterior, todos los archivos de la carpeta [venv] desaparecen de la lista de archivos no versionados. Solo queda el archivo [.gitignore] que acabamos de crear;
  • en [5], lo seleccionamos para que se guarde;
  • en [6], creamos un mensaje de confirmación:
  • En [7], se valida. A continuación, se toma la foto del proyecto;

Image

  • en [8-9], el contenido del archivo [.gitignore]: una sola línea con el nombre de la carpeta [/venv], que indica que su contenido debe ignorarse en las fotos;

Veamos ahora para qué nos puede servir Git. En primer lugar, creamos una carpeta [git] (puedes usar cualquier otro nombre; se puede eliminar al final de la demostración):

Image

  • en [1-5], creamos una carpeta [git];

Image

  • en [6-10], creamos un script de Python [git_01];

Image

  • en [11-12], el script solo contiene un comentario;
  • en [13-14], se crea una copia de [git_01]. Para ello, seleccione [git_01] y pulse Ctrl-C (Copiar), luego (Ctrl-V) (Pegar) e indique [git_02] como nombre de archivo;

Image

Ahora, confirmemos nuestro proyecto. Se tomará una foto con los dos archivos [git_01, git_02];

Image

  • en [1-3], se confirma el proyecto;
  • en [4], seleccionamos los archivos no versionados que queremos confirmar, en este caso todos;
  • en [5], se introduce el mensaje que identifica la confirmación;
  • en [6], se valida;

Image

  • en [1-2], se confirma la confirmación;
  • en [3], seleccionamos la pestaña [Log];
  • en [4], una vista de las ramas del proyecto. Aquí, una sola rama llamada [master];
  • en [5-6], la confirmación que se acaba de realizar;

Ahora creemos de la misma manera un script [git_03]:

Image

Modifiquemos el script [git_02] y eliminemos el script [git_01]:

Image

A continuación, confirmemos el nuevo version:

Image

Ahora tenemos dos confirmaciones en los registros:

Image

Al seleccionar una confirmación concreta, aparece a su derecha el árbol de archivos del proyecto:

Image

Ahora supongamos que la última confirmación nos ha llevado a un callejón sin salida y que queremos volver a una situación correspondiente a una de las confirmaciones anteriores:

Image

  • en [1-2], seleccionamos la confirmación al estado de la cual queremos volver;
  • en [3-5], existen varios modos de restablecimiento. Elegimos el modo [hard], que vuelve al estado seleccionado perdiendo los cambios que se han realizado desde entonces;

Image

  • en [6], se ha recuperado [git_01], que había sido eliminado;
  • en [7-8], se recupera [git_02] en su estado original sin la modificación que se había realizado;

Ahora, modifiquemos [git_02] y añadamos [git_03] y [1-4]:

Image

Ahora, volvamos a realizar la operación para volver a la confirmación inicial:

Image

  • en [1-4], volvemos a la foto de la confirmación n.º 1;
  • en [5-6], tomamos option [Keep] en lugar de [Hard]. Estas opciones no son fáciles de entender. Por lo tanto, hay que probarlas:
  • en [1], el archivo [git_03] sigue ahí;
  • en [2-3], el archivo [git_02] ha conservado sus modificaciones;

Es difícil decir qué ha hecho este [Revert Commit]. Ahora confirmemos la situación actual:

Image

  • en [1-6], la confirmación;

Image

  • en [9], vemos la nueva confirmación;

Ahora, intentemos volver al commit 1 tal y como ya se ha hecho:

  • en [1-6], volvemos a la confirmación n.º 1 en modo [Hard];

Image

  • en [7-8], esta vez sí que se han perdido todas las modificaciones realizadas desde la primera confirmación;

A partir de aquí, no volveremos a [Git]. El lector podrá trabajar de la siguiente manera:

  • podrá seguir los ejemplos que se proporcionan, ya sea escribiéndolos él mismo o descargándolos de la página web del curso;
  • cada vez que un ejemplo funcione, podrá realizar un commit de su proyecto;
  • cuando desarrolle su propio código y se encuentre en un callejón sin salida, sabrá que puede volver a una situación estable, volviendo a una confirmación anterior;

2.3. Convenciones de escritura del código Python

Se puede escribir código Python sin seguir las convenciones de escritura y eso no impedirá que funcione. Pero podría no ser bien recibido por la comunidad Python, que ha establecido unas convenciones de escritura. Estas se resumen en un documento Post disponible en la dirección |https://stackoverflow.com/questions/159720/what-is-the-naming-convention-in-python-for-variable-and-function-names|:

Image

  • el nombre de un módulo (module_name) sigue una convención denominada a veces [snake_case]: todo en minúsculas, con palabras separadas, en su caso, por el carácter de subrayado. Esta convención [snake_case] se aplica a los nombres de métodos, paquetes, variables y funciones;
  • el nombre de una clase (ClassName) sigue una convención denominada en ocasiones [PascalCase]: una secuencia de palabras unidas con cada letra inicial en mayúscula;
  • los nombres de las constantes siguen la convención [SNAKE_CASE]: una secuencia de palabras en mayúsculas separadas por el carácter de subrayado;

Estas convenciones se han seguido en general en este documento. Sin embargo, para los módulos que definen una clase, he dado al módulo el mismo nombre que la clase que contiene. Por lo tanto, sigue la convención [PascalCase] en lugar de [snake_case]. Quería poder identificar rápidamente los módulos de clases.