Python
Python
Python
Python es un lenguaje de programación popular confiable, flexible, fácil de aprender, de uso libre en todos los
sistemas operativos y admitido por una gran comunidad de desarrolladores y muchas bibliotecas gratuitas.
Python es compatible con todos los modos de desarrollo, lo que incluye aplicaciones web, servicios web,
aplicaciones de escritorio, scripting e informática científica, y lo utilizan muchas universidades, científicos,
programadores ocasionales y desarrolladores profesionales. Puede obtener más información sobre el lenguaje
en python.org y Python for Beginners (Python para principiantes).
Visual Studio es un potente IDE de Python en Windows. Visual Studio proporciona compatibilidad con código
abierto para el lenguaje Python a través del desarrollo de Python y las cargas de trabajo de ciencia de
datos (Visual Studio 2017 y versiones posteriores) y la extensión gratuita Herramientas de Python para Visual
Studio (Visual Studio 2015 y versiones anteriores).
Python no se admite actualmente en Visual Studio para Mac, pero está disponible en Mac y Linux a través de
Visual Studio Code (vea las preguntas y respuestas).
Primeros pasos:
Siga las instrucciones de instalación para configurar la carga de trabajo de Python.
Familiarícese con las capacidades de Python de Visual Studio a través de las secciones de este artículo.
Consulte una o varias de las guías de inicio rápido para crear un proyecto. Si no está seguro, comience por
Create a web app with Flask (Crear una aplicación web con Flask).
Consulte una o varias de las guías de inicio rápido para crear un proyecto. Si no está seguro, empiece por
Inicio rápido: Apertura y ejecución de código de Python en una carpeta o Creación de una aplicación web con
Flask.
Siga el tutorial Trabajar con Python en Visual Studio para obtener una experiencia completa.
NOTE
Visual Studio admite la versión 2.7 de Python, así como las versiones 3.5 a 3.7. Aunque es posible usar Visual Studio para
editar el código escrito en otras versiones de Python, no se admiten oficialmente esas versiones y características como
IntelliSense y la depuración podrían no funcionar. La compatibilidad con la versión 3.8 de Python aún está en desarrollo;
consulte los detalles específicos sobre este problema de compatibilidad en GitHub.
Ventana interactiva
Para cada entorno de Python que Visual Studio conozca, puede abrir fácilmente el mismo entorno (REPL)
interactivo para un intérprete Python directamente dentro de Visual Studio, en lugar de usar un símbolo del
sistema independiente. También puede cambiar fácilmente entre entornos. (Para abrir un símbolo del sistema
independiente, seleccione el entorno que quiera en la ventana Entornos de Python y seleccione el comando
Abrir en PowerShell como se ha explicado anteriormente en Compatibilidad con diversos intérpretes).
Visual Studio también proporciona una estrecha integración entre el editor de código de Python y la ventana
interactiva . Mediante el método abreviado de teclado Ctrl +Entrar , la línea (o el bloque) de código actual
presente en el editor se envía cómodamente a la ventana interactiva y, a continuación, se pasa a la línea (o
bloque) siguiente. El método abreviado Ctrl +Entrar le permite revisar fácilmente el código sin tener que
ejecutar el depurador. Puede también enviar código seleccionado a la ventana interactiva con la misma
pulsación de tecla y pegar fácilmente el código desde la ventana interactiva en el editor. Juntas, estas
capacidades le permiten determinar los detalles de un segmento de código en la ventana interactiva y guardar
fácilmente los resultados en un archivo en el editor.
Visual Studio también es compatible con IPython o Jupyter en REPL, incluidos gráficos en línea, .NET y Windows
Presentation Foundation (WPF).
Para obtener más información:
Ventana interactiva
IPython en Visual Studio
Visual Studio lo ayuda a administrar la complejidad de un proyecto a medida que se desarrolla con el tiempo.
Un proyecto de Visual Studio es mucho más que una estructura de carpetas: incluye una descripción de cómo se
utilizan distintos archivos y cómo se relacionan entre sí. Visual Studio lo ayuda a distinguir el código de
aplicación, el código de prueba, las páginas web, JavaScript, los scripts de compilación, etcétera, lo cual,
posteriormente, habilita las características apropiadas para los archivos. Además, una solución de Visual Studio
lo ayuda a administrar varios proyectos relacionados, como por ejemplo, un proyecto de Python y un proyecto
de extensión de C++.
Las plantillas de proyecto y elemento automatizan el proceso de configuración de distintos tipos de proyectos y
archivos, le permiten ahorrar tiempo y evitan que tenga que administrar detalles complejos y propensos a
errores. Visual Studio proporciona plantillas para web, Azure, ciencia de datos, consola y otros tipos de
proyectos, junto con las plantillas para archivos, como clases de Python, pruebas unitarias, configuración web de
Azure, HTML e incluso aplicaciones Django.
Para obtener más información:
Documento: Proyectos de Python
Documento: Referencia de plantillas de elemento
Documento: Plantillas de proyecto de Python
Documento: Creación de una extensión de C++ para Python
Documento de características generales de Visual Studio: Plantillas de proyecto y elemento
Documento de características generales de Visual Studio: Soluciones y proyectos en Visual Studio
Preguntas y respuestas
P. ¿Visual Studio para Mac es compatible con Python?
A. No en este momento, pero puede votar a favor de la solicitud en la comunidad de desarrolladores. La
documentación de Visual Studio para Mac identifica los tipos actuales de desarrollo que admite. Mientras tanto,
Visual Studio Code en Windows, Mac y Linux funciona bien con Python a través de las extensiones disponibles.
P. ¿Qué puedo usar para generar la interfaz de usuario con Python?
A. La oferta principal en este área es Qt Project, con enlaces para Python denominados PySide (el enlace oficial)
(vea también las descargas de PySide) y PyQt. En la actualidad, la compatibilidad con Python en Visual Studio no
incluye herramientas específicas para el desarrollo de la interfaz de usuario.
P. ¿Puede un proyecto de Python producir un archivo ejecutable independiente?
A. Por lo general, Python es un lenguaje interpretado, con código que se ejecuta bajo demanda en un entorno
compatible con Python adecuado como Visual Studio y servidores web. En la actualidad, Visual Studio no
proporciona por sí mismo los medios para crear un archivo ejecutable independiente, lo que significa
básicamente un programa con un intérprete de Python insertado. En cambio, la comunidad de Python ha
proporcionado varios medios para crear ejecutables como se describe en StackOverflow. CPython también se
puede insertar en una aplicación nativa, como se describe en la entrada de blog Using CPython's Embeddable
Zip File (Uso del archivo Zip insertable de CPython).
Compatibilidad de características
Las características de Python se pueden instalar en las siguientes ediciones de Visual Studio, tal y como se
describe en la guía de instalación:
Visual Studio 2019 (todas las ediciones)
Visual Studio 2017 (todas las ediciones)
Visual Studio 2015 (todas las ediciones)
Visual Studio 2013 Community Edition
Visual Studio 2013 Express para Web, Update 2 o una versión posterior
Visual Studio 2013 Express para escritorio, Update 2 o una versión posterior
Visual Studio 2013 (edición Pro o una versión posterior)
Visual Studio 2012 (edición Pro o una versión posterior)
Visual Studio 2010 SP1 (edición Pro o una versión posterior; se necesita .NET 4.5)
Visual Studio 2015 y las versiones anteriores están disponibles en visualstudio.microsoft.com/vs/older-
downloads/.
IMPORTANT
Las características son totalmente compatibles y se mantienen para la versión más reciente de Visual Studio
exclusivamente. Estas características están disponibles en versiones anteriores, pero no se mantienen de manera activa.
C O M PAT I
B IL IDA D 2013
DE 2013 ESC RITO R 2013 2012 2010 SP 1
PYT H ON 2017+ 2015 C OMM IO 2013 W EB P RO + P RO + P RO +
Administr ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
ar varios
intérprete
s
Detección ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
automáti
ca de
intérprete
s
populares
Agregar ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
intérprete
s
personali
zados
Entornos ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
virtuales
Pip e ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
instalació
n sencilla
SIST EM A
DE 2013
P RO Y EC T 2013 ESC RITO R 2013 2012 2010 SP 1
OS 2017+ 2015 C OMM IO 2013 W EB P RO + P RO + P RO +
Nuevo ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
proyecto
a partir
de código
existente
Mostrar ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
todos los
archivos
Control ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
de código
fuente
Integraci ✔ ✔ ✔ ✔ ✔ ✔ ✔1 ✗
ón de Git
2013
2013 ESC RITO R 2013 2012 2010 SP 1
EDIC IÓ N 2017+ 2015 C OMM IO 2013 W EB P RO + P RO + P RO +
Resalte ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
de
sintaxis
Autocom ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
pletar
Ayuda ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
para la
firma
Informaci ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
ón rápida
Examinad ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
or de
objetos o
vista de
clases
Barra de ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
navegaci
ón
Ir a ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
definición
Navegar ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
a
2013
2013 ESC RITO R 2013 2012 2010 SP 1
EDIC IÓ N 2017+ 2015 C OMM IO 2013 W EB P RO + P RO + P RO +
Buscar ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
todas las
referencia
s
Sangría ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
automáti
ca
Formateo ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
del
código
Refactoriz ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
ar -
Cambiar
nombre
Refactoriz ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
ar -
Extraer
método
Refactoriz ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
ar -
Agregar y
quitar
informe
PyLint ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
VEN TA N A 2013
IN T ERA C 2013 ESC RITO R 2013 2012 2010 SP 1
T IVA 2017+ 2015 C OMM IO 2013 W EB P RO + P RO + P RO +
Ventana ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
interactiv
a
IPython ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
con
gráficos
insertado
s
2013
ESC RITO R 2013 ESC RITO R 2013 2012 2010 SP 1
IO 2017+ 2015 C OMM IO 2013 W EB P RO + P RO + P RO +
Aplicació ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
n de
consola y
Windows
WPF en ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
IronPyth
on (con
diseñador
XAML)
Windows ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
Forms en
IronPyth
on
2013
2013 ESC RITO R 2013 2012 2010 SP 1
W EB 2017+ 2015 C OMM IO 2013 W EB P RO + P RO + P RO +
Proyecto ✔ ✔ ✔ ✗ ✔ ✔ ✔ ✔
web de
Django
Proyecto ✔ ✔ ✔ ✗ ✔ ✔ ✔ ✔
web de
Bottle
Proyecto ✔ ✔ ✔ ✗ ✔ ✔ ✔ ✔
web de
Flask
Proyecto ✔ ✔ ✔ ✗ ✔ ✔ ✔ ✔
web
genérico
2013
2013 ESC RITO R 2013 2012 2010 SP 1
A Z URE 2017+ 2015 C OMM IO 2013 W EB P RO + P RO + P RO +
Impleme ✔ ✔ ✔ ✗ ✔ ✔ ✔ ✔2
ntación
en el sitio
web
Impleme ✔ ✔ ✔ ✗ ✔4 ✔4 ✔3 ✗
ntación
en el rol
web
2013
2013 ESC RITO R 2013 2012 2010 SP 1
A Z URE 2017+ 2015 C OMM IO 2013 W EB P RO + P RO + P RO +
Impleme ? ? ? ✗ ✔4 ✔4 ✔3 ✗
ntación
en el rol
de
trabajo
Ejecución ? ? ? ✗ ✔4 ✔4 ✔3 ✗
en el
emulador
de Azure
Depuraci ✔ ✔ ✔ ✗ ✔6 ✔8 ✔8 ✗
ón
remota
Adjuntar ✔ ✔ ✔ ✗ ✔7 ✔7 ✗ ✗
en el
Explorado
r de
servidore
s
P L A N T IL L 2013
A S DE 2013 ESC RITO R 2013 2012 2010 SP 1
DJA N GO 2017+ 2015 C OMM IO 2013 W EB P RO + P RO + P RO +
Depuraci ✔ ✔ ✔ ✗ ✔ ✔ ✔ ✔
ón
Autocom ✔ ✔ ✔ ✗ ✔5 ✔5 ✔ ✔
pletar
Autocom ✔ ✔ ✔ ✗ ✔5 ✔5 ✗ ✗
pletar
para CSS
y
JavaScript
2013
DEP URA C 2013 ESC RITO R 2013 2012 2010 SP 1
IÓ N 2017+ 2015 C OMM IO 2013 W EB P RO + P RO + P RO +
Depuraci ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
ón
Depuraci ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
ón sin un
proyecto
2013
DEP URA C 2013 ESC RITO R 2013 2012 2010 SP 1
IÓ N 2017+ 2015 C OMM IO 2013 W EB P RO + P RO + P RO +
Depuraci ✔ ✔ ✔ ✔ ✗ ✔ ✔ ✔
ón -
Adjuntar
a la
edición
Depuraci ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✗
ón en
modo
mixto
Depuraci ✔ ✔ ✔ ✔ ✗ ✔ ✔ ✔
ón
remota
(Windows
, Mac OS
X y Linux)
Ventana ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
interactiv
a de
depuració
n
Generaci ✔ ✔ ✔ ✗ ✗ ✔ ✔ ✔
ón de
perfiles
2013
2013 ESC RITO R 2013 2012 2010 SP 1
P RUEB A 2017+ 2015 C OMM IO 2013 W EB P RO + P RO + P RO +
Explorado ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✗
r de
pruebas
Ejecución ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✗
de la
prueba
Depurar ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✗
prueba
1. La compatibilidad de Git para Visual Studio 2012 está disponible en la extensión Visual Studio Tools para
Git, disponible en Visual Studio Marketplace.
2. La implementación del sitio Web de Azure requiere Azure SDK para .NET 2.1 - Visual Studio 2010 SP1.
Las versiones más recientes no son compatibles con Visual Studio 2010.
3. La compatibilidad con el rol web y de trabajo de Azure requiere el SDK de Azure SDK para .NET 2.3 - VS
2012 o una versión posterior.
4. La compatibilidad con el rol web y de trabajo de Azure requiere el SDK de Azure SDK para .NET 2.3 - VS
2013 o una versión posterior.
5. El editor de plantillas de Django en Visual Studio 2013 tiene algunos problemas conocidos que se
resuelven mediante la instalación de Update 2.
6. Requiere Windows 8 o una versión posterior. Visual Studio 2013 Express para Web no tiene el cuadro de
diálogo Asociar al proceso , pero la depuración remota de sitios web de Azure sigue siendo posible
mediante el comando Adjuntar depurador (Python) en el Explorador de ser vidores . La depuración
remota requiere el SDK de Azure para .NET 2.3 - Visual Studio 2013 o una versión posterior.
7. Requiere Windows 8 o una versión posterior. El comando Adjuntar depurador (Python) del
Explorador de ser vidores requiere el SDK de Azure para .NET 2.3 - Visual Studio 2013 o una versión
posterior.
8. Requiere Windows 8 o una versión posterior.
Bienvenida al IDE de Visual Studio | Python
13/12/2021 • 5 minutes to read
El entorno de desarrollo integrado de Visual Studio es un panel de inicio creativo para Python (y otros
lenguajes) que se puede usar para editar, depurar y probar código y, después, publicar una aplicación. Un
entorno de desarrollo integrado (IDE) es un programa con numerosas características que se pueden usar para
muchos aspectos del desarrollo de software. Más allá del editor estándar y el depurador que proporcionan la
mayoría de IDE, Visual Studio incluye herramientas de finalización de código, entornos de REPL interactivos y
otras características para facilitar el proceso de desarrollo de software.
En esta imagen se muestra Visual Studio con un proyecto de Python abierto y varias ventanas de herramientas
clave que probablemente usará:
El Explorador de soluciones (parte superior derecha) permite ver, navegar y administrar los archivos
de código. El Explorador de soluciones puede ayudar a organizar el código al agrupar los archivos en
soluciones y proyectos.
Además del Explorador de soluciones , están los entornos de Python , donde se administran los
diferentes intérpretes de Python que hay instalados en el equipo.
También puede abrir y ejecutar código de Python en una carpeta sin crear archivos de solución ni un
proyecto de Visual Studio. Para obtener más información, vea Inicio rápido: Apertura y ejecución de
código de Python en una carpeta.
La ventana del editor (centro), donde es probable que pase la mayor parte del tiempo, muestra el
contenido del archivo. Aquí es donde se edita código de Python, se navega por la estructura del código y
se establecen puntos de interrupción durante las sesiones de depuración. Con Python, también puede
seleccionar código y presionar Ctrl+ENTRAR para ejecutar ese código en una ventana de REPL
interactiva.
La ventana Resultados (parte inferior central) es donde Visual Studio envía notificaciones, como mensajes
de error y de depuración, advertencias, mensajes de estado de publicación, etc. Cada fuente del mensaje
tiene su propia pestaña.
Una ventana de REPL interactiva de Python aparece en la misma área que la ventana Resultados.
Team Explorer (parte inferior derecha) permite realizar el seguimiento de los elementos de trabajo y
compartir código con otros usuarios mediante tecnologías de control de versiones como Git y Control de
versiones de Team Foundation (TFVC).
Ediciones
Visual Studio está disponible para Windows y Mac, pero Python solo es compatible con Visual Studio para
Windows.
Existen tres ediciones de Visual Studio en Windows: Community, Professional y Enterprise. Consulte Comparar
los IDE de Visual Studio para obtener información sobre las características que se admiten en cada edición.
Refactorización
Si hacemos clic con el botón derecho en un fragmento de código y seleccionamos Acciones rápidas y
refactorizaciones , Visual Studio proporciona operaciones como el cambio inteligente de nombres de
variables, la extracción de una o más líneas de código en un nuevo método, el cambio del orden de los
parámetros de método, etc.
Búsqueda de errores
La detección de errores comprueba si hay errores y problemas comunes en el código de Python, lo cual
fomenta un uso adecuado de patrones de codificación de Python.
Cuadro de búsqueda
Visual Studio puede parecer abrumador a veces con tantas propiedades, opciones y menús. El cuadro de
búsqueda supone una excelente manera de encontrar rápidamente lo que necesita en Visual Studio. Al
empezar a escribir el nombre de lo que está buscando, Visual Studio muestra resultados que llevan
exactamente a donde necesita ir. Si necesita agregar funcionalidad a Visual Studio, por ejemplo, agregar
compatibilidad con otro lenguaje de programación, el cuadro de búsqueda proporciona resultados que
abren el Instalador de Visual Studio para instalar un componente individual o una carga de trabajo.
Ir a la definición y verla
La característica Ir a definición lleva directamente a la ubicación donde se define una función o un tipo.
El comando Ver la definición muestra la definición en una ventana, sin tener que abrir un archivo
aparte. El comando Buscar todas las referencias es igualmente una forma útil de detectar aquellas
instancias en las que un identificador determinado se define y utiliza.
Depuración
Visual Studio proporciona una experiencia de depuración completa para Python, lo que incluye la
asociación a procesos en ejecución, la evaluación de expresiones en las ventanas Inspección e
Inmediato , la inspección de variables locales, los puntos de interrupción, las instrucciones Depurar paso
a paso por instrucciones/procedimientos/para salir, Establecer instrucción siguiente , etc. También
puede depurar código de Python remoto que se ejecuta en equipos Linux.
Pruebas unitarias
Visual Studio proporciona compatibilidad integrada para detectar, ejecutar y depurar pruebas unitarias en
el contexto del IDE.
Pasos siguientes
Continúe explorando Python en Visual Studio siguiendo uno de los siguientes tutoriales o inicios rápidos:
Inicio rápido: Crear una aplicación web con Flask
Uso de Python en Visual Studio
Introducción al marco web de Django en Visual Studio
Introducción al marco web Flask en Visual Studio
Vea también
Descubra más características de Visual Studio
Visite visualstudio.microsoft.com
Lea el blog de Visual Studio
Instalación de la compatibilidad con ciencia de
datos en Visual Studio
13/12/2021 • 4 minutes to read
La carga de trabajo Aplicaciones de ciencia de datos y de análisis, que se selecciona e instala mediante el
instalador de Visual Studio, reúne varios lenguajes y sus correspondientes distribuciones de tiempo de
ejecución:
Python y Anaconda
F# con .NET Framework
R y Microsoft R Client
Python
F# con .NET Framework
R y Python son dos de los principales lenguajes de scripting que se usan para la ciencia de datos. Ambos
lenguajes son fáciles de aprender y son compatibles con un ecosistema completo de paquetes. Estos paquetes
se centran en una amplia gama de escenarios, como la adquisición de datos, limpieza, entrenamiento de
modelos, implementación y trazado. F# también es un lenguaje de .NET eficaz y esencialmente funcional que
resulta adecuado para una amplia variedad de tareas de procesamiento de datos.
Python es un lenguaje de scripting fundamental que se usa para la ciencia de datos. Python es fácil de aprender
y es compatible con un ecosistema completo de paquetes. Estos paquetes se centran en una amplia gama de
escenarios, como la adquisición de datos, limpieza, entrenamiento de modelos, implementación y trazado. F#
también es un lenguaje de .NET eficaz y esencialmente funcional que resulta adecuado para una amplia variedad
de tareas de procesamiento de datos).
Opciones de carga de trabajo
De forma predeterminada, la carga de trabajo instala las opciones siguientes, que se pueden modificar en la
sección de resumen de la carga de trabajo en el instalador de Visual Studio:
Compatibilidad con el lenguaje de escritorio F#
Python:
Compatibilidad con el lenguaje Python
Compatibilidad web con Python
Compatibilidad con el idioma F#
Python:
Compatibilidad con el lenguaje Python
Anaconda3 64 bits, una distribución de Python que incluye completas bibliotecas de ciencia de datos y
un intérprete de Python.
Compatibilidad web con Python
Compatibilidad con plantillas de Cookiecutter
R:
Compatibilidad con el lenguaje R
Compatibilidad del entorno de tiempo de ejecución con herramientas de desarrollo de R
Microsoft R Client (intérprete de R de Microsoft totalmente compatible y admitido por la comunidad,
con bibliotecas de ScaleR para cálculos más rápidos en nodos o clústeres concretos. También puede
usar cualquier R de CRAN).
Para instalar la compatibilidad de Python para Visual Studio (también conocida como Herramientas de Python
para Visual Studio o PTVS), siga las instrucciones que aparecen en la sección correspondiente a su versión de
Visual Studio:
Visual Studio 2017 y Visual Studio 2019
Visual Studio 2015
Visual Studio 2013 y anterior
Para probar rápidamente la compatibilidad de Python después de seguir los pasos de instalación, abra la
ventana interactiva de Python ; para ello, presione Alt +I y escriba 2+2 . Si no ve la salida de 4 , revise los
pasos.
TIP
La carga de trabajo de Python incluye la útil extensión Cookiecutter que proporciona una interfaz gráfica de usuario para
detectar plantillas, opciones de plantilla de entrada y crear proyectos y archivos. Para obtener más información, vea Uso
de la extensión Cookiecutter.
NOTE
La compatibilidad con Python no está actualmente disponible en Visual Studio para Mac, pero está disponible en Mac y
Linux a través de Visual Studio Code. Consulte las preguntas y respuestas.
TIP
La edición Community es para desarrolladores individuales, aprendizaje en el aula, investigación académica y
desarrollo de código abierto. Para otros usos, instale Visual Studio 2019 Professional o Visual Studio 2019
Enterprise.
2. El instalador muestra una lista de las cargas de trabajo, que son grupos de opciones relacionadas para
áreas de desarrollo específicas. Para Python, seleccione la carga de trabajo Desarrollo de Python .
Opcional: si está trabajando con la ciencia de datos, considere también la posibilidad de la carga de
trabajo Aplicaciones de ciencia de datos y de análisis . Esta carga de trabajo incluye compatibilidad
con los lenguajes Python, R y F#. Para más información, vea Carga de trabajo Aplicaciones de ciencia de
datos y de análisis.
NOTE
Las cargas de trabajo de Python y Ciencia de datos solo están disponibles con Visual Studio 2017 versión 15.2 y
posteriores.
Opcional: si está trabajando con la ciencia de datos, considere también la posibilidad de la carga de
trabajo Aplicaciones de ciencia de datos y de análisis . Esta carga de trabajo incluye compatibilidad
con los lenguajes Python y F#. Para más información, vea Carga de trabajo Aplicaciones de ciencia de
datos y de análisis.
3. En la parte derecha del instalador, puede elegir opciones adicionales si lo prefiere. Omita este paso para
aceptar las opciones predeterminadas.
O P C IÓ N DESC RIP C IÓ N
O P C IÓ N DESC RIP C IÓ N
Compatibilidad con plantillas de Cookiecutter Instala la interfaz de usuario gráfica de Cookiecutter para
detectar plantillas, opciones de plantilla de entrada y
crear proyectos y archivos. Vea Uso de la extensión
Cookiecutter.
Compatibilidad web con Python Instala herramientas para desarrollo web, incluida la
compatibilidad de edición de HTML, CSS y JavaScript,
junto con plantillas de proyectos que usan los marcos
Bottle, Flask y Django. Vea Plantillas de proyecto web de
Python.
Compatibilidad con IoT de Python Admite el desarrollo de Windows IoT Core con Python.
O P C IÓ N DESC RIP C IÓ N
O P C IÓ N DESC RIP C IÓ N
Compatibilidad con plantillas de Cookiecutter Instala la interfaz de usuario gráfica de Cookiecutter para
detectar plantillas, opciones de plantilla de entrada y
crear proyectos y archivos. Vea Uso de la extensión
Cookiecutter.
Compatibilidad web con Python Instala herramientas para desarrollo web, incluida la
compatibilidad de edición de HTML, CSS y JavaScript,
junto con plantillas de proyectos que usan los marcos
Bottle, Flask y Django. Vea Plantillas de proyecto web de
Python.
4. Después de la instalación, el instalador proporciona opciones para modificar, iniciar, reparar o desinstalar
Visual Studio. El botón Modificar cambia a Actualizar cuando hay actualizaciones de Visual Studio
disponibles para alguno de los componentes instalados. (Después, la opción Modificar está disponible
en el menú desplegable). También puede iniciar Visual Studio y el instalador desde el menú Inicio de
Windows mediante la búsqueda de "Visual Studio".
Solución de problemas
Si encuentra problemas al instalar o ejecutar Python en Visual Studio, pruebe lo siguiente:
Determinar si se produce el mismo error mediante la CLI de Python, es decir, ejecutar python.exe desde un
símbolo del sistema.
Use la opción Reparar en el instalador de Visual Studio.
Reparar o reinstalar Python a través de Configuración > Aplicaciones y características en Windows.
Error de ejemplo : No se pudo iniciar el proceso interactivo: System.ComponentModel.Win32Exception
(0x80004005): Error desconocido (0xc0000135) en
Microsoft.PythonTools.Repl.PythonInteractiveEvaluator.d__43.MoveNext().
4. Una vez completada la instalación de Visual Studio, instale un intérprete de Python de su elección. Visual
Studio 2015 solo admite Python 3.5 y versiones anteriores, las versiones más recientes generan un
mensaje similar a Versión 3.6 de Python no compatible ). Si ya tiene instalado un intérprete y Visual
Studio no lo detecta de manera automática, consulte Identificación manual de un entorno existente.
Ubicaciones de instalación
De forma predeterminada, la compatibilidad de Python se instala para todos los usuarios de un equipo.
En Visual Studio 2019 y Visual Studio 2017, la carga de trabajo de Python se instala en
%ProgramFiles(x86)%\Microsoft Visual Studio\<VS_version>\
<VS_edition>Common7\IDE\Extensions\Microsoft\Python, donde <VS_version> es 2019 o 2017 y
<VS_edition> es Community, Professional o Enterprise.
En Visual Studio 2015 y versiones anteriores, las rutas de instalación son las siguientes:
32 bits:
Ruta de acceso: %Archivos de programa(x86)%\Microsoft Visual Studio
<VS_ver>\Common7\IDE\Extensions\Microsoft\Herramientas de Python para Visual Studio\
<PTVS_ver>
Ubicación del Registro de ruta de acceso:
HKEY_LOCAL_MACHINE\Software\Microsoft\PythonTools\<VS_ver>\InstallDir
64 bits:
Ruta de acceso: %Archivos de programa%\Microsoft Visual Studio
<VS_ver>\Common7\IDE\Extensions\Microsoft\Herramientas de Python para Visual Studio\
<PTVS_ver>
Ubicación del Registro de ruta de acceso:
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\PythonTools\
<VS_ver>\InstallDir
donde:
<VS_ver> es:
14.0 para Visual Studio 2015
12.0 para Visual Studio 2013
11.0 para Visual Studio 2012
10.0 para Visual Studio 2010
<PTVS_ver> es un número de versión, como 2.2.2, 2.1.1, 2.0, 1.5, 1.1 o 1.0.
Instalaciones específicas de usuario (1.5 y anteriores)
Herramientas de Python para Visual Studio 1.5 y las versiones anteriores permitían una instalación solo para el
usuario actual, en cuyo caso la ruta de instalación es %LocalAppData%\Microsoft\VisualStudio\
<VS_ver>\Extensions\Microsoft\Herramientas de Python para Visual Studio\<PTVS_ver> , donde <VS_ver> y
<PTVS_ver> se corresponden con las mismas versiones indicadas anteriormente.
Instalación de intérpretes de Python
13/12/2021 • 4 minutes to read
NOTE
Visual Studio admite la versión 2.7 de Python, así como las versiones 3.5 a 3.7. Aunque es posible usar Visual Studio para
editar el código escrito en otras versiones de Python, no se admiten oficialmente esas versiones y características como
IntelliSense y la depuración podrían no funcionar.
NOTE
Visual Studio admite la versión 3.7 de Python. Aunque es posible usar Visual Studio para editar el código escrito en otras
versiones de Python, no se admiten oficialmente esas versiones y características como IntelliSense y la depuración podrían
no funcionar.
Para Visual Studio 2015 y versiones anteriores , debe instalar manualmente uno de los intérpretes.
NOTE
Aunque Visual Studio ofrece instalar la distribución de Anaconda, su uso de esta y de los paquetes adicionales del
repositorio de Anaconda está regido por los términos de servicio de Anaconda. Estos términos pueden requerir que
algunas organizaciones tengan que pagar una licencia comercial a Anaconda o bien configurar herramientas para acceder
a un repositorio alternativo. Consulte la documentación de los canales de Conda para obtener más información.
Visual Studio (todas las versiones) detecta automáticamente cada intérprete de Python instalado y su entorno
mediante la comprobación del registro de acuerdo con PEP 514 - Python registration in the Windows registry
(PEP 514: registro de Python en el Registro de Windows). Las instalaciones de Python se encuentran
normalmente en HKEY_LOCAL_MACHINE\SOFTWARE\Python (32 bits) y
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Python (64 bits) y, luego, dentro de los nodos para
la distribución, como PythonCore (CPython) y ContinuumAnalytics (Anaconda).
Si Visual Studio no detecta un entorno instalado, consulte Identificación manual de un entorno existente.
Visual Studio muestra todos los entornos conocidos en la ventana Entornos de Python y detecta
automáticamente las actualizaciones de los intérpretes existentes.
IN T ÉRP RET E DESC RIP C IÓ N
Los desarrolladores que desean proporcionar nuevas formas de detección para entornos de Python pueden
consultar PTVS Environment Detection (Entorno detección PTVS) en github.com.
Trasladar un intérprete
Si mueve un intérprete existente a una ubicación nueva con el sistema de archivos, Visual Studio no detecta
automáticamente el cambio.
Si originalmente ha especificado la ubicación del intérprete a través de la ventana Entornos de Python ,
edite su entorno con la pestaña Configurar de esa ventana para identificar la ubicación nueva. Vea
Identificación manual de un entorno existente.
Si instaló el intérprete con un programa de instalación, use los pasos siguientes para volver a instalar el
intérprete en la ubicación nueva:
1. Restaure el intérprete de Python a su ubicación original.
2. Desinstale el intérprete mediante el instalador, que borra las entradas del Registro.
3. Vuelva a instalar el intérprete en la ubicación deseada.
4. Reinicie Visual Studio, el que debería detectar automáticamente la ubicación nueva en lugar de la
antigua.
Al seguir este proceso, se asegura de que las entradas del Registro que identifican la ubicación del intérprete,
que Visual Studio usa, se actualizan correctamente. Usar un instalador también controla cualquier otro efecto
secundario que pudiera surgir.
Consulte también
Administración de entornos de Python
Selección de un intérprete para un proyecto
Uso de requirements.txt para las dependencias
Rutas de acceso de búsqueda
Referencia de ventana Entornos de Python
Inicio rápido: Creación de la primera aplicación web
de Python con Visual Studio
13/12/2021 • 11 minutes to read
En esta introducción a Visual Studio como un IDE de Python, con una duración de entre 5 y 10 minutos, creará
una sencilla aplicación web Python basada en el marco Flask. El proyecto se crea mediante discretos pasos que
le ayudarán a conocer las características básicas de Visual Studio.
Si todavía no ha instalado Visual Studio, vaya a la página de descargas de Visual Studio para instalarlo de forma
gratuita. En el instalador, asegúrese de seleccionar la carga de trabajo Desarrollo de Python .
Si todavía no ha instalado Visual Studio, vaya a la página de descargas de Visual Studio para instalarlo de forma
gratuita. En el instalador, asegúrese de seleccionar la carga de trabajo Desarrollo de Python .
Si todavía no ha instalado Visual Studio, vaya a la página de descargas de Visual Studio para instalarlo de forma
gratuita. En el Instalador de Visual Studio, seleccione la carga de trabajo Desarrollo de Python y, en los
detalles de instalación, seleccione Compatibilidad web con Python .
4. El nuevo proyecto se abre en el panel de la derecha del Explorador de soluciones . En este momento el
proyecto está vacío porque no contiene ningún otro archivo.
::: moniker-end
1. Abra Visual Studio 2019.
2. En la pantalla de inicio, seleccione Crear un nuevo proyecto .
3. En el cuadro de diálogo Crear un nuevo proyecto , escriba "Web de Python" en el campo de búsqueda
en la parte superior, elija Proyecto web en la lista del medio y, a continuación, seleccione Siguiente :
Si no ve las plantillas de proyecto de Python, ejecute el Instalador de Visual Studio , seleccione Más >
Modificar , seleccione la carga de trabajo Desarrollo de Python y, a continuación, elija Modificar .
4. En el cuadro de diálogo Configure su nuevo proyecto que sigue, escriba "HelloPython" para Nombre
del proyecto , especifique una ubicación y seleccione Crear . (El valor Nombre de la solución se
establece automáticamente para que coincida con el Nombre del proyecto ).
5. El nuevo proyecto se abre en el panel de la derecha del Explorador de soluciones . En este momento el
proyecto está vacío porque no contiene ningún otro archivo.
Si no ve las plantillas de proyectos web de Python, seleccione Herramientas > Obtener herramientas
y características para ejecutar el Instalador de Visual Studio. En el Instalador, seleccione la carga de
trabajo Desarrollo de Python y, en Detalles de la instalación , seleccione Compatibilidad web con
Python . Después, seleccione Modificar .
4. En el cuadro de diálogo Configure el nuevo proyecto , escriba "HelloPython" para Nombre del
proyecto , especifique una ubicación y seleccione Crear . El Nombre de la solución se actualiza
automáticamente para coincidir con el Nombre del proyecto .
El nuevo proyecto se abre en el panel de la derecha del Explorador de soluciones . En este momento el
proyecto está vacío porque no contiene ningún otro archivo.
Pregunta: ¿Cuál es la ventaja de crear un proyecto en Visual Studio para una aplicación de
Python?
Respuesta : las aplicaciones de Python suelen definirse usando solo carpetas y archivos, pero esta estructura
sencilla puede resultar engorrosa a medida que aumenta el tamaño de las aplicaciones. Las aplicaciones pueden
contener archivos generados automáticamente, JavaScript para aplicaciones web y otros componentes. Un
proyecto de Visual Studio le ayuda a administrar esta complejidad.
El proyecto, un archivo .pyproj, identifica los archivos de origen y contenido asociados con el proyecto. El
archivo .pyproj contiene información de compilación de cada archivo, mantiene la información para integrarse
con sistemas de control de código fuente y ayuda a organizar la aplicación en componentes lógicos.
Pregunta: ¿Qué es la "solución" que se muestra en el Explorador de soluciones?
Respuesta : una solución de Visual Studio es un contenedor que le ayuda a administrar uno o varios proyectos
relacionados como un grupo. La solución almacena valores de configuración que no son específicos de un
proyecto. Los proyectos de una solución también pueden hacer referencia entre sí. Por ejemplo, la ejecución de
un proyecto de aplicación de Python puede compilar automáticamente un segundo proyecto, como una
extensión de C++ que usa la aplicación de Python.
2. Haga clic con el botón derecho en el entorno y seleccione Instalar paquete de Python . Este comando
abre la ventana Entornos de Python por la pestaña Paquetes .
3. Escriba "flask" en el campo de búsqueda y seleccione instalación de PIP flask desde PyPI . Acepte los
mensajes de privilegios de administrador y observe el progreso en la ventana Salida de Visual Studio.
(Se le pedirá confirmación de elevación cuando la carpeta de paquetes del entorno global esté ubicada en
un área protegida, como C:\Archivos de programa).
1. Expanda el nodo Entornos de Python en el proyecto para ver el entorno predeterminado para el
proyecto.
2. Haga clic con el botón derecho en el entorno y seleccione Administrar paquetes de Python... . Este
comando abre la ventana Entornos de Python en la pestaña Paquetes (PyPI) .
3. En el campo de búsqueda, escriba "flask". Si Flask aparece debajo del cuadro de búsqueda, puede omitir
este paso. En caso contrario, seleccione Comando de ejecución: pip install flask . Acepte los mensajes
de privilegios de administrador y observe el progreso en la ventana Salida de Visual Studio. (Se le pedirá
confirmación de elevación cuando la carpeta de paquetes del entorno global esté ubicada en un área
protegida, como C:\Archivos de programa).
1. Expanda el nodo Entornos de Python en el proyecto para ver el entorno predeterminado para el
proyecto.
2. Haga clic con el botón derecho en el entorno y seleccione Administrar paquetes de Python . Este
comando abre la ventana Entornos de Python en la pestaña Paquetes (PyPI) .
3. En el campo de búsqueda, escriba "flask". Si Flask aparece debajo del cuadro de búsqueda, puede omitir
este paso. En caso contrario, seleccione Comando de ejecución: pip install flask .
Aparece un aviso de elevación si la carpeta de paquetes del entorno global está en un área protegida,
como C:\Archivos de programa. Acepte las solicitudes de privilegios de administrador. Consulte la
ventana Salida de Visual Studio para ver el progreso.
Una vez instalada, la biblioteca aparece en el entorno en el Explorador de soluciones , lo que significa que
puede usarla en el código de Python.
NOTE
En lugar de instalar las bibliotecas en el entorno global, los desarrolladores suelen crear un "entorno virtual" en el que se
instalan las bibliotecas de un proyecto específico. Las plantillas de Visual Studio normalmente ofrecen esta opción, como
se describe en Inicio rápido: Crear un proyecto de Python desde una plantilla en Visual Studio.
Pregunta: ¿Dónde puedo obtener más información sobre otros paquetes de Python disponibles?
Respuesta : Visite el índice de paquetes de Python.
@app.route('/')
@app.route('/hello')
def hello():
# Render the page
return "Hello Python!"
if __name__ == '__main__':
# Run the app server on localhost:4449
app.run('localhost', 4449)
1. Haga clic con el botón derecho en el Explorador de soluciones y seleccione Agregar > Nuevo
elemento .
2. En el cuadro de diálogo que aparece, seleccione vacío . En Nombre , escriba app.py y seleccione Agregar .
Visual Studio abre automáticamente el archivo en una ventana del editor.
3. Copie el siguiente código y péguelo en app.py:
@app.route('/')
@app.route('/hello')
def hello():
# Render the page
return "Hello Python!"
if __name__ == '__main__':
# Run the app server on localhost:4449
app.run('localhost', 4449)
Puede haber observado que el cuadro de diálogo Agregar > Nuevo elemento muestra muchos otros tipos de
archivos que puede agregar a un proyecto de Python, como una clase de Python, un paquete de Python, una
prueba unitaria de Python, archivos web.config, etc. En general, estas plantillas de elemento son una excelente
manera de crear rápidamente archivos con código reutilizable útil.
Pregunta: ¿Dónde puedo obtener más información sobre Flask?
Respuesta : Consulte la documentación de Flask, empezando por el inicio rápido de Flask.
Ejecutar la aplicación
1. En el Explorador de soluciones , haga clic con el botón derecho en app.py y después seleccione
Establecer como archivo de inicio en el menú desplegable. Este comando identifica el archivo de
código que se va a iniciar en Python cuando se ejecuta la aplicación.
2. Haga clic con el botón derecho en el proyecto en el Explorador de soluciones y seleccione
Propiedades . Seleccione la pestaña Depurar en el menú Propiedades y establezca la propiedad
Número de puer to en 4449 . Esta configuración garantiza que Visual Studio inicia un explorador con
localhost:4449 para que coincida con los argumentos app.run en el código.
3. Seleccione Depurar > Iniciar sin depurar o presione Ctrl +F5 para guardar los cambios en los
archivos y ejecutar la aplicación.
4. Aparece una ventana de comandos con el mensaje Ejecutando en https://localhost:4449 . Se abre
una ventana del explorador en localhost:4449 y se muestra el mensaje Hello, Python! . La solicitud
GET también aparece en la ventana de comandos con un estado de 200 .
Pasos siguientes
Enhorabuena por ejecutar su primera aplicación de Python desde Visual Studio. Ha aprendido los aspectos
básicos sobre el uso de Visual Studio como un IDE de Python.
Implementar la aplicación en Azure App Service
Dado que los pasos realizados en este inicio rápido son bastante genéricos, probablemente se ha dado cuenta
de que se pueden y deben automatizar. Tal automatización es el rol de las plantillas de proyecto de Visual Studio.
Consulte Inicio rápido: Crear un proyecto de Python desde una plantilla para crear una aplicación web similar a
la de este artículo, pero con menos pasos.
Para continuar con un tutorial más completo sobre Python en Visual Studio, incluido el uso de la ventana
interactiva, depuración, visualización de datos y trabajar con Git, vea Tutorial: Introducción a Python en
Visual Studio.
Para explorar más de lo que Visual Studio ofrece, seleccione los siguientes vínculos.
Más información sobre plantillas de proyecto de aplicación web para Python
Más información sobre la depuración de Python
Más información sobre el IDE de Visual Studio en general
Inicio rápido: Crear un proyecto de Python desde
una plantilla en Visual Studio
13/12/2021 • 4 minutes to read
Después de instalar la compatibilidad con Python en Visual Studio, resulta fácil crear un nuevo proyecto de
Python con diversas plantillas. En este inicio rápido, creará una aplicación sencilla de Flask mediante una
plantilla. El proyecto resultante es similar al proyecto que crea manualmente a través de Inicio rápido: usar
Visual Studio para crear su primera aplicación web Python.
1. Inicie Visual Studio.
2. En la barra de menús superior, seleccione Archivo > Nuevo > Proyecto . Luego, en el cuadro de diálogo
Nuevo proyecto , busque "flask en blanco", seleccione la plantilla Proyecto web de Flask en blanco
en la lista del medio, asigne un nombre al proyecto y seleccione Aceptar :
3. Visual Studio le mostrará un cuadro de diálogo que dice Este proyecto necesita paquetes externos .
Este cuadro de diálogo aparece porque la plantilla incluye un archivo requirements.txt que especifica una
dependencia en Flask. Visual Studio puede instalar automáticamente los paquetes y ofrece la opción de
instalarlos en un entorno virtual. Se recomienda el uso de un entorno virtual frente a la instalación en un
entorno global. Por tanto, seleccione Install into a vir tual environment (Instalar en un entorno
virtual) para continuar.
4. Visual Studio muestra el cuadro de diálogo Agregar entorno vir tual . Acepte el valor predeterminado y
seleccione Crear . A continuación, dé su consentimiento a las solicitudes de elevación.
TIP
Cuando comienza un proyecto, es muy recomendable crear un entorno virtual de inmediato, como la mayoría de
las plantillas de Visual Studio le invitan a hacer. Los entornos virtuales mantienen los requisitos exactos del
proyecto a lo largo del tiempo, a medida que agrega y quita las bibliotecas. Luego puede generar fácilmente un
archivo requirements.txt, que se utiliza para volver a instalar esas dependencias en otros equipos de desarrollo
(como cuando se usa un control de código fuente) y al implementar el proyecto en un servidor de producción.
Para más información sobre los entornos virtuales y sus ventajas, consulte Uso de los entornos virtuales y
Administración de los paquetes necesarios con requirements.txt.
5. Después de que Visual Studio cree ese entorno, busque en el Explorador de soluciones para ver que
tiene un archivo app.py junto con requirements.txt. Abra app.py para ver que la plantilla ha
proporcionado código similar en Inicio rápido: crear su primera aplicación web con Flask, con varias
secciones agregadas. Todo el código que se muestra a continuación se crea mediante la plantilla, por lo
que no necesita pegar nada en app.py.
El código comienza con las importaciones necesarias:
Después está la línea siguiente, que puede resultar útil cuando se implementa una aplicación en un host
web:
wsgi_app = app.wsgi_app
A continuación está el decorador de ruta en una función simple que define una vista:
@app.route('/')
def hello():
"""Renders a sample page."""
return "Hello World!"
Por último está el código de inicio siguiente, que le permite establecer el host y el puerto a través de las
variables de entorno, en lugar de codificarlos de forma rígida. Este código permite controlar fácilmente la
configuración en máquinas de desarrollo y producción sin cambiar el código:
if __name__ == '__main__':
import os
HOST = os.environ.get('SERVER_HOST', 'localhost')
try:
PORT = int(os.environ.get('SERVER_PORT', '5555'))
except ValueError:
PORT = 5555
app.run(HOST, PORT)
6. Seleccione Depurar > Iniciar sin depurar para ejecutar el programa y abrir un explorador en
localhost:5555 .
Pasos siguientes
Tutorial: Uso de Python en Visual Studio
Consulte también
Manually identifying an existing Python interpreter (Identificación manual de un intérprete de Python
existente)
Instalación de la compatibilidad con Python en Visual Studio 2015 y versiones anteriores
Ubicaciones de instalación
Inicio rápido: Apertura y ejecución de código de
Python en una carpeta
13/12/2021 • 4 minutes to read
Una vez que haya instalado la compatibilidad con Python en Visual Studio 2019, es fácil ejecutar el código de
Python existente en Visual Studio 2019 sin crear un proyecto de Visual Studio.
NOTE
Visual Studio 2017 y las versiones anteriores requieren la creación de un proyecto de Visual Studio para ejecutar el código
de Python, lo que se puede hacer fácilmente mediante una plantilla de proyecto integrada. Consulte Inicio rápido:
Creación de un proyecto de Python a partir del código existente
1. En este tutorial, puede usar cualquier carpeta con código de Python que quiera. Para seguir con el
ejemplo que se muestra aquí, clone el repositorio gregmalcolm/python_koans de GitHub en su equipo
mediante el comando git clone https://github.com/gregmalcolm/python_koans en una carpeta adecuada.
2. Inicie Visual Studio 2019 y, en la ventana de inicio, seleccione Abrir en la parte inferior de la columna
Get star ted (Empezar). De manera alternativa, si ya ejecuta Visual Studio, seleccione en su lugar el
comando Archivo > Abrir > Carpeta .
3. Vaya a la carpeta que contiene el código de Python y elija Seleccionar carpeta . Si usa el código
python_koans, asegúrese de seleccionar la carpeta python3 dentro de la carpeta de clonación.
4. Visual Studio muestra la carpeta en el Explorador de soluciones en lo que se conoce como Vista de
carpetas . Puede expandir y contraer las carpetas con las flechas que aparecen en los bordes izquierdos
de los nombres de las carpetas:
5. Cuando se abre una carpeta de Python, Visual Studio crea varias carpetas ocultas para administrar la
configuración relacionada con el proyecto. Para ver estas carpetas (y cualquier otra carpeta o archivo
oculto, como la carpeta .git), haga clic en el botón de la barra de herramientas Mostrar todos los
archivos :
6. Para ejecutar el código, en primer lugar debe identificar el archivo del programa principal o de inicio. En
el ejemplo que se muestra aquí, el archivo de inicio es contemplate-koans.py. Haga clic con el botón
derecho en ese archivo y seleccione Establecer como elemento de inicio .
IMPORTANT
Si el elemento de inicio no se encuentra en la raíz de la carpeta que abrió, también debe agregar una línea en el
archivo JSON de configuración de inicio, tal como se describe en la sección Establecimiento de un directorio de
trabajo.
7. Para ejecutar el código, presione Ctrl +F5 o seleccione Depurar > Iniciar sin depurar . También puede
hacer clic en el botón de la barra de herramientas que muestra el elemento de inicio con un botón de
reproducción, el que ejecuta el código en el depurador de Visual Studio. En todos los casos, Visual Studio
detecta que el elemento de inicio es un archivo de Python, por lo que ejecuta automáticamente el código
en el entorno de Python predeterminado. (Dicho entorno se muestra a la derecha del elemento de inicio
en la barra de herramientas).
9. Para ejecutar el código en un entorno distinto, seleccione ese entorno desde el control desplegable en la
barra de herramientas y vuelva a iniciar el elemento de inicio.
10. Para cerrar la carpeta en Visual Studio, seleccione el comando de menú Archivo > Cerrar carpeta .
NOTE
Si Valor predeterminado no aparece como opción, asegúrese de haber elegido un archivo Python .py cuando
seleccionó el comando Configuración de depuración e inicio . Visual Studio usa el tipo de archivo para
determinar las opciones de depurador que se van a mostrar.
3. Visual Studio abre un archivo denominado launch.vs.json, que se encuentra en la carpeta oculta .vs. En
este archivo se describe el contexto de depuración del proyecto. Para especificar un directorio de trabajo,
agregue un valor para "workingDirectory" , como en "workingDirectory": "python3" en el ejemplo de
python-koans:
{
"version": "0.2.1",
"defaults": {},
"configurations": [
{
"type": "python",
"interpreter": "(default)",
"interpreterArguments": "",
"scriptArguments": "",
"env": {},
"nativeDebug": false,
"webBrowserUrl": "",
"project": "python3\\contemplate_koans.py",
"name": "contemplate_koans.py",
"workingDirectory": "python3"
}
]
}
4. Guarde el archivo y vuelva a iniciar el programa, el que ahora se ejecuta en la carpeta especificada.
Pasos siguientes
Tutorial: Uso de Python en Visual Studio
Vea también
Inicio rápido: Creación de un proyecto de Python a partir del código existente
Inicio rápido: Creación de un proyecto de Python a partir de un repositorio
Manually identifying an existing Python interpreter (Identificación manual de un intérprete de Python
existente)
Inicio rápido: Crear un proyecto de Python a partir
del código existente
13/12/2021 • 2 minutes to read
Cuando se ha instalado la compatibilidad con Python en Visual Studio, resulta fácil incorporar el código Python
existente a un proyecto de Visual Studio.
IMPORTANT
El proceso que se describe aquí no mueve ni copia los archivos de código fuente originales. Si quiere trabajar con una
copia, duplique primero la carpeta.
4. En el siguiente cuadro de diálogo, seleccione el archivo de inicio para el proyecto y, después, Siguiente .
Si quiere, seleccione un entorno; en caso contrario, acepte los valores predeterminados. Tenga en cuenta
que el cuadro de diálogo solo muestra los archivos del directorio raíz; si el archivo que quiere está en una
subcarpeta, deje el archivo de inicio en blanco y establézcalo posteriormente en el Explorador de
soluciones (descrito a continuación).
5. Seleccione la ubicación en la que se va a guardar el archivo del proyecto (un archivo .pyproj en disco). Si
procede, también puede incluir la detección automática de entornos virtuales y personalizar el proyecto
para marcos web diferentes. Si no conoce estas opciones, déjelas con los valores predeterminados.
6. Haga clic en Finalizar . Visual Studio creará el proyecto y lo abrirá en el Explorador de soluciones . Si
quiere mover el archivo .pyproj a otra parte, selecciónelo en el Explorador de soluciones y elija
Archivo > Guardar como . Esta acción actualiza las referencias de archivo en el proyecto pero no mueve
ningún archivo de código.
7. Para establecer otro archivo de inicio, localice el archivo en el Explorador de soluciones , haga clic con
el botón derecho y seleccione Establecer como archivo de inicio .
Si quiere, ejecute el programa presionando Ctrl +F5 or seleccionando Depurar > Iniciar sin depurar .
Pasos siguientes
Tutorial: Uso de Python en Visual Studio
Consulte también
Manually identifying an existing Python interpreter (Identificación manual de un intérprete de Python
existente)
Instalación de la compatibilidad con Python en Visual Studio 2015 y versiones anteriores
Ubicaciones de instalación
Inició rápido: Clonado de un repositorio de código
Python en Visual Studio
13/12/2021 • 4 minutes to read
Cuando haya instalado la compatibilidad con Python en Visual Studio, puede agregar la extensión de GitHub
para Visual Studio. La extensión le permite clonar fácilmente un repositorio de código de Python y crear un
proyecto a partir de allí desde el IDE. Siempre puede clonar repositorios en la línea de comandos y después
trabajar con ellos en Visual Studio.
TIP
La carpeta que especifique en Team Explorer es la carpeta exacta para recibir los archivos clonados. A diferencia
del comando git clone , al crear un clon en Team Explorer no se crea automáticamente una subcarpeta con el
nombre del repositorio.
4. Cuando se complete la clonación, aparecerá el nombre del repositorio en la lista Repositorios GIT
locales . Haga doble clic en ese nombre para ir al panel de repositorio en Team Explorer .
5. En Soluciones , seleccione Nuevo .
6. En el cuadro de diálogo Nuevo proyecto que se muestra, vaya al lenguaje Python (o busque "Python"),
seleccione Desde código de Python existente , especifique un nombre para el proyecto, establezca
Ubicación en la misma carpeta que el repositorio y haga clic en Aceptar . En el asistente que aparece,
seleccione Finalizar .
7. Seleccione Vista > Explorador de soluciones en el menú.
8. En el Explorador de soluciones , expanda el nodo python3 , haga clic con el botón derecho en
contemplate_koans.py y seleccione Establecer como archivo de inicio . Este paso indica a Visual
Studio qué archivo debe utilizar al ejecutar el proyecto.
9. Seleccione Proyecto > Koans Proper ties en el menú, seleccione la pestaña General y establezca
Directorio de trabajo en "python3". Este paso es necesario porque, de forma predeterminada, Visual
Studio establece el directorio de trabajo en la raíz del proyecto en lugar de hacerlo en la ubicación del
archivo de inicio (python3\contemplate_koans.py, que también puede ver en las propiedades del
proyecto). El código de programa busca un archivo koans.txt en la carpeta de trabajo por lo que, si no
cambia este valor, verá un error en tiempo de ejecución.
10. Presione Ctrl +F5 o seleccione Depurar > Iniciar sin depurar para ejecutar el programa. Si ve un
FileNotFoundError para koans.txt, compruebe el directorio de trabajo como se describe en el paso
anterior.
11. Cuando el programa se ejecuta correctamente, muestra un error de aserción en la línea 17 de
python3/koans/about_asserts.py. Este comportamiento es deliberado: el programa está diseñado para
que, con sus correcciones de todos los errores intencionados, se pueda enseñar a Python. (Encontrará
más información en Ruby Koans, en el que se inspira Python Koans).
13. Para corregir el error, cambie el False argumento de la línea 17 por True . La línea debe indicar lo
siguiente:
IMPORTANT
En este inicio rápido, ha creado un clon directo del repositorio python_koans en GitHub. El autor de este repositorio lo
protege de cambios directos, por lo que se produce un error al intentar aplicar cambios. En la práctica, los desarrolladores
bifurcan este repositorio en su propia cuenta de GitHub, efectúan cambios y crean solicitudes de incorporación de
cambios para enviarlos al repositorio original. Cuando tenga su propia rama, use su dirección URL en lugar de la dirección
URL de repositorio original utilizada anteriormente.
Pasos siguientes
Tutorial: Uso de Python en Visual Studio
Consulte también
Manually identifying an existing Python interpreter (Identificación manual de un intérprete de Python
existente)
Instalación de la compatibilidad con Python en Visual Studio en Windows
Ubicaciones de instalación
Inicio rápido: Creación de un proyecto a partir de
una plantilla de Cookiecutter
13/12/2021 • 2 minutes to read
Cuando se ha instalado la compatibilidad con Python en Visual Studio, resulta fácil crear un proyecto a partir de
una plantilla de Cookiecutter, incluidas muchas de las que se publican en GitHub. Cookiecutter proporciona una
interfaz gráfica de usuario para descubrir plantillas, opciones de plantilla de entrada y crear proyectos y
archivos. Se incluye con Visual Studio 2017 y versiones posteriores y puede instalarse por separado en
versiones anteriores de Visual Studio.
1. Para este tutorial rápido, primero debe instalar la distribución de Python Anaconda3, que incluye los
paquetes necesarios de Python para la plantilla de Cookiecutter que se muestra aquí. Ejecute el instalador
de Visual Studio, haga clic en Modificar , expanda las opciones de Desarrollo de Python en el lado
derecho y seleccione Anaconda3 (32 bits o 64 bits). Tenga en cuenta que la instalación puede tardar un
tiempo, según la velocidad de Internet, pero es la manera más sencilla de instalar los paquetes
necesarios.
2. Inicie Visual Studio.
3. Seleccione Archivo > Nuevo > Desde Cookiecutter . Este comando abre una ventana en Visual Studio
en la que puede buscar plantillas.
6. Una vez completado el proceso, verá el mensaje Archivos creados correctamente con la plantilla... .
El proyecto se abre automáticamente en el Explorador de soluciones.
7. Presione Ctrl +F5 o seleccione Depurar > Iniciar sin depurar para ejecutar el programa.
Pasos siguientes
Tutorial: Uso de Python en Visual Studio
Vea también
Uso de la extensión Cookiecutter
Manually identifying an existing Python interpreter (Identificación manual de un intérprete de Python
existente)
Instalación de la compatibilidad con Python en Visual Studio 2015 y versiones anteriores
Ubicaciones de instalación
Instalación de la compatibilidad con Python en
Visual Studio
13/12/2021 • 2 minutes to read
NOTE
La compatibilidad con Python solo se encuentra disponible actualmente en Visual Studio para Windows. En Mac y Linux, la
compatibilidad con Python está disponible mediante Visual Studio Code.
1. Descargue y ejecute la versión más reciente del Instalador de Visual Studio para Windows. La
compatibilidad con Python está presente en la versión 15.2 y posteriores. Si ya tiene Visual Studio
instalado, ábralo y ejecute el instalador; para ello, seleccione Herramientas > Agregar herramientas
y características .
Instalación de Visual Studio Community
TIP
La edición Community es para desarrolladores individuales, aprendizaje en el aula, investigación académica y
desarrollo de código abierto. Para otros usos, instale Visual Studio Professional o Visual Studio Enterprise.
2. El instalador muestra una lista de las cargas de trabajo, que son grupos de opciones relacionadas para
áreas de desarrollo específicas. Para Python, elija la carga de trabajo Desarrollo de Python y seleccione
Instalar :
3. Para probar rápidamente la compatibilidad con Python, inicie Visual Studio, presione Alt +I para abrir la
ventana interactiva de Python y escriba 2+2 . Si no ve la salida de 4 , revise los pasos.
Paso siguiente
Paso 1: Creación de un proyecto de Python
Consulte también
Manually identifying an existing Python interpreter (Identificación manual de un intérprete de Python
existente)
Instalación de la compatibilidad con Python en Visual Studio 2015 y versiones anteriores
Ubicaciones de instalación
Tutorial: Trabajar con Python en Visual Studio
13/12/2021 • 6 minutes to read
Python es un lenguaje de programación popular confiable, flexible, fácil de aprender y de uso libre en todos los
sistemas operativos. Python es admitido por una gran comunidad de desarrolladores y muchas bibliotecas
gratuitas. El lenguaje admite todo tipo de desarrollo, incluidas las aplicaciones web, los servicios web, las
aplicaciones de escritorio, el scripting y la ciencia computacional. Muchas universidades, científicos,
programadores ocasionales y desarrolladores profesionales usan Python.
Visual Studio proporciona compatibilidad de primera clase con el lenguaje Python. Este tutorial le guiará a
través de los pasos siguientes:
Paso 0: Instalación
Paso 1: Crear un proyecto de Python (este artículo)
Paso 2: Escribir y ejecutar código para ver IntelliSense de Visual Studio en funcionamiento
Paso 3: Crear más código en la ventana interactiva de REPL
Paso 4: Ejecutar el programa completado en el depurador de Visual Studio
Paso 5: Instalar paquetes y administrar entornos de Python
Paso 6: Trabajar con Git
Requisitos previos
Visual Studio 2017 con la carga de trabajo de Python instalada. Para obtener instrucciones, consulte Trabajar
con Python en Visual Studio, paso 0.
Visual Studio 2019 con la carga de trabajo de Python instalada. Para obtener instrucciones, consulte Trabajar
con Python en Visual Studio, paso 0.
Visual Studio 2022 con la carga de trabajo de Python instalada. Para obtener instrucciones, consulte Trabajar
con Python en Visual Studio, paso 0.
También puede usar una versión anterior de Visual Studio con las Herramientas de Python para Visual Studio
instaladas. Consulte Instalación de la compatibilidad con Python en Visual Studio.
La compatibilidad de Python con Visual Studio incluye varias plantillas de proyecto, incluidas aplicaciones
web que usan los marcos Bottle, Flask y Django. Para los fines de este tutorial, en cambio, comenzaremos
con un proyecto vacío.
3. Elija la plantilla Aplicación de Python , especifique un nombre para el proyecto y seleccione Aceptar .
4. Después de unos minutos, Visual Studio muestra la estructura del proyecto en la ventana del Explorador
de soluciones (1). El archivo de código predeterminado se abre en el editor (2). También aparece la
ventana de propiedades (3), en la que se muestra información adicional sobre los elementos
seleccionados en el Explorador de soluciones , incluida su ubicación exacta en el disco.
5. Tómese su tiempo para familiarizarse con el Explorador de soluciones , que es donde examinará los
archivos y las carpetas del proyecto.
(1) El proyecto está resaltado en negrita. Tiene el nombre que le ha asignado en el cuadro de diálogo
Nuevo proyecto . En el disco, este proyecto se representa mediante un archivo .pyproj en la carpeta del
proyecto.
(2) En el nivel superior se encuentra una solución, que de forma predeterminada tiene el mismo nombre
que el proyecto. Una solución, representada por un archivo .sln en el disco, es un contenedor para uno o
más proyectos relacionados. Por ejemplo, si escribe una extensión de C++ para la aplicación de Python,
ese proyecto de C++ puede estar en la misma solución. La solución también podría contener un proyecto
para un servicio web, junto con proyectos para programas de prueba dedicados.
(3) Bajo el proyecto verá los archivos de código fuente, en este caso, un solo archivo .py. Al seleccionar un
archivo, se muestran sus propiedades en la ventana Propiedades . Si hace doble clic en un archivo, se
abrirá de la manera más adecuada.
(4) Bajo el proyecto también se encuentra el nodo Entornos de Python . Si lo expande, verá los
intérpretes de Python disponibles. Expanda un nodo de intérprete para ver las bibliotecas que se instalan
en ese entorno (5).
Haga clic con el botón derecho en cualquier nodo o elemento del Explorador de soluciones para tener
acceso a un menú con los comandos aplicables. Por ejemplo, el comando Cambiar nombre permite
cambiar el nombre de un nodo o elemento, incluido el proyecto y la solución.
1. En Visual Studio, seleccione Archivo > Nuevo > Proyecto o presione Ctrl +Mayús +N . Aparece la
pantalla Crear un proyecto , donde puede buscar y examinar plantillas en distintos lenguajes.
2. Para ver las plantillas de Python, busque python. Si no recuerda la ubicación de una plantilla en el árbol
de lenguajes, la búsqueda es la mejor solución.
La compatibilidad de Python con Visual Studio incluye varias plantillas de proyecto, incluidas aplicaciones
web en los marcos Bottle, Flask y Django. Para este tutorial, comience con un proyecto vacío.
3. Seleccione la plantilla PythonConsoleApp y seleccione Siguiente .
4. En la pantalla Configurar el nuevo proyecto , especifique un nombre y una ubicación de archivo para
el proyecto y, después, seleccione Crear .
El nuevo proyecto se abre en Visual Studio.
En la ventana Explorador de soluciones de Visual Studio se muestra la estructura del proyecto (1) .
El archivo de código predeterminado se abre en el editor (2) .
En la ventana Propiedades se muestra más información sobre el elemento seleccionado en el
Explorador de soluciones , incluida su ubicación exacta en el disco (3) .
5. Familiarícese con el Explorador de soluciones , que es donde puede examinar los archivos y las
carpetas del proyecto.
Paso siguiente
Escritura y ejecución de código
3. IntelliSense muestra información diferente en función de la instrucción utilizada, la función invocada, etc.
Con la función print , al escribir ( tras print para indicar una llamada a la función, se muestra
información completa de uso para esa función. La ventana emergente de IntelliSense muestra también el
argumento actual en negrita (value tal y como se muestra aquí):
5. Tenga en cuenta el color de la sintaxis que diferencia la instrucción print del argumento
"Hello Visual Studio" . Además, elimine temporalmente el último " de la cadena y observe cómo
Visual Studio muestra un subrayado rojo en el código que contiene errores de sintaxis. Luego, vuelva a
colocar " para corregir el código.
TIP
Puesto que el entorno de desarrollo de cada uno es muy personal, Visual Studio ofrece un control completo de su
apariencia y comportamiento. Seleccione el comando de menú Herramientas > Opciones y explore los valores
de las pestañas Entorno y Editor de texto . De forma predeterminada, solo se ve un número limitado de
opciones. Para ver todas las opciones de todos los lenguajes de programación, seleccione Mostrar todas las
configuraciones en la parte inferior del cuadro de diálogo.
6. Ejecute el código que ha escrito hasta este punto pulsando Ctrl +F5 o seleccionando el elemento de
menú Depurar > Iniciar sin depurar . Visual Studio le advierte si todavía hay errores en el código.
7. Al ejecutar el programa, aparece una ventana de consola que muestra los resultados, como si ejecutara
un intérprete de Python con PythonApplication1.py desde la línea de comandos. Presione una tecla para
cerrar la ventana y volver al editor de Visual Studio.
8. Además de finalizaciones para instrucciones y funciones, IntelliSense ofrece finalizaciones para las
instrucciones import y from de Python. Estas finalizaciones le ayudan a detectar fácilmente qué
módulos están disponibles en su entorno y los miembros de esos módulos. En el editor, elimine la línea
print y comience a escribir import . Cuando se escribe el espacio, aparece una lista de módulos:
12. Para terminar, importe los miembros sin , cos y radians , con las finalizaciones automáticas
disponibles para cada uno de ellos. Cuando haya terminado, el código debería aparecer como sigue:
import sys
from math import cos, radians
TIP
Las finalizaciones se activan con las subcadenas a medida que escribe, mostrando coincidencias con partes de
palabras, letras al principio de las palabras e incluso caracteres omitidos. Vea Edición de código: finalizaciones para
obtener información.
13. Agregue un poco más de código para imprimir los valores de coseno de 360 grados:
for i in range(360):
print(cos(radians(i)))
14. Vuelva a ejecutar el programa con Ctrl +F5 o Depurar > Iniciar sin depurar . Cuando haya terminado,
cierre la ventana de salida.
Paso siguiente
Usar la ventana interactiva de REPL
NOTE
Si tiene problemas con REPL, asegúrese de tener instalados los paquetes ipython y ipykernel . Si necesita instalar
paquetes, consulte la pestaña de los paquetes de los entornos de Python.
1. Abra la ventana interactiva haciendo clic con el botón derecho en el entorno de Python del proyecto en
el Explorador de soluciones (por ejemplo, Python 3.6 (32 bits) como se muestra en un gráfico
anterior) y seleccione Abrir ventana interactiva . Como alternativa, puede seleccionar Ver > Otras
ventanas > Ventanas interactivas de Python en el menú principal de Visual Studio.
2. Se abre la ventana interactiva debajo del editor, con el símbolo estándar del sistema de REPL de Python
>>> . La lista desplegable Plataforma permite seleccionar un intérprete específico con el que trabajar. En
muchas ocasiones también querrá aumentar el tamaño de la ventana interactiva , lo que puede hacer si
arrastra el separador entre las dos ventanas:
TIP
Puede cambiar el tamaño de todas las ventanas en Visual Studio si arrastra los separadores de los bordes. También
puede arrastrar las ventanas independientemente del marco de Visual Studio y reorganizarlas como prefiera
dentro del marco. Para más información, vea Personalizar los diseños de ventana.
3. Escriba algunas instrucciones (como print("Hello, Visual Studio") ) y expresiones (como 123/456 ) para
ver los resultados inmediatos:
4. Al empezar a escribir una instrucción multilínea, como una definición de función, en la ventana
interactiva se muestra el símbolo ... de Python para las líneas siguientes que, a diferencia de la línea de
comandos de REPL, proporciona una sangría automática. Para agregar una línea nueva ... , presione
Shift+Enter :
5. La ventana interactiva proporciona un historial completo de todo lo que ha escrito y ofrece mejoras con
respecto a la línea de comandos de REPL con elementos de historial multilínea. Por ejemplo, puede
recuperar fácilmente la definición completa de la función f como una única unidad y cambiar el nombre
con facilidad a make_double , en lugar de tener que volver a crear la función línea por línea.
6. En Visual Studio se pueden enviar varias líneas de código desde una ventana del editor a la ventana
interactiva . Esta característica permite mantener el código en un archivo de origen y enviar con facilidad
elementos seleccionados a la ventana interactiva . Después, puede trabajar con estos fragmentos de
código en el entorno de REPL rápido en lugar de tener que ejecutar el programa completo. Para ver esta
característica, reemplace el bucle for del archivo PythonApplication1.py por lo siguiente:
TIP
Al presionar Ctrl+Entrar en el editor sin una selección se ejecuta la línea de código actual en la ventana
interactiva y se coloca automáticamente el símbolo de intercalación en la línea siguiente. Con esta característica,
puede presionar varias veces Ctrl+Entrar para recorrer el código, algo que no era posible hacer solo con la línea
de comandos de Python. También permite recorrer el código sin ejecutar el depurador y sin necesidad de iniciar el
programa desde el principio.
8. También puede copiar y pegar varias líneas de código en la ventana interactiva desde cualquier origen,
como el fragmento de código siguiente, lo que es difícil de hacer con el REPL de la línea de comandos de
Python. Cuando se pega, la ventana interactiva ejecuta el código como si se hubiera escrito:
for i in range(360):
s = make_dot_string(i)
print(s)
9. Como puede ver, este código funciona correctamente, pero su salida no es muy interesante. Un valor de
paso diferente en el bucle for mostraría más cantidad de la onda del coseno. Afortunadamente, como
todo el bucle for aparece en el historial de REPL como una única unidad, se puede volver atrás con
facilidad para realizar los cambios que quiera y probar la función de nuevo. Presione la tecla Flecha arriba
para recuperar primero el bucle for . Después, presione las teclas Flecha izquierda o Flecha derecha para
empezar a navegar en el código (hasta que lo haga, las teclas Flecha arriba y Flecha abajo continúan
recorriendo el historial). Vaya a la especificación range y cámbiela por range(0, 360, 12) . Después,
presione Ctrl +Entrar (en cualquier lugar del código) para volver a ejecutar la instrucción completa:
10. Repita el proceso para experimentar con valores de paso diferentes hasta que encuentre el que más le
guste. También puede hacer que se repita la onda si amplía el intervalo, por ejemplo, range(0, 1800, 12) .
11. Cuando esté satisfecho con el código que escribió en la ventana Interactiva , selecciónelo. A
continuación, haga clic con el botón derecho en el código y elija Copiar código (Ctrl +Mayús +C ). Por
último, pegue el código seleccionado en el editor. Observe que esta característica especial de Visual
Studio omite automáticamente cualquier salida y los símbolos >>> y ... . Por ejemplo, en la imagen
siguiente se muestra el uso del comando Copiar código en una selección que incluye los símbolos y la
salida:
Si quiere copiar el contenido exacto de la ventana interactiva , incluidos los símbolos y la salida, use el
comando Copiar estándar.
12. Lo que acaba de hacer es usar el entorno de REPL rápido de la ventana interactiva para elaborar los
detalles de un pequeño fragmento de código y después lo ha agregado cómodamente al archivo de
código fuente del proyecto. Si ahora vuelve a ejecutar el código con Ctrl +F5 (o Depurar > Iniciar sin
depurar ), verá los resultados exactos que quería.
Paso siguiente
Ejecución de código en el depurador
def main():
for i in range(0, 1800, 12):
s = make_dot_string(i)
print(s)
main()
Para obtener información adicional sobre la depuración, incluidas tareas como establecer argumentos de script e
intérprete, vea Depuración del código de Python.
3. Establezca un punto de interrupción en la instrucción for haciendo clic una vez en el margen gris junto
a esa línea o colocando el operador exponencial en dicha línea y usando el comando Depurar >
Alternar puntos de interrupción (F9 ). Aparecerá un punto rojo en el margen gris para indicar el
punto de interrupción (como indica la flecha a continuación):
4. Vuelva a iniciar el depurador (F5 ) y verá que, al ejecutar el código, se detiene en la línea en que se ha
establecido el punto de interrupción. Aquí puede inspeccionar la pila de llamadas y examinar variables.
Las variables que están en dentro del ámbito aparecen en la ventana Automático cuando están
definidas; también puede cambiar a la vista Variables locales , situada en la parte inferior de esa
ventana, para mostrar todas las variables que Visual Studio encuentre en el ámbito actual (influidas
funciones), incluso antes de que se definan:
5. Observe la barra de herramientas de depuración (que se muestra a continuación) a lo largo de la parte
superior de la ventana de Visual Studio. Esta barra de herramientas proporciona acceso rápido a los
comandos de depuración más comunes (que también se pueden encontrar en el menú Depurar ):
15. Para ejecutar el programa hasta su finalización, deshabilite el punto de interrupción haciendo clic con el
botón derecho en el punto del margen y seleccionando Deshabilitar punto de interrupción
(Ctrl +F9 ). Luego, seleccione Continuar (o presione F5 ) para ejecutar el programa. Cuando se finalice el
programa, Visual Studio detiene la sesión de depuración y vuelve a su modo de edición. Tenga en cuenta
que también puede eliminar el punto de interrupción si selecciona su punto o hace clic con el botón
derecho en el punto y selecciona Eliminar punto de interrupción , pero eso también elimina cualquier
condición que haya establecido.
TIP
En algunas situaciones, como un error al iniciar el intérprete de Python, la ventana de salida puede aparecer solo
brevemente y luego cerrarse de forma automática sin darle la oportunidad de ver los mensajes de error. Si esto ocurre,
haga clic con el botón derecho en el proyecto en el Explorador de soluciones , seleccione Propiedades , la pestaña
Depurar y, después, agregue -i al campo Argumentos del intérprete . Este argumento hace que el intérprete entre
en modo interactivo una vez que se haya finalizado un programa, con lo que la ventana se mantendrá abierta hasta que
pulse Ctrl+Z > Entrar para salir.
Paso siguiente
Instalar paquetes en un entorno de Python
Ver entornos
1. Seleccione el comando de menú Vista > Otras ventanas > Entornos de Python . La ventana
Entornos de Python se abre como un elemento del mismo nivel para el Explorador de soluciones y
muestra los distintos entornos disponibles. La lista muestra los entornos que ha instalado mediante el
instalador de Visual Studio y los que ha instalado por separado. Esto incluye entornos globales, virtuales
y de Conda. El entorno en negrita es el entorno predeterminado que se usa para los nuevos proyectos.
Para obtener información adicional sobre cómo trabajar con entornos, vea Creación y administración de
entornos de Python en Visual Studio.
NOTE
Otra manera de abrir la ventana Entornos de Python es seleccionar la ventana Explorador de soluciones y usar el
método abreviado de teclado Ctrl + K, Ctrl + ' . Si el acceso directo no funciona y no encuentra la ventana
Entornos de Python en el menú, es posible que no haya instalado la carga de trabajo de Python. Vea Instalación
de la compatibilidad con Python en Visual Studio para obtener instrucciones sobre cómo instalar Python.
2. La pestaña Introducción del entorno proporciona acceso rápido a una ventana interactiva para ese
entorno junto con la carpeta de instalación y los intérpretes del entorno. Por ejemplo, al seleccionar Abrir
ventana interactiva se muestra una ventana interactiva para ese entorno específico en Visual Studio.
3. Ahora, cree un proyecto con Archivo > Nuevo > Proyecto y seleccione la plantilla Aplicación Python .
En el archivo de código que aparece, pegue el código siguiente, que crea una onda de coseno como en
los pasos del tutorial anteriores, pero esta vez trazada en un gráfico. Como alternativa, puede usar el
proyecto que creó anteriormente y reemplazar el código.
def main():
x = np.arange(0, radians(1800), radians(12))
plt.plot(x, np.cos(x), 'b')
plt.show()
main()
4. Con un proyecto de Python abierto, también puede abrir la ventana Entornos de Python desde
Explorador de soluciones. Basta con hacer clic con el botón derecho en Entornos de Python y
seleccionar Ver todos los entornos de Python .
5. Al examinar la ventana del editor, observará que, si mantiene el puntero sobre las instrucciones Import
numpy e matplotlib , no están resueltas. Esto se debe a que los paquetes no se han instalado en el
entorno global predeterminado.
Instalación de paquetes con la ventana Entornos de Python
1. En la ventana Entornos de Python, seleccione el entorno predeterminado para los nuevos proyectos de
Python y elija la pestaña Paquetes . Verá una lista de los paquetes que están instalados actualmente en el
entorno.
2. Para instalar matplotlib , escriba su nombre en el campo de búsqueda y, después, seleccione la opción
Ejecutar comando: pip install matplotlib . Esto instalará matplotlib , así como los paquetes de los
que depende (en este caso, numpy ).
3. Si se le pide, dé su consentimiento para la elevación.
4. Una vez instalado el paquete, aparece en la ventana Entornos de Python . La X situada a la derecha del
paquete lo desinstala.
NOTE
Una barra de progreso pequeña podría aparecer debajo del entorno para indicar que Visual Studio está
compilando la base de datos de IntelliSense para el paquete recién instalado. La pestaña IntelliSense también
muestra información más detallada. Tenga en cuenta que hasta que se complete la base de datos, las
características de IntelliSense, como la finalización automática y la comprobación de sintaxis, no estarán activas en
el editor de ese paquete.
Visual Studio 2017, versión 15.6 y versiones posteriores, utiliza otro método más rápido para trabajar con
IntelliSense y muestra un mensaje a tal efecto en la pestaña IntelliSense .
Ejecutar el programa
1. Ahora que matplotlib está instalado, ejecute el programa con (F5 ) o sin el depurador (Ctrl +F5 ) para ver
el resultado:
Paso siguiente
Trabajar con Git
TIP
Git es el sistema de control de versiones moderno más usado, por lo que, tanto si es un desarrollador profesional como si
está aprendiendo a codificar, Git puede ser muy útil. Si ha empezado a usar Git recientemente, el sitio web https://git-
scm.com/ es un buen punto de partida. Allí encontrará hojas de referencia rápida, un libro en línea conocido y vídeos de
conceptos básicos de Git.
Para asociar el código a Git, empiece por crear un nuevo repositorio de Git donde se encuentra el código. A
continuación se muestra cómo hacerlo:
1. En la barra de estado de la esquina inferior derecha de Visual Studio, seleccione Agregar al control de
código fuente y, a continuación, Git .
TIP
Tanto si el repositorio es público como privado, es mejor tener una copia de seguridad remota del código
almacenada de forma segura en GitHub. Incluso si no trabaja con un equipo, un repositorio remoto pone el
código a su disposición desde cualquier equipo.
El primer icono con las flechas muestra cuántas confirmaciones salientes o entrantes hay en la rama
actual. Puede usar este icono para extraer las confirmaciones entrantes o insertar las confirmaciones
salientes. Puede elegir ver estas confirmaciones en primer lugar. Para ello, seleccione el icono y, a
continuación, Ver salientes y entrantes .
El segundo icono con el lápiz muestra el número de cambios no confirmados en el código. Puede
seleccionar este icono para ver esos cambios en la ventana Cambios de Git .
Para obtener más información sobre cómo usar Git con la aplicación, consulte la documentación del control de
versiones de Visual Studio.
Visual Studio proporciona integración directa con repositorios de Git locales y repositorios remotos en servicios
como GitHub y Azure Repos. La integración incluye clonar un repositorio, confirmar los cambios y administrar
ramas.
En este artículo se proporciona una introducción básica sobre la creación de un repositorio de Git local para un
proyecto existente e información para familiarizarse con algunas características relacionadas con Git de Visual
Studio.
1. Con un proyecto abierto en Visual Studio, como el proyecto del paso anterior, haga clic con el botón
derecho en la solución y seleccione Agregar solución al control de código fuente . Visual Studio crea
un repositorio de Git local que contiene el código del proyecto.
2. Cuando Visual Studio detecta que el proyecto se administra en un repositorio de Git, aparecen controles
relacionados con Git en la esquina inferior derecha de la ventana de Visual Studio. Los controles
muestran confirmaciones pendientes, cambios, el nombre del repositorio y la rama. Mantenga el puntero
sobre los controles para ver más información.
3. Al crear un nuevo repositorio o seleccionar cualquiera de los controles de Git, Visual Studio abre la
ventana Team Explorer . (Puede abrir la ventana en cualquier momento con el comando de menú Vista
> Team Explorer ). La ventana tiene tres paneles principales, entre los que puede cambiar mediante la
lista desplegable del encabezado de Team Explorer . El panel Sincronización panel, que proporciona
operaciones de publicación, también aparece cuando se selecciona el control de inserción (el icono de
flecha arriba):
4. Seleccione Cambios (o el control de Git con el icono de lápiz) para revisar cambios sin confirmar y
confirmarlos cuando quiera.
Haga doble clic en un archivo en la lista Cambios para abrir una vista de diferencias para dicho archivo:
5. Seleccione Ramas (o el control de Git con un nombre de rama) para examinar ramas y realizar
operaciones de combinar y fusionar mediante cambio de base:
6. Al seleccionar el control de Git con el nombre del repositorio (CosineWave en una imagen anterior),
Team Explorer muestra una interfaz Conectar con la que puede cambiar rápidamente a otro
repositorio por completo.
7. Cuando se usa un repositorio local, los cambios confirmados van directamente al repositorio. Si está
conectado a un repositorio remoto, seleccione el encabezado desplegable en Team Explorer , elija
Sincronización para cambiar a la sección Sincronización y trabaje con los comandos pull y fetch
incluidos allí.
Django es un marco de Python de alto nivel diseñado para el desarrollo web rápido, seguro y escalable. En este
tutorial se explora la plataforma de Django en el contexto de las plantillas de proyecto que proporciona Visual
Studio para simplificar la creación de aplicaciones web basadas en Django.
En este tutorial aprenderá a:
Crear un proyecto básico de Django en un repositorio de Git con la plantilla "Proyecto web de Django en
blanco" (paso 1)
Crear una aplicación de Django con una página y representar esa página con una plantilla (paso 2)
Atender archivos estáticos, agregar páginas y usar la herencia de plantilla (paso 3)
Utilizar la plantilla Proyecto web de Django para crear una aplicación con varias páginas y diseño con
capacidad de respuesta (paso 4)
Autenticar usuarios (paso 5)
Usar la plantilla Proyecto web de Django de sondeos para crear una aplicación que use modelos,
migraciones de base de datos y personalizaciones para la interfaz administrativa (paso 6)
Crear un proyecto básico de Django en un repositorio de Git con la plantilla "Proyecto web de Django en
blanco" (paso 1)
Crear una aplicación de Django con una página y representar esa página con una plantilla (paso 2)
Atender archivos estáticos, agregar páginas y usar la herencia de plantilla (paso 3)
Utilizar la plantilla Proyecto web de Django para crear una aplicación con varias páginas y diseño con
capacidad de respuesta (paso 4)
Autenticar usuarios (paso 5)
Prerequisites
Visual Studio 2017 o posterior en Windows con las siguientes opciones:
La carga de trabajo Desarrollo de Python (pestaña Carga de trabajo del instalador). Para obtener
instrucciones, vea Instalación de la compatibilidad con Python en Visual Studio en Windows.
Git para Windows y Extensión de GitHub para Visual Studio en la pestaña Componentes
individuales de Herramientas de código .
Las plantillas de proyecto de Django también se incluyen con todas las versiones anteriores de las Herramientas
de Python para Visual Studio, aunque los detalles pueden diferir de aquello que se describe en este tutorial
(especialmente respecto de las versiones anteriores de la plataforma Django).
El desarrollo de Python no es compatible actualmente en Visual Studio para Mac. En Mac y Linux, use la
extensión de Python en Visual Studio Code.
"Proyectos de Visual Studio" y "proyectos de Django"
En la terminología de Django, un "proyecto de Django" se compone de varios archivos de configuración de nivel
de sitio junto con una o varias "aplicaciones" que el usuario implementa en un host web para crear una
aplicación web completa. Un proyecto de Django puede contener varias aplicaciones, y la misma aplicación
puede estar en varios proyectos de Django.
Un proyecto de Visual Studio, por su parte, puede contener el proyecto de Django junto con varias aplicaciones.
Para facilitar la lectura, siempre que en este tutorial se mencione simplemente a"proyecto", nos estaremos
refiriendo al proyecto de Visual Studio. Cuando se haga referencia a la parte del "proyecto de Django" de la
aplicación web, usaremos específicamente "proyecto de Django".
En el transcurso de este tutorial creará una única solución de Visual Studio que contiene tres proyectos de
Django independientes, cada uno de los cuales contiene una única aplicación de Django. Al mantener los
proyectos en la misma solución, puede cambiar fácilmente entre distintos archivos para compararlos.
2. En los campos de la parte inferior del cuadro de diálogo, escriba la información siguiente (como se
muestra en el gráfico anterior) y, a continuación, seleccione Aceptar :
Nombre : establezca el nombre del proyecto de Visual Studio en BasicProject . Este nombre también
se usa para el proyecto Django.
Ubicación : especifique una ubicación en la que se va a crear la solución y el proyecto de Visual
Studio.
Solución : deje este control establecido en la opción predeterminada Crear nueva solución .
Nombre de la solución : establézcalo en LearningDjango , que es adecuado para la solución como
contenedor de varios proyectos de este tutorial.
Crear directorio para la solución : deje el valor predeterminado.
Crear nuevo repositorio Git : active esta opción (que está desactivada de forma predeterminada)
para que Visual Studio cree un repositorio Git local al generar la solución. Si no ve esta opción, ejecute
el instalador de Visual Studio y agregue Git para Windows y Extensión de GitHub para Visual
Studio en la pestaña Componentes individuales en Herramientas de código .
3. Tras un momento, Visual Studio muestra un cuadro de diálogo que indica Este proyecto necesita
paquetes externos (se muestra abajo). Este cuadro de diálogo aparece porque la plantilla incluye un
archivo requirements.txt que hace referencia al paquete Django 1.x más reciente. (Active Mostrar
paquetes necesarios para ver las dependencias exactas).
4. Seleccione la opción Los instalaré de forma manual . Cree el entorno virtual en breve para asegurarse
de que se excluye del control de código fuente. (El entorno siempre puede crearse a partir de
requirements.txt).
NOTE
Si no selecciona Crear nuevo repositorio Git en el cuadro de diálogo Nuevo proyecto , los controles de Git
solo muestran un comando Agregar al control de código fuente que crea un repositorio local.
2. Seleccione el botón de cambios y Visual Studio abre su ventana de Team Explorer en la página
Cambios . Dado que el proyecto recién creado ya se ha confirmado automáticamente en el control de
código fuente, no verá cambios pendientes.
3. En la barra de estado de Visual Studio, haga clic en el botón de confirmaciones sin insertar (la flecha
arriba con 2 ) para abrir la página Sincronización en Team Explorer . Como tiene solo un repositorio
local, la página ofrece opciones sencillas para publicar el repositorio en repositorios remotos diferentes.
Puede elegir cualquier servicio que desee para sus propios proyectos. En este tutorial se muestra el uso
de GitHub, donde se mantiene el código de ejemplo completo del tutorial en el repositorio
Microsoft/python-sample-vs-learning-django.
4. Al seleccionar cualquiera de los controles de Publicar , Team Explorer le pedirá más información. Por
ejemplo, al publicar el ejemplo para este tutorial, el propio repositorio tenía que haberse creado primero.
En este caso, la opción Inser tar en repositorio remoto se utilizó con la dirección URL del repositorio.
Si no tiene ningún repositorio, las opciones Publish to GitHub (Publicar en GitHub) e Inser tar en
Azure DevOps le permiten crear uno directamente desde Visual Studio.
5. Mientras esté trabajando en este tutorial, adopte la costumbre de usar los controles de Visual Studio
periódicamente para confirmar e insertar los cambios. Este tutorial se lo recuerda en los momentos
adecuados.
TIP
Para desplazarse rápidamente por Team Explorer , seleccione el encabezado (donde pone Changes o Push en las
imágenes anteriores) para ver un menú emergente de las páginas disponibles.
Pregunta: ¿Cuáles son algunas de las ventajas del uso de control de código fuente desde el principio de un
proyecto?
Respuesta: En primer lugar, usar el control de código fuente desde el principio, especialmente si también utiliza
un repositorio remoto, genera una copia de seguridad periódica externa del proyecto. A diferencia de mantener
un proyecto solo en un sistema de archivos local, el control de código fuente también proporciona un historial
de cambios completo y la capacidad de revertir con facilidad un único archivo o todo el proyecto a un estado
anterior. Ese historial de cambios ayuda a determinar la causa de regresiones (errores de prueba). Además, el
control de código fuente es esencial si varias personas trabajan en un proyecto, ya que administra las
sobrescrituras y ofrece solución para los conflictos. Por último, el control de código fuente, que es básicamente
una forma de automatización, facilita la automatización de las compilaciones, las pruebas y la administración de
versiones. Es realmente el primer paso para utilizar DevOps para un proyecto, y dado que las barreras de
entrada son tan bajas, realmente no hay ninguna razón que impida usar el control de código fuente desde el
principio.
Para obtener más información sobre el control de código fuente como automatización, consulte The Source of
Truth: The Role of Repositories in DevOps (El origen de la verdad, el rol de los repositorios en DevOps), un
artículo de MSDN Magazine escrito para aplicaciones móviles que se aplica también a las aplicaciones web.
Pregunta: ¿Puedo evitar que Visual Studio confirme automáticamente un nuevo proyecto?
Respuesta : Sí. Para deshabilitar la confirmación automática, vaya a la página Configuración de Team
Explorer , seleccione Git > Configuración global , desactive la opción Confirmar cambios tras la fusión
mediante combinación de forma predeterminada y, a continuación, seleccione Actualizar .
3. Seleccione Crear para aceptar los valores predeterminados. (Puede cambiar el nombre del entorno
virtual si lo desea, lo cual simplemente cambia el nombre de su subcarpeta, pero env es una convención
estándar).
4. Dé su consentimiento para los privilegios de administrador si se le solicita y, a continuación, tenga
paciencia durante unos minutos mientras Visual Studio descarga e instala los paquetes, lo que para
Django significa expandir varios miles archivos en casi tantas subcarpetas. Puede ver el progreso en la
ventana Salida de Visual Studio. Mientras espera, consulte la sección Preguntas a continuación.
5. En los controles de Git de Visual Studio (en la barra de estado), seleccione el indicador de cambios (que
muestra 99* ) que abre la página Cambios en Team Explorer .
La creación del entorno virtual implica miles de cambios, pero no es necesario que incluya ninguno de
ellos en el control de código fuente, dado que usted (o cualquier usuario que clone el proyecto) siempre
puede volver a crear el entorno a partir de requirements.txt.
Para excluir el entorno virtual, haga clic con el botón derecho en la carpeta env y seleccione Omitir
estos elementos locales .
6. Después de excluir el entorno virtual, los únicos cambios que faltan son en el archivo de proyecto y en
.gitignore. El archivo .gitignore contiene una entrada agregada para la carpeta del entorno virtual. Puede
hacer doble clic en el archivo para ver las diferencias.
7. Escriba un mensaje de confirmación y seleccione el botón Confirmar todo , a continuación, inserte las
confirmaciones en el repositorio remoto si lo desea.
Pregunta: ¿Por qué es conveniente crear un entorno virtual?
Respuesta: Un entorno virtual es una excelente manera de aislar las dependencias exactas de la aplicación. Este
tipo de aislamiento evita conflictos dentro de un entorno de Python global y contribuye a las pruebas y la
colaboración. Con el tiempo, a medida que desarrolle una aplicación, es inevitable que incorpore muchos
paquetes útiles de Python. Si mantiene los paquetes en un entorno virtual específico del proyecto, puede
actualizar fácilmente el archivo requirements.txt del proyecto que describe ese entorno, el cual se incluye en el
control de código fuente. Cuando el proyecto se copia en otros equipos, como los servidores de compilación, los
servidores de implementación y otros equipos de desarrollo, es fácil volver a crear el entorno con solo
requirements.txt (por este motivo no es necesario que el entorno esté en el control de código fuente). Para
obtener más información, vea Use virtual environments (Usar entornos virtuales).
Pregunta: ¿Cómo se quita un entorno virtual que ya se ha confirmado en el control de código fuente?
Respuesta: En primer lugar, edite el archivo .gitignore para excluir la carpeta: busque la sección del final con el
comentario # Python Tools for Visual Studio (PTVS) y agregue una línea nueva para la carpeta del entorno
virtual, como /BasicProject/env . (Dado que Visual Studio no muestra el archivo en el Explorador de
soluciones , ábralo directamente mediante el comando de menú Archivo > Abrir > Archivo . También puede
abrir el archivo desde Team Explorer : en la página Configuración , seleccione Configuración de
repositorios , vaya a la sección Archivos de omisión y de atributos y luego seleccione el vínculo Editar
junto a .gitignore ).
En segundo lugar, abra una ventana de comandos, vaya a la carpeta como BasicProject que contiene la carpeta
del entorno virtual, como env, y ejecute git rm -r env . A continuación, confirme esos cambios desde la línea de
comandos ( git commit -m 'Remove venv' ), o bien desde la página Cambios de Team Explorer .
2. En el proyecto se encuentra una carpeta que tiene el mismo nombre que el proyecto. Contiene los
archivos de proyecto Django básicos:
__init.py: un archivo vacío que indica a Python que esta carpeta es un paquete de Python.
wsgi.py: un punto de entrada para los servidores web compatibles con WSGI que van a servir al
proyecto. Normalmente, deberás dejar los archivos tal cual, ya que sirven de enlace para los
servidores web de producción.
settings.py: contiene la configuración del proyecto de Django, que se modifica durante el
desarrollo de una aplicación web.
urls.py: contiene una tabla de contenido para el proyecto de Django, que también se modifica
durante el desarrollo.
3. Como se ha indicado anteriormente, la plantilla de Visual Studio también agrega un archivo
requirements.txt al proyecto que especifica la dependencia del paquete de Django. La presencia de este
archivo es lo que le invita a crear un entorno virtual cuando empiece a crear el proyecto.
Pregunta: ¿Puede Visual Studio generar un archivo requirements.txt a partir de un entorno virtual después de
instalar otros paquetes?
Respuesta : Sí. Expanda el nodo Entornos de Python , haga clic con el botón derecho en su entorno virtual y
seleccione el comando Generar requirements.txt . Es conveniente usar este comando periódicamente a
medida que modifica el entorno, y confirmar los cambios de requirements.txt en el control de código fuente
junto con cualquier otro cambio de código que dependa de ese entorno. Si configura la integración continua en
un servidor de compilación, debe generar el archivo y confirmar los cambios cada vez que se modifique el
entorno.
2. La ejecución del servidor implica la ejecución del comando manage.py runserver <port> , que inicia el
servidor de desarrollo integrado de Django. Si Visual Studio indica No se pudo iniciar el depurador
con un mensaje relacionado con la falta de un archivo de inicio, haga clic con el botón derecho en
manage.py en el Explorador de soluciones y seleccione Establecer como archivo de inicio .
3. Al iniciar el servidor, verá una ventana de consola abierta que también muestra el registro del servidor.
Visual Studio abre automáticamente un explorador en http://localhost:<port> . Sin embargo, dado que
el proyecto de Django no tiene ninguna aplicación, Django muestra solo una página predeterminada para
confirmar que lo que tiene hasta ahora funciona correctamente:
4. Cuando haya terminado, detenga el servidor cerrando la ventana de la consola o con el comando
Depurar > Detener depuración en Visual Studio.
Pregunta: ¿Django es un servidor web además de una plataforma?
Respuesta: Sí y no. Django tiene un servidor web integrado que se usa para fines de desarrollo. Este servidor
web es lo que se usa al ejecutar la aplicación web localmente, como al depurar en Visual Studio. Sin embargo,
cuando realiza una implementación en un host web, Django utiliza el servidor web del host en su lugar. El
módulo wsgi.py del proyecto de Django se ocupa de enlazar con los servidores de producción.
Pregunta: ¿Cuál es la diferencia entre el uso de los comandos de menú de depuración y los comandos de
servidor en el submenú de Python del proyecto?
Respuesta: Además de con los comandos de menú de Depurar y los botones de la barra de herramientas,
también puede iniciar el servidor mediante los comandos Python > Run ser ver (Ejecutar servidor) o Python
> Run debug ser ver (Iniciar el servidor de depuración) en el menú contextual del proyecto. Ambos comandos
abren una ventana de consola en la que se ve la dirección URL local (localhost:port) del servidor en ejecución.
Sin embargo, debe abrir manualmente un explorador con esa dirección URL, y la ejecución del servidor de
depuración no inicia automáticamente el depurador de Visual Studio. Puede adjuntar un depurador al proceso
en ejecución más adelante, si lo desea, mediante el comando Depurar > Asociar al proceso .
Pasos siguientes
En este momento, el proyecto de Django básico no contiene ninguna aplicación. Crearemos una aplicación en el
paso siguiente. Dado que normalmente funcionan con las aplicaciones de Django más que con el proyecto de
Django, no necesita saber mucho más acerca de los archivos de código reutilizable en este momento.
Creación de una aplicación de Django con vistas y plantillas de página
EL EM EN TO DESC RIP C IÓ N
views.py Las vistas son lo que se suele considerar páginas web, que
toman una solicitud HTTP y devuelven una respuesta HTTP.
Las vistas suelen representarse como código HTML que los
exploradores web saben cómo mostrar, pero una vista no
tiene necesariamente que ser visible (por ejemplo, un
formulario intermedio). Una vista se define mediante una
función de Python cuya responsabilidad es representar el
código HTML que se enviará al explorador. El archivo
views.py es una ubicación predeterminada para crear vistas,
e inicialmente contiene solo la instrucción,
from django.shortcuts import render .
EL EM EN TO DESC RIP C IÓ N
views.py Las vistas son lo que se suele considerar páginas web, que
toman una solicitud HTTP y devuelven una respuesta HTTP.
Las vistas suelen representarse como código HTML que los
exploradores web saben cómo mostrar, pero una vista no
tiene necesariamente que ser visible (por ejemplo, un
formulario intermedio). Una vista se define mediante una
función de Python cuya responsabilidad es representar el
código HTML que se enviará al explorador. El archivo
views.py es una ubicación predeterminada para crear vistas,
e inicialmente contiene solo la instrucción,
from django.shortcuts import render .
El contenido de apps.py aparece del modo siguiente cuando se usa el nombre "HelloDjangoApp":
class HelloDjangoAppConfig(AppConfig):
name = 'HelloDjango'
def index(request):
return HttpResponse("Hello, Django!")
2. En la carpeta BasicProject (creada en el paso 1), modifique urls.py para que al menos coincida con el
código siguiente (puede conservar los comentarios instructivos si quiere):
# Django processes URL patterns in the order they appear in the array
urlpatterns = [
url(r'^$', HelloDjangoApp.views.index, name='index'),
url(r'^home$', HelloDjangoApp.views.index, name='home'),
]
Cada modelo de dirección URL describe las vistas a las que Django enruta las direcciones URL relativas al
sitio específicas (es decir, la parte que sigue a https://www.domain.com/ ). La primera entrada de
urlPatterns que comienza con la expresión regular ^$ es el enrutamiento para la raíz del sitio, "/". La
segunda entrada, ^home$ específicamente enruta "/home". Puede tener cualquier número de
enrutamientos a la misma vista.
3. Ejecute el proyecto de nuevo para ver el mensaje Hello, Django! definido por la vista. Cuando haya
terminado, detenga el servidor.
Confirmación en el control de código fuente
Dado que ha realizado cambios en el código y ha probado que funcionan correctamente, ahora es un buen
momento para revisar y confirmar los cambios en el control de código fuente. Los pasos posteriores de este
tutorial le recuerdan los momentos adecuados para volver a confirmar el control de código fuente, y le remiten
a esta sección.
1. Seleccione el botón de cambios de la parte inferior de Visual Studio (en un círculo abajo), que le lleva a
Team Explorer .
2. En Team Explorer , escriba un mensaje de confirmación como "Crear la aplicación inicial de Django" y
seleccione Confirmar todo . Una vez que se haya completado la confirmación, verá un mensaje
Confirmar <hash> de creación local. Sincronizar para compar tir los cambios con el ser vidor.
Si desea insertar los cambios en el repositorio remoto, seleccione Sincronizar y luego Inser tar en
Confirmaciones de salida . También puede acumular varias confirmaciones locales antes de insertar en
la instancia remota.
Pregunta: Estoy utilizando un certificado X.509 con mi servicio y obtengo un
System.Security.Cryptography.CryptographicException. ¿Para qué sirve el prefijo "r" que aparece delante de
las cadenas de enrutamiento?
Respuesta: El prefijo "r" en una cadena de Python significa "raw" (sin formato), lo que indica a Python que no
trate como escape ninguno de los caracteres de la cadena. Dado que las expresiones regulares usan muchos
caracteres especiales, el prefijo "r" hace que esas cadenas sean mucho más fáciles de leer que si contuvieran una
serie de caracteres de escape "\".
Pregunta: Estoy utilizando un certificado X.509 con mi servicio y obtengo un
System.Security.Cryptography.CryptographicException. ¿Qué significan los caracteres ^ y $ en las entradas
de enrutamiento de dirección URL?
Respuesta: En las expresiones regulares que definen patrones de dirección URL, ^ significa "inicio de línea" y $
significa "final de línea," donde de nuevo las direcciones URL se refieren a la raíz del sitio (la parte que sigue a
https://www.domain.com/ ). La expresión regular ^$ significa "en blanco" y, por tanto, coincide con la dirección
URL completa https://www.domain.com/ (no se agrega nada a la raíz del sitio). El patrón ^home$ coincide
exactamente con https://www.domain.com/home/ . (Django no usa la barra / final en detección de patrones).
Si no utiliza el carácter $ final en una expresión regular, como en ^home , el patrón de la dirección URL coincide
con cualquier dirección URL que comience por "home" , como "home", "homework", "homestead" y
"home192837".
Para experimentar con diferentes expresiones regulares, pruebe herramientas en línea como regex101.com en
pythex.org.
def index(request):
now = datetime.now()
return HttpResponse(html_content)
Ejecute el proyecto nuevo, para ver un mensaje como "Hello Django! el lunes, 16 de abril de 2018 a las
16:28:10". Actualice la página para actualizar la hora y confirme que el contenido se genera con cada solicitud.
Cuando haya terminado, detenga el servidor.
TIP
Un acceso directo para detener y reiniciar el proyecto es usar el comando de menú Depurar > Reiniciar
(Ctrl+Mayús +F5 ) o el botón Reiniciar de la barra de herramientas de depuración:
INSTALLED_APPS = [
'HelloDjangoApp',
# Other entries...
]
2. Además, en settings.py, asegúrese de que el objeto TEMPLATES contiene la siguiente línea (incluida de
forma predeterminada), que indica a Django que busque plantillas en la carpeta templates de una
aplicación instalada:
'APP_DIRS': True,
<html>
<head><title></title></head>
<body>
{{ content }}
</body>
</html>
4. En la carpeta HelloDjangoApp, abra views.py y reemplace la función index por el siguiente código que
usa la función del asistente django.shortcuts.render . El asistente render proporciona una interfaz
simplificada para trabajar con plantillas de página. Asegúrese de mantener todas las instrucciones from
existentes.
def index(request):
now = datetime.now()
return render(
request,
"HelloDjangoApp/index.html", # Relative path from the 'templates' folder to the template
file
# "index.html", # Use this code for VS 2017 15.7 and earlier
{
'content': "<strong>Hello Django!</strong> on " + now.strftime("%A, %d %B, %Y at %X")
}
)
El primer argumento para render , como puede ver, es el objeto de solicitud, seguido de la ruta de acceso
relativa al archivo de plantilla dentro de la carpeta templates de la aplicación. Se asigna a un archivo de
plantilla el nombre de la vista que admite, si procede. El tercer argumento para render es un diccionario
de variables al que hace referencia la plantilla. Puede incluir objetos en el diccionario, en cuyo caso una
variable de la plantilla puede hacer referencia a {{ object.property }} .
5. Ejecute el proyecto y observe la salida. Verá un mensaje similar al del paso 2.2, que indica que la plantilla
funciona.
Sin embargo, tenga en cuenta que el código HTML que usó en la propiedad content se representa solo
como texto sin formato porque la función render convierte automáticamente en escape ese HTML. El
escape automático evita vulnerabilidades accidentales en los ataques por inyección de código: los
desarrolladores suelen recopilar información de una página y emplearla como valor en otra mediante un
marcador de posición de plantilla. El escape también sirve como recordatorio de que es mejor conservar
el HTML en la plantilla de página y fuera del código. Por suerte, resulta sencillo crear variables adicionales
cuando es necesario. Por ejemplo, cambie index.html por templates para que coincida con el siguiente
marcado, que agrega un título de página y mantiene todo el formato de la plantilla de página:
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<strong>{{ message }}</strong>{{ content }}
</body>
</html>
A continuación, escriba la función de vista index como sigue, para proporcionar valores para todas las
variables en la plantilla de página:
def index(request):
now = datetime.now()
return render(
request,
"HelloDjangoApp/index.html", # Relative path from the 'templates' folder to the template
file
# "index.html", # Use this code for VS 2017 15.7 and earlier
{
'title' : "Hello Django",
'message' : "Hello Django!",
'content' : " on " + now.strftime("%A, %d %B, %Y at %X")
}
)
6. Detenga el servidor y reinicie el proyecto, y observe que la página ahora se representa correctamente:
7. Visual Studio 2017 15.7 y versiones anteriores: Como paso final, mueva las plantillas a una subcarpeta
con el mismo nombre que la aplicación, que crea un espacio de nombres y evita posibles conflictos con
otras aplicaciones que es posible que se agreguen al proyecto. (Las plantillas en VS 2017 15.8+ hacen
esto automáticamente). Es decir, cree una subcarpeta en templates denominada HelloDjangoApp, mueva
index.html a esa subcarpeta y modifique la función de vista index para que haga referencia a la nueva
ruta de acceso de la plantilla, HelloDjangoApp/index.html. A continuación, ejecute el proyecto, compruebe
que la página se representa correctamente y detenga el servidor.
8. Confirme los cambios en el control de código fuente y actualice su repositorio remoto, si lo desea, tal y
como se describe en el paso 2.2.
Pregunta: Estoy utilizando un certificado X.509 con mi servicio y obtengo un
System.Security.Cryptography.CryptographicException. ¿Las plantillas de página deben estar en un archivo
independiente?
Respuesta: Aunque las plantillas normalmente se guardan en archivos HTML independientes, también se puede
usar una plantilla insertada. No obstante, se recomienda usar un archivo independiente para mantener una
separación clara entre código y marcado.
Pregunta: Estoy utilizando un certificado X.509 con mi servicio y obtengo un
System.Security.Cryptography.CryptographicException. ¿Deben usar las plantillas la extensión de archivo
.html?
Respuesta: La extensión .html para archivos de plantilla de página es completamente opcional, ya que siempre
puede identificar la ruta de acceso exacta relativa al archivo en el segundo argumento para la función render .
Pero Visual Studio (y otros editores) normalmente ofrecen características como la finalización de código y el
coloreado de sintaxis con archivos .html, lo que compensa con creces el hecho de que las plantillas de página no
sean estrictamente HTML.
De hecho, cuando esté trabajando con un proyecto de Django, Visual Studio detecta automáticamente cuándo el
archivo HTML que está editando es realmente una plantilla de Django y proporciona algunas características de
completado automático. Por ejemplo, al comenzar a escribir un comentario de plantilla de página de Django,
{# , Visual Studio proporciona automáticamente los caracteres #} de cierre. Los comandos Selección con
comentarios y Selección sin comentarios (en el menú Editar > Opciones avanzadas y en la barra de
herramientas) también utilizan comentarios de plantilla en lugar de comentarios HTML.
Pregunta: Estoy utilizando un certificado X.509 con mi servicio y obtengo un
System.Security.Cryptography.CryptographicException. Cuando ejecuto el proyecto, aparece un error que
indica que no se encuentra la plantilla. ¿Qué ocurre?
Respuesta: Si ve errores que indican que no se encuentra la plantilla, asegúrese de que se ha agregado la
aplicación al archivo settings.py del proyecto de Django en la lista INSTALLED_APPS . Sin esa entrada, Django no
sabe que ha de buscar en la carpeta templates de la aplicación.
Pregunta: Estoy utilizando un certificado X.509 con mi servicio y obtengo un
System.Security.Cryptography.CryptographicException. ¿Por qué es importante el espaciado entre nombres
de la plantilla?
Respuesta: Cuando Django busca una plantilla a la que se hace referencia en la función render , usa el primer
archivo que encuentre que coincida con la ruta de acceso relativa. Si tiene varias aplicaciones de Django en el
mismo proyecto que utilizan las mismas estructuras de carpeta para las plantillas, es probable que una
aplicación use involuntariamente una plantilla desde otra aplicación. Para evitar tales errores, cree siempre una
subcarpeta bajo una carpeta templates de la aplicación que coincida con el nombre de la aplicación para evitar
cualquier duplicación.
Pasos siguientes
Atender archivos estáticos, agregar páginas y usar la herencia de plantilla
Paso anterior : Creación de una aplicación de Django con vistas y plantillas de página
En los pasos anteriores de este tutorial, ha aprendido a crear una aplicación de Django mínima con una sola
página HTML independiente. Pero las aplicaciones web modernas están formadas normalmente por muchas
páginas y usan recursos compartidos, como archivos CSS y JavaScript, para proporcionar un comportamiento y
un estilo uniformes.
En este paso aprenderá lo siguiente:
Usar plantillas de elementos de Visual Studio para agregar rápidamente nuevos archivos de distintos tipos
con práctico código reutilizable (paso 3.1)
Configurar el proyecto de Django para atender archivos estáticos (paso 3.2)
Agregar páginas adicionales a la aplicación (paso 3.3)
Usar la herencia de plantilla para crear un encabezado y una barra de navegación que se use en varias
páginas (paso 3.4)
STATIC_URL = '/static/'
Puede organizar los archivos con cualquier estructura de carpetas de static que quiera y luego usar rutas de
acceso relativas dentro de esa carpeta para hacer referencia a los archivos. Para mostrar este proceso, en los
pasos siguientes se agrega un archivo CSS a la aplicación y luego se usa esa hoja de estilos en la plantilla
index.html:
1. En el Explorador de soluciones , haga clic con el botón derecho en la carpeta HelloDjangoApp del
proyecto de Visual Studio, seleccione Agregar > Nueva carpeta y ponga a la carpeta el nombre
static .
2. Haga clic con el botón derecho en la carpeta static y seleccione Agregar > Nuevo elemento . En el
cuadro de diálogo que aparece, seleccione la plantilla Hoja de estilo , ponga al archivo el nombre
site.css y haga clic en Aceptar . El archivo site.css aparece en el proyecto y se abre en el editor. La
estructura de carpetas debería ser similar a la de la imagen siguiente:
.message {
font-weight: 600;
color: blue;
}
<html>
<head>
<title>{{ title }}</title>
{% load staticfiles %} <!-- Instruct Django to load static files -->
<link rel="stylesheet" type="text/css" href="{% static 'site.css' %}" />
</head>
<body>
<span class="message">{{ message }}</span>{{ content }}
</body>
</html>
5. Ejecute el proyecto y observe los resultados. Detenga el servidor cuando haya finalizado y confirme los
cambios en el control de código fuente si lo desea (como se explica en paso 2).
Pregunta: Estoy utilizando un certificado X.509 con mi servicio y obtengo un
System.Security.Cryptography.CryptographicException. ¿Para qué sirve la etiqueta {% load staticfiles %}?
Respuesta: La línea {% load staticfiles %} se requiere antes de hacer referencia a los archivos estáticos en
elementos como <head> y <body> . En el ejemplo que se muestra en esta sección, "staticfiles" hace referencia a
un conjunto de etiquetas de plantilla de Django personalizado, que es lo que le permite usar la sintaxis
{% static %} para hacer referencia a los archivos estáticos. Sin {% load staticfiles %} , verá una excepción
cuando se ejecute la aplicación.
Pregunta: Estoy utilizando un certificado X.509 con mi servicio y obtengo un
System.Security.Cryptography.CryptographicException. ¿Hay alguna convención para organizar los archivos
estáticos?
Respuesta: Puede agregar otros archivos HTML, CSS y JavaScript a la carpeta static como quiera. Una forma
habitual de organizar los archivos estáticos es crear subcarpetas denominadas fonts, scripts y content (para las
hojas de estilos y cualquier otro archivo). En cada caso, no olvide incluir esas carpetas en la ruta de acceso
relativa al archivo en las referencias de {% static %} .
Pregunta: Estoy utilizando un certificado X.509 con mi servicio y obtengo un
System.Security.Cryptography.CryptographicException. ¿Puedo completar la misma tarea sin usar la etiqueta
{% load staticfiles %}?
Respuesta: Sí, puede hacerlo.
<html>
<head>
<title>{{ title }}</title>
<link rel="stylesheet" type="text/css" href="../../static/site.css" />
</head>
<body>
<span class="message">{{ message }}</span>{{ content }}
</body>
</html>
TIP
Si el comando Nuevo elemento no aparece en el menú Agregar , asegúrese de que ha detenido el servidor para
que Visual Studio salga del modo de depuración.
3. Abra el archivo views.py de la aplicación y agregue una función denominada about que use la plantilla:
def about(request):
return render(
request,
"HelloDjangoApp/about.html",
{
'title' : "About HelloDjangoApp",
'content' : "Example app page for Django."
}
)
4. Abra el archivo urls.py del proyecto de Django y agregue la línea siguiente a la matriz urlPatterns :
<div><a href="about">About</a></div>
6. Guarde todos los archivos con el comando de menú Archivo > Guardar todo o simplemente presione
Ctrl +Mayús +S . (Técnicamente, este paso no es necesario porque la ejecución del proyecto en Visual
Studio guarda los archivos automáticamente. No obstante, es un comando que viene bien conocer).
7. Ejecute el proyecto para observar los resultados y compruebe la navegación entre las páginas. Cierre el
servidor cuando haya finalizado.
Pregunta: Estoy utilizando un certificado X.509 con mi servicio y obtengo un
System.Security.Cryptography.CryptographicException. He intentado usar "index" para el vínculo a la página
principal, pero no ha funcionado. ¿Por qué?
Respuesta: Aunque la función de vista de views.py se denomina index , los patrones de enrutamiento de
dirección URL del archivo urls.py del proyecto de Django no contienen una expresión regular que coincida con
la cadena "index". Para que coincida con esa cadena, debe agregar otra entrada para el patrón ^index$ .
Como se muestra en la siguiente sección, es mucho mejor usar la etiqueta {% url '<pattern_name>' %} en la
plantilla de página para hacer referencia al nombre de un modelo, en cuyo caso Django crea la dirección URL
adecuada para su caso. Por ejemplo, reemplace <div><a href="home">Home</a></div> en about.html por
<div><a href="{% url 'index' %}">Home</a></div> . El uso de "index" aquí funciona porque el primer patrón de
dirección URL de urls.py se denomina, de hecho "index" (en virtud del argumento name='index' ). También
puede utilizar "home" para hacer referencia al segundo patrón.
Paso 3-4: Uso de la herencia de plantilla para crear un encabezado y
una barra de navegación
En lugar de tener vínculos de navegación explícitos en cada página, las aplicaciones web modernas suelen
utilizan un encabezado de personalización de marca y una barra de navegación que proporciona los vínculos de
página, los menús emergentes, etc. más importantes. Sin embargo, es poco práctico repetir el mismo código en
cada plantilla de página para asegurarse de que el encabezado y la barra de navegación son los mismos en
todas las páginas. Es preferible definir los elementos comunes de todas las páginas en un solo lugar.
El sistema de plantillas de Django ofrece dos formas de reutilizar elementos específicos a través de varias
plantillas: la inclusión y la herencia.
La inclusión son otras plantillas de página que se insertan en una ubicación específica de la plantillas de
referencia mediante la sintaxis {% include <template_path> %} . También puede utilizar una variable si
desea cambiar la ruta de acceso dinámicamente en el código. La inclusión se utiliza normalmente en el
cuerpo de una página para incorporar la plantilla compartida en una ubicación específica de la página.
La herencia utiliza {% extends <template_path> %} al principio de una plantilla de página para especificar
una plantilla base compartida sobre la que construye a continuación la plantilla de referencia. La herencia
se suele utilizar para definir un diseño, una barra de navegación y otras estructuras que se comparten
entre las páginas de una aplicación, de manera que las plantillas de referencia solo tengan que agregar o
modificar áreas específicas de la plantilla base denominadas bloques.
En ambos casos, <template_path> se refiere a la carpeta templates de la aplicación ( ../ o ./ también son
válidos).
Una plantilla base delimita los bloques usando las etiquetas {% block <block_name> %} y {% endblock %} . Si una
plantilla de referencia utiliza etiquetas con el mismo nombre de bloque, su contenido de bloque reemplaza al de
la plantilla base.
Los pasos siguientes muestran la herencia:
1. En la carpeta templates/HelloDjangoApp de la aplicación, cree un nuevo archivo HTML (con el menú
contextual Agregar > Nuevo elemento o Agregar > Página HTML ) denominado layout.html y
reemplace su contenido por el siguiente marcado. Puede ver que esta plantilla contiene un bloque
denominado "content" que es todo lo que tienen que reemplazar las páginas de referencia:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>{{ title }}</title>
{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static 'site.css' %}" />
</head>
<body>
<div class="navbar">
<a href="/" class="navbar-brand">Hello Django</a>
<a href="{% url 'home' %}" class="navbar-item">Home</a>
<a href="{% url 'about' %}" class="navbar-item">About</a>
</div>
<div class="body-content">
{% block content %}{% endblock %}
<hr/>
<footer>
<p>© 2018</p>
</footer>
</div>
</body>
</html>
2. Agregue los estilos siguientes al archivo static/site.css de la aplicación (en este tutorial no se está
intentando mostrar un diseño con capacidad de respuesta; estos estilos simplemente sirven para generar
un resultado interesante):
.navbar {
background-color: lightslategray;
font-size: 1em;
font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-
serif;
color: white;
padding: 8px 5px 8px 5px;
}
.navbar a {
text-decoration: none;
color: inherit;
}
.navbar-brand {
font-size: 1.2em;
font-weight: 600;
}
.navbar-item {
font-variant: small-caps;
margin-left: 30px;
}
.body-content {
padding: 5px;
font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
{% extends "HelloDjangoApp/layout.html" %}
{% block content %}
{{ content }}
{% endblock %}
5. Ejecute el servidor para observar los resultados. Cierre el servidor cuando haya finalizado.
6. Dado que ha realizado cambios sustanciales en la aplicación, es de nuevo un buen momento para
confirmar los cambios en el control de código fuente.
Pasos siguientes
Usar la plantilla completa de Proyecto web de Django
Paso anterior : Atender archivos estáticos, agregar páginas y usar la herencia de plantilla
Ahora que ha explorado los conceptos básicos de Django mediante la creación de una aplicación a partir de la
plantilla "Proyecto web de Django en blanco" en Visual Studio, podrá comprender fácilmente la aplicación más
completa que se genera mediante la plantilla "Proyecto web de Django".
En este paso, hará lo siguiente:
Crear una aplicación web de Django más completa mediante la plantilla "Proyecto web de Django" y
examinar la estructura del proyecto (paso 4.1)
Comprender las vistas y las plantillas de página creadas por la plantilla de proyecto, que consta de tres
páginas que heredan de una plantilla de página base y emplea las bibliotecas estáticas de JavaScript, como
jQuery y Bootstrap (paso 4.2)
Comprender el enrutamiento de direcciones URL que proporciona la plantilla (paso 4.3)
La plantilla también proporciona autenticación básica, que se explica en el paso 5.
7. La aplicación creada por la plantilla tiene tres páginas: una de inicio, otra de información y otra de
contacto, por las que puede navegar con la barra de navegación. Tómese un par de minutos para
examinar las diferentes partes de la aplicación. Para autenticarse en la aplicación a través del comando
Iniciar sesión , use las credenciales de superusuario creadas anteriormente.
8. La aplicación creada por la plantilla "Proyecto web de Django" usa Bootstrap para el diseño con capacidad
de respuesta que acoge los factores de los formatos móviles. Para ver esta capacidad de respuesta,
cambie el tamaño del explorador a una vista estrecha para que el contenido se represente verticalmente
y la barra de navegación se convierta en un icono de menú:
Paso 4.2: Comprender las vistas y las plantillas de página creadas por
la plantilla de proyecto
Tal y como se observa cuando se ejecuta el proyecto, la aplicación contiene tres vistas: inicio, información y
contacto. El código de estas vistas se encuentra en la carpeta app/views. Cada función de la vista simplemente
llama a django.shortcuts.render con la ruta de acceso a una plantilla y un sencillo objeto de diccionario. Por
ejemplo, la función about es quien controla la página de información:
def about(request):
"""Renders the about page."""
assert isinstance(request, HttpRequest)
return render(
request,
'app/about.html',
{
'title':'About',
'message':'Your application description page.',
'year':datetime.now().year,
}
)
{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static 'app/content/bootstrap.min.css' %}" />
<link rel="stylesheet" type="text/css" href="{% static 'app/content/site.css' %}" />
<script src="{% static 'app/scripts/modernizr-2.6.2.js' %}"></script>
</head>
<body>
<!-- Navbar omitted -->
<!-- Additional scripts; use the "scripts" block to add page-specific scripts. -->
<script src="{% static 'app/scripts/jquery-1.10.2.js' %}"></script>
<script src="{% static 'app/scripts/bootstrap.js' %}"></script>
<script src="{% static 'app/scripts/respond.js' %}"></script>
{% block scripts %}{% endblock %}
</body>
</html>
Las plantillas de página individuales, about.html, contact.html e index.html, amplían la plantilla base layout.html.
about.html es la más sencilla y muestra las etiquetas {% extends %} y {% block content %} :
{% extends "app/layout.html" %}
{% block content %}
{% endblock %}
index.html y contact.html usan la misma estructura y proporcionan contenido más largo en el bloque "content".
En la carpeta templates/app también hay una cuarta página login.html, junto con loginpartial.html, que se
traslada a layout.html mediante {% include %} . Estos archivos de plantilla se describen en el paso 5 sobre la
autenticación.
Pregunta: ¿Es posible aplicar sangría a {% block %} y {% endblock %} en la plantilla de página de Django?
Respuesta: Sí, las plantillas de página de Django funcionan correctamente si aplica sangría a las etiquetas de
bloque, quizás para alinearlas en sus elementos principales más adecuados. No se les aplica sangría en las
plantillas de página generadas por la plantilla de proyecto de Visual Studio para que pueda ver claramente
donde se colocan.
Paso 4.3: Comprender el enrutamiento de direcciones URL creado por
la plantilla
El archivo urls.py del proyecto Django, tal como lo crea la plantilla "Proyecto web de Django", contiene el código
siguiente:
import app.forms
import app.views
urlpatterns = [
url(r'^$', app.views.home, name='home'),
url(r'^contact$', app.views.contact, name='contact'),
url(r'^about$', app.views.about, name='about'),
url(r'^login/$',
django.contrib.auth.views.login,
{
'template_name': 'app/login.html',
'authentication_form': app.forms.BootstrapAuthenticationForm,
'extra_context':
{
'title': 'Log in',
'year': datetime.now().year,
}
},
name='login'),
url(r'^logout$',
django.contrib.auth.views.logout,
{
'next_page': '/',
},
name='logout'),
]
Los primeros tres patrones de dirección URL se asignan directamente a las vistas home , contact y about en el
archivo views.py de la aplicación. Los patrones ^login/$ y ^logout$ , por otra parte, usan las vistas de Django
integradas en lugar de vistas definidas por la aplicación. Las llamadas al método url también incluyen datos
adicionales para personalizar la vista. En el paso 5 se exploran estas llamadas.
Pregunta: En el proyecto que he creado, ¿por qué el patrón de dirección URL "about" usa "^about" en lugar
de "^about$" como se ha visto aquí?
Respuesta: La falta de la "$" al final de la expresión regular se debe simplemente a un descuido en muchas de las
versiones de la plantilla del proyecto. El patrón de dirección URL funciona perfectamente en una página
denominada "about", pero sin el carácter "$" el patrón de dirección URL coincide también direcciones URL como
"about=django", "about09876", "aboutoflaughter", etc. El carácter "$" al final se muestra aquí para crear un
patrón de dirección URL que coincida solo con "about".
Pasos siguientes
Autenticación de usuarios en Django
3. Abra templates/app/layout.html y observe que el elemento <div class="navbar ...> contiene la etiqueta
{% include app/loginpartial.html %} . La etiqueta {% include %} indica al sistema de plantillas de Django
que incorpore el contenido del archivo incluido en este momento en la plantilla que lo contiene.
4. Abra templates/app/loginpartial.html y observe cómo usa la etiqueta condicional
{% if user.is_authenticated %} junto con una etiqueta {% else %} para representar diferentes
elementos de la interfaz de usuario en función de si se ha autenticado al usuario:
{% if user.is_authenticated %}
<form id="logoutForm" action="/logout" method="post" class="navbar-right">
{% csrf_token %}
<ul class="nav navbar-nav navbar-right">
<li><span class="navbar-brand">Hello {{ user.username }}!</span></li>
<li><a href="javascript:document.getElementById('logoutForm').submit()">Log off</a></li>
</ul>
</form>
{% else %}
{% endif %}
5. Habida cuenta que no hay ningún usuario autenticado al iniciar la aplicación por primera vez, este código
de plantilla representa solo el vínculo "Iniciar sesión" en la ruta de acceso relativa "login". Como se
especifica en urls.py (tal como se muestra en la sección anterior), esa ruta está asignada a la vista
django.contrib.auth.views.login . Esa vista recibe los siguientes datos:
{
'template_name': 'app/login.html',
'authentication_form': app.forms.BootstrapAuthenticationForm,
'extra_context':
{
'title': 'Log in',
'year': datetime.now().year,
}
}
class BootstrapAuthenticationForm(AuthenticationForm):
"""Authentication form which uses boostrap CSS."""
username = forms.CharField(max_length=254,
widget=forms.TextInput({
'class': 'form-control',
'placeholder': 'User name'}))
password = forms.CharField(label=_("Password"),
widget=forms.PasswordInput({
'class': 'form-control',
'placeholder':'Password'}))
Como puede ver, esta clase de formulario se deriva de AuthenticationForm e invalida específicamente los
campos de nombre de usuario y contraseña para agregar texto de marcador de posición. La plantilla de
Visual Studio incluye este código explícito suponiendo que probablemente quiera personalizar el
formulario, por ejemplo, agregando una característica de validación de la seguridad de la contraseña.
6. Cuando se desplaza a la página de inicio de sesión, la aplicación representa la plantilla login.html. Las
variables {{ form.username }} y {{ form.password }} representan los formularios CharField de
BootstrapAuthenticationForm . También hay una sección integrada para mostrar errores de validación, y
un elemento listo para su uso para los inicios de sesión con medios sociales, por si opta por agregar esos
servicios.
{% extends "app/layout.html" %}
{% block content %}
{% endblock %}
7. Cuando se envía el formulario, Django intenta autenticar las credenciales (por ejemplo, las credenciales
del superusuario). Si se produce un error en la autenticación, permanecerá en la página actual, pero
form.errors se establecerá en true. Si la autenticación se realiza correctamente, Django navegará a la
dirección URL relativa del campo "next", <input type="hidden" name="next" value="/" /> , que en este caso
es la página principal ( / ).
8. Ahora, cuando se vuelve a representar la página principal, la propiedad user.is_authenticated es true si
se representa la plantilla loginpartial.html. Como resultado, se ve un mensaje Hello (nombre de
usuario) y Cerrar sesión . Puede usar user.is_authenticated en otras partes de la aplicación para
comprobar la autenticación.
9. Para comprobar si el usuario autenticado está autorizado a acceder a recursos específicos, deberá
recuperar permisos específicos de usuario de la base de datos. Para obtener más información, vea Using
the Django authentication system (Uso del sistema de autenticación de Django) (Documentación de
Django).
10. El superusuario o el administrador, en concreto, está autorizado a acceder a las interfaces de
administrador de Django integradas con las direcciones URL relativas "/admin/" y "/admin/doc/". Para
habilitar estas interfaces, haga lo siguiente:
a. Instale el paquete de Python docutils en el entorno. Una excelente manera de hacerlo es agregar
"docutils" al archivo requirements.txt y, luego, en el Explorador de soluciones , expandir el nodo
Entornos de Python , hacer clic con el botón derecho en el entorno que está usando y seleccionar
Instalar desde requirements.txt .
b. Abra el archivo urls.py del proyecto de Django y quite los comentarios predeterminados de las
siguientes entradas:
# ...
urlpatterns = [
# ...
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
url(r'^admin/', include(admin.site.urls)),
]
d. Cuando reinicie la aplicación, puede ir a "/admin/" y "/admin/doc/" y realizar tareas como crear
cuentas de usuario adicionales.
11. La parte final del flujo de autenticación es el cierre de sesión. Como puede ver en loginpartial.html, el
vínculo Cerrar sesión simplemente realiza una operación POST a la dirección URL relativa "/login", que
se controla mediante la vista integrada django.contrib.auth.views.logout . Esta vista no muestra ninguna
interfaz de usuario y solo se desplaza a la página principal (como se muestra en urls.py para el patrón
"^logout$"). Si desea mostrar una página de cierre de sesión, cambie primero el patrón de dirección URL
como se indica a continuación para agregar una propiedad "template_name" y quite la propiedad
"next_page":
url(r'^logout$',
django.contrib.auth.views.logout,
{
'template_name': 'app/loggedoff.html',
# 'next_page': '/',
},
name='logout')
{% extends "app/layout.html" %}
{% block content %}
<h3>You have been logged off</h3>
{% endblock %}
12. Cuando haya terminado, detenga el servidor y una vez más confirme los cambios en el control de código
fuente.
Pregunta: Estoy utilizando un certificado X.509 con mi servicio y obtengo un
System.Security.Cryptography.CryptographicException. ¿Cuál es la finalidad de la etiqueta {% csrf_token %}
que aparece en los elementos <form>?
Respuesta: La etiqueta {% csrf_token %} incluye la protección de falsificación de solicitud entre sitios (csrf)
integrada de Django (documentación de Django). Normalmente se agrega esta etiqueta a cualquier elemento
que incluya los métodos de solicitud POST, PUT o DELETE, como un formulario. Luego, la función de
representación de la plantilla ( render ) inserta la protección necesaria.
Pasos siguientes
Usar la plantilla de proyecto web de Django de sondeos
NOTE
Si ha estado confirmando la solución de Visual Studio en el control de código fuente en el transcurso de este tutorial,
ahora es un buen momento de hacer otra confirmación. La solución debe coincidir con el código fuente del tutorial en
GitHub: Microsoft/python-sample-vs-learning-django.
Ya ha explorado por completo las plantillas "Proyecto web de Django en blanco" y "Proyecto web de Django" en
Visual Studio. Ha aprendido todos los elementos básicos de Django, como el uso de vistas y plantillas, y ha
explorado el enrutamiento, la autenticación y el uso de modelos de base de datos. Ahora podrá crear una
aplicación web propia con las vistas y los modelos que necesite.
La ejecución de una aplicación web en el equipo de desarrollo es solamente un paso en el proceso de poner la
aplicación a disposición de sus clientes. Los pasos siguientes pueden incluir las siguientes tareas:
Implementar la aplicación web en un servidor de producción, como Azure App Service. Consulte
Publicación en Azure App Service.
Personalice la página 404 mediante la creación de una plantilla denominada templates/404.html. Cuando
está presente, Django utiliza esta plantilla en lugar de la predeterminada. Para obtener más información,
consulte Error views (Vistas de error) en la documentación de Django.
Escriba pruebas unitarias en tests.py; las plantillas de proyecto de Visual Studio proporcionan puntos de
inicio para eso; además, puede encontrar más información en Writing your first Django app, part 5 -
testing (Escribir la primera aplicación de Django, parte 5: pruebas) y Testing in Django (Pruebas en
Django) en la documentación de Django.
Cambiar la aplicación de SQLite a un almacén de datos a nivel de producción como PostgreSQL, MySQL y
SQL Server (todos se pueden hospedar en Azure). Como se describe en When to use SQLite (Cuándo
usar SQLite) (sqlite.org), SQLite funciona perfectamente en sitios de tráfico bajo a medio, con menos de
100.000 visitas al día, pero no se recomienda en volúmenes más elevados. También está limitado a un
único equipo, por lo tanto no se puede usar en escenarios de varios servidores, como el equilibrio de
carga y la replicación geográfica. Para obtener información sobre la compatibilidad con Django otras
bases de datos, vea Configuración de la base de datos. También puede usar el SDK de Azure para Python
para trabajar con los servicios de almacenamiento de Azure, como tablas y blobs.
Configurar una canalización de implementación continua/integración continua en un servicio como
Azure DevOps. Además de funcionar con el control de código fuente (en Azure Repos, GitHub u otro
servicio), puede configurar un proyecto de Azure DevOps para que ejecute automáticamente pruebas
unitarias como requisito previo para la publicación y también configurar la canalización para
implementar en un servidor de ensayo para pruebas adicionales antes de implementar en producción.
Azure DevOps, además, se integra con soluciones de supervisión como App Insights y cierra todo el ciclo
con herramientas de planeación de Ágil. Para obtener más información, consulte Creación de una
canalización de CI/CD para Python con Azure DevOps Projects y también la Azure DevOps
Documentation (Documentación de Azure DevOps) general.
7. La aplicación creada por la plantilla tiene tres páginas: una de inicio, otra de información y otra de
contacto, por las que puede navegar con la barra de la parte superior. Tómese un minuto o dos para
examinar las diferentes partes de la aplicación (las páginas de información y contacto son muy similares
al "Proyecto web de Django" y no se vuelven a tratar).
8. Seleccione también el vínculo Administración en la barra de navegación, que muestra una pantalla de
inicio de sesión para demostrar que la interfaz administrativa está autorizada únicamente para los
administradores autenticados. Use las credenciales de superusuario y se le dirigirá a la página "/admin",
que está habilitada de forma predeterminada cuando se usa esta plantilla de proyecto.
class Poll(models.Model):
"""A poll object for use in the application views and repository."""
text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def total_votes(self):
"""Calculates the total number of votes for this poll."""
return self.choice_set.aggregate(Sum('votes'))['votes__sum']
def __unicode__(self):
"""Returns a string representation of a poll."""
return self.text
class Choice(models.Model):
"""A poll choice object for use in the application views and repository."""
poll = models.ForeignKey(Poll)
text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def votes_percentage(self):
"""Calculates the percentage of votes for this choice."""
total = self.poll.total_votes()
return self.votes / float(total) * 100 if total > 0 else 0
def __unicode__(self):
"""Returns a string representation of a choice."""
return self.text
Como puede ver, un modelo Poll mantiene una descripción en su campo text y una fecha de publicación en
pub_date . Estos campos son los únicos que existen para el elemento Poll de la base de datos. El campo
total_votes se calcula en tiempo de ejecución.
Un elemento Choice se relaciona con un elemento Poll a través del campo poll , contiene una descripción en
text y mantiene un recuento para esa opción en votes . El campo votes_percentage se calcula en tiempo de
ejecución y no se encuentra en la base de datos.
La lista completa de tipos de campo es CharField (texto limitado), TextField (texto ilimitado), EmailField ,
URLField , DateTimeField , IntegerField , DecimalField , BooleanField , ForeignKey y ManyToMany . Cada campo
tiene algunos atributos, como max_length . El atributo blank=True significa que el campo es opcional;
null=true significa que un valor es opcional. También hay un atributo choices que limita los valores a valores
en una matriz de tuplas de valor de datos/valor de visualización. (Consulte Model field reference [Modelado de
referencia de campo] en la documentación de Django).
Puede confirmar exactamente qué hay almacenado en la base de datos si examina el archivo db.sqlite3 del
proyecto con una herramienta como el explorador SQLite. En la base de datos, verá que un campo de clave
externa como poll en el modelo Choice se almacena como poll_id ; Django controla la asignación
automáticamente.
En general, trabajar con la base de datos en Django significa trabajar exclusivamente a través de los modelos
para que Django pueda administrar la base de datos subyacente en su nombre.
Inicialización de la base de datos a partir de samples.json
Inicialmente, la base de datos no contiene ningún sondeo. Puede usar la interfaz administrativa en la dirección
URL "/admin" para agregar sondeos manualmente, y también puede visitar la página "/seed" en el sitio de
ejecución para agregar a la base de datos los sondeos definidos en el archivo samples.json de la aplicación.
El archivo urls.py del proyecto de Django tiene un patrón de dirección URL agregado,
url(r'^seed$', app.views.seed, name='seed'), . La vista seed de app/views.py carga el archivo samples.json y
crea los objetos de modelo necesarios. A continuación, Django crea automáticamente los registros coincidentes
en la base de datos subyacente.
Observe el uso del decorador @login_required para indicar el nivel de autorización para la vista.
@login_required
def seed(request):
"""Seeds the database with sample polls."""
samples_path = path.join(path.dirname(__file__), 'samples.json')
with open(samples_path, 'r') as samples_file:
samples_polls = json.load(samples_file)
return HttpResponseRedirect(reverse('app:home'))
Para ver el efecto, ejecute la aplicación primero para ver que no existe todavía ningún sondeo. Luego, visite la
dirección URL "/seed" y, cuando la aplicación vuelva a la página de inicio, debería constatar que los sondeos ya
están disponibles. Una vez más, no dude en examinar el archivo db.sqlite3 sin formato con una herramienta
como el explorador de SQLite.
Pregunta: ¿Es posible inicializar la base de datos con la utilidad administrativa de Django?
Respuesta: Sí, puede usar el comando django-admin loaddata para realizar la misma tarea que la página de
inicialización de la aplicación. Cuando se trabaja en una aplicación web completa, puede usar una combinación
de los dos métodos: inicializar una base de datos desde la línea de comandos y, a continuación, convertir la
página de inicialización aquí en una API a la que puede enviar cualquier otro JSON arbitrario en lugar de confiar
en un archivo codificado de forma rígida.
2. Guarde el archivo, haga clic con el botón derecho en el proyecto DjangoPolls en el Explorador de
soluciones y seleccione el comando Python > Django Make Migrations (Hacer migraciones de
Django).
3. Seleccione Proyecto > Mostrar todos los archivos para ver el script recién generado en la carpeta
migrations , cuyo nombre empieza por 002_auto_ . Haga clic con el botón derecho en ese archivo y
seleccione Incluir en el proyecto . A continuación, puede seleccionar Proyecto > Mostrar todos los
archivos de nuevo para restaurar la vista original. (Vea la segunda pregunta a continuación para obtener
más información acerca de este paso).
4. Si lo desea, abra el archivo para examinar la manera en que Django refleja en script el cambio del estado
del modelo anterior al nuevo estado.
5. Haga clic de nuevo en el proyecto de Visual Studio con el botón derecho y seleccione Python > Django
Migrate (Migrar Django) para aplicar los cambios a la base de datos.
6. Si lo desea, abra la base de datos en un visor adecuado para confirmar el cambio.
En general, la característica de migración de Django implica que no tendrá que administrar nunca el esquema de
base de datos manualmente. Simplemente realice cambios en los modelos, genere los scripts de migración y
aplíquelos con el comando de migración.
Pregunta: ¿Qué sucede si olvido ejecutar el comando de migración después de realizar cambios en los
modelos?
Respuesta: Si los modelos no coinciden con lo que aparece en la base de datos, Django genera un error en
tiempo de ejecución con las excepciones apropiadas. Por ejemplo, si se olvida de migrar el modelo cambiado
que se muestra en la sección anterior, aparece el error no such column: app_poll.author :
.
Pregunta: ¿Por qué el Explorador de soluciones no muestra los scripts recién generados después de ejecutar
Django Make Migrations (Hacer migraciones de Django )?
Respuesta: Aunque los scripts recién generados existen en la carpeta app/migrations y se aplican cuando se
ejecuta el comando Migración de Django , no aparecen automáticamente en el Explorador de soluciones
porque no se han agregado al proyecto de Visual Studio. Para que sean visibles, seleccione primero el comando
de menú Proyecto > Mostrar todos los archivos o el botón de la barra de herramientas que se describe en
la siguiente imagen. Este comando hace que el Explorador de soluciones muestre todos los archivos en la
carpeta del proyecto, con un icono de contorno punteado para los elementos que no se han agregado al propio
proyecto. Haga clic con el botón derecho en los archivos que desea agregar y seleccione Incluir en el
proyecto , lo cual los incluye también en el control de código fuente en la siguiente confirmación.
Pregunta: ¿Puedo ver qué migraciones se aplicarían antes de ejecutar el comando de migración?
Respuesta: Sí, use el comando django-admin showmigrations.
Paso 6.4: Comprender las vistas y las plantillas de página creadas por
la plantilla de proyecto
La mayoría de las vistas generadas por la plantilla "Proyecto web de Django de sondeos", como las vistas de las
páginas de información y contacto, son muy similares a las vistas creadas por la plantilla "Proyecto web de
Django" con la que trabajó anteriormente en este tutorial. La diferencia en la aplicación Polls es que su página
principal utiliza los modelos, como hacen otras páginas añadidas para votar y ver los resultados de los sondeos.
Para comenzar, la primera línea de la matriz urlpatterns del proyecto de Django en el archivo urls.py es más
que un simple enrutamiento a una vista de la aplicación. Lo que hace es incorporar los cambios en el propio
archivo urls.py de la aplicación:
urlpatterns = [
url(r'^', include('app.urls', namespace="app")),
# ..
]
Así pues, el archivo app/urls.py contiene código de enrutamiento más interesante (con comentarios
explicativos):
urlpatterns = [
# Home page routing
url(r'^$',
app.views.PollListView.as_view(
queryset=Poll.objects.order_by('-pub_date')[:5],
context_object_name='latest_poll_list',
template_name='app/index.html',),
name='home'),
# Routing for a poll page, which use URLs in the form <poll_id>/,
# where the id number is captured as a group named "pk".
url(r'^(?P<pk>\d+)/$',
app.views.PollDetailView.as_view(
template_name='app/details.html'),
name='detail'),
Si no está familiarizado con las expresiones regulares más complejas que se usan aquí, puede pegar la
expresión en regex101.com para obtener una explicación en un lenguaje claro. (Necesitará convertir en escape
las barras diagonales / mediante la adición de una barra diagonal inversa \ delante; el escape no es
necesario en Python por el prefijo r de la cadena, que significa "raw" [sin formato]).
En Django, la sintaxis ?P<name>pattern crea un grupo denominado name , que se pasa como argumentos a
vistas en el orden en que aparecen. En el código mostrado anteriormente, PollsDetailView y PollsResultsView
reciben un argumento con nombre pk y app.views.vote recibe un argumento denominado poll_id .
También puede ver que la mayoría de las vistas no son simplemente referencias directas a una función de vista
en app/views.py. En su lugar, la mayoría hacen referencia a una clase de ese mismo archivo que se deriva de
django.views.generic.ListView o django.views.generic.DetailView . Las clases base proporcionan los métodos
as_view , que tienen un argumento template_name para identificar la plantilla. La clase base ListView , como se
usa para la página principal, también espera una propiedad queryset que contiene los datos y una propiedad
context_object_name con el nombre de la variable por la que desea hacer referencia a los datos en la plantilla;
en este caso, latest_poll_list .
Ahora puede examinar el elemento PollListView de la página principal, que se define como sigue en
app/views.py:
class PollListView(ListView):
"""Renders the home page, with a list of all polls."""
model = Poll
Todo lo que se hace aquí sirve para identificar el modelo con el que funciona la vista (Poll) y reemplazar el
método get_context_data para agregar los valores title y year al contexto.
El núcleo de la plantilla (templates/app/index.html) es como sigue:
{% if latest_poll_list %}
<table class="table table-hover">
<tbody>
{% for poll in latest_poll_list %}
<tr>
<td>
<a href="{% url 'app:detail' poll.id %}">{{poll.text}}</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<!-- ... other content omitted ... -->
{% endif %}
En pocas palabras, la plantilla recibe la lista de objetos de Polls en latest_poll_list y, a continuación, recorre en
iteración la lista para crear una fila de tabla que contiene un vínculo a cada sondeo por medio del valor text
del sondeo. En la etiqueta {% url %} , "app:detail" hace referencia al patrón de dirección URL de app/urls.py
denominado "detail", con poll.id como argumento. El efecto es que Django crea una dirección URL con el
patrón adecuado y lo utiliza para el vínculo. Esta pequeña prueba de futuro significa que puede cambiar ese
patrón de dirección URL en cualquier momento, y los vínculos generados se actualizan automáticamente para
coincidir.
Las clases PollDetailView y PollResultsView de app/views.py (que no se muestran aquí) son casi idénticas a
PollListView , a excepción de que se derivan de DetailView . Sus plantillas correspondientes,
app/templates/details.html y app/templates/results.html, colocan los campos adecuados de los modelos en
diferentes controles HTML. Algo único en details.html es que las opciones de un sondeo están incluidas en un
formulario HTML que, cuando se envía, realiza una operación POST a la dirección URL /vote. Como se ha visto
antes, este patrón de dirección URL se enruta a app.views.vote , que se implementa como sigue (observe el
argumento poll_id , que es de nuevo un grupo con nombre en la expresión regular utilizada en el
enrutamiento para esta vista):
En este caso, la vista no tiene su propia plantilla correspondiente, como las otras páginas. En su lugar, valida el
sondeo seleccionado, que muestra un error 404 si el sondeo no existe (solo en caso de que alguien escriba una
dirección URL como "vote/1a2b3c"). Luego se asegura de que la opción votada sea válida para el sondeo. Si no
es así, el bloque except simplemente representa la página de detalles de nuevo con un mensaje de error. Si la
opción es válida, la vista registra el voto y lo redirecciona a la página de resultados.
Paso 6.5: Crear una interfaz de administración personalizada
Los últimos datos de la plantilla de "Proyecto web de Django de sondeos" son las extensiones personalizadas
para la interfaz administrativa de Django personalizada, tal como se mostró anteriormente en el paso 6.1 de
este artículo. La interfaz predeterminada ofrece administración de usuario y grupo, pero nada más. La plantilla
de proyecto de sondeos agrega características que le permiten también administrar los sondeos.
En primer lugar, los patrones de dirección URL del archivo urls.py del proyecto Django tienen
url(r'^admin/', include(admin.site.urls)), incluido de manera predeterminada; el patrón "admin/doc" está
incluido también pero sin comentarios.
La aplicación contiene el archivo admin.py, que Django ejecuta automáticamente cuando se visita la interfaz
administrativa gracias a la inclusión de django.contrib.admin en la matriz INSTALLED_APPS de settings.py. El
código en ese archivo, tal y como se especifica en la plantilla del proyecto, es el siguiente:
class ChoiceInline(admin.TabularInline):
"""Choice objects can be edited inline in the Poll editor."""
model = Choice
extra = 3
class PollAdmin(admin.ModelAdmin):
"""Definition of the Poll editor."""
fieldsets = [
(None, {'fields': ['text']}),
('Date information', {'fields': ['pub_date']}),
]
inlines = [ChoiceInline]
list_display = ('text', 'pub_date')
list_filter = ['pub_date']
search_fields = ['text']
date_hierarchy = 'pub_date'
admin.site.register(Poll, PollAdmin)
Ya ha explorado por completo las plantillas "Proyecto web de Django en blanco", "Proyecto web de Django" y
"Proyecto web de Django de sondeos" en Visual Studio. Ha aprendido todos los elementos básicos de Django,
como el uso de vistas y plantillas, y ha explorado el enrutamiento, la autenticación y el uso de modelos de base
de datos. Ahora podrá crear una aplicación web propia con las vistas y los modelos que necesite.
La ejecución de una aplicación web en el equipo de desarrollo es solamente un paso en el proceso de poner la
aplicación a disposición de sus clientes. Los pasos siguientes pueden incluir las siguientes tareas:
Implementar la aplicación web en un servidor de producción, como Azure App Service. Consulte
Publicación en Azure App Service.
Personalice la página 404 mediante la creación de una plantilla denominada templates/404.html. Cuando
está presente, Django utiliza esta plantilla en lugar de la predeterminada. Para obtener más información,
consulte Error views (Vistas de error) en la documentación de Django.
Escriba pruebas unitarias en tests.py; las plantillas de proyecto de Visual Studio proporcionan puntos de
inicio para eso; además, puede encontrar más información en Writing your first Django app, part 5 -
testing (Escribir la primera aplicación de Django, parte 5: pruebas) y Testing in Django (Pruebas en
Django) en la documentación de Django.
Cambiar la aplicación de SQLite a un almacén de datos a nivel de producción como PostgreSQL, MySQL y
SQL Server (todos se pueden hospedar en Azure). Como se describe en When to use SQLite (Cuándo
usar SQLite) (sqlite.org), SQLite funciona perfectamente en sitios de tráfico bajo a medio, con menos de
100.000 visitas al día, pero no se recomienda en volúmenes más elevados. También está limitado a un
único equipo, por lo tanto no se puede usar en escenarios de varios servidores, como el equilibrio de
carga y la replicación geográfica. Para obtener información sobre la compatibilidad con Django otras
bases de datos, vea Configuración de la base de datos. También puede usar el SDK de Azure para Python
para trabajar con los servicios de almacenamiento de Azure, como tablas y blobs.
Configurar una canalización de implementación continua/integración continua en un servicio como
Azure DevOps. Además de funcionar con el control de código fuente (en Azure Repos, GitHub u otro
servicio), puede configurar un proyecto de Azure DevOps para que ejecute automáticamente pruebas
unitarias como requisito previo para la publicación y también configurar la canalización para
implementar en un servidor de ensayo para pruebas adicionales antes de implementar en producción.
Azure DevOps, además, se integra con soluciones de supervisión como App Insights y cierra todo el ciclo
con herramientas de planeación de Ágil. Para obtener más información, consulte Creación de una
canalización de CI/CD para Python con Azure DevOps Projects y también la Azure DevOps
Documentation (Documentación de Azure DevOps) general.
Tutorial: Introducción al marco web de Flask en
Visual Studio
13/12/2021 • 16 minutes to read
Flask es un marco de Python ligero para aplicaciones web que proporciona los elementos básicos para el
enrutamiento de direcciones URL y la representación de páginas.
Flask es un "micromarco" porque no proporciona de forma directa características como la validación de
formularios, la abstracción de bases de datos, la autenticación, etc. Dichas características se proporcionan en
paquetes especiales de Python llamados extensiones de Flask. Las extensiones se integran perfectamente con
Flask para que aparezcan como si formaran parte del mismo Flask. Por ejemplo, Flask por sí solo no
proporciona un motor de plantillas de página. La creación de plantillas se proporciona mediante extensiones
como Jinja y Jade, como se muestra en este tutorial.
En este tutorial, aprenderá a:
Crear un proyecto básico de Flask en un repositorio de Git con la plantilla "Proyecto web de Flask en blanco"
(paso 1)
Crear una aplicación de Flask con una página y representar esa página con una plantilla (paso 2)
Atender archivos estáticos, agregar páginas y usar la herencia de plantilla (paso 3)
Usar la plantilla Proyecto web de Flask para crear una aplicación con varias páginas y diseño con capacidad
de respuesta (paso 4)
Use la plantilla Proyecto web de Flask de sondeos para crear una aplicación de sondeos que use una serie de
opciones de almacenamiento (Azure Storage, MongoDB o memoria).
En el transcurso de estos pasos creará una única solución de Visual Studio que contendrá tres proyectos
independientes. Creará el proyecto mediante distintas plantillas de proyecto de Flask que se incluyen con Visual
Studio. Al mantener los proyectos en la misma solución, puede cambiar fácilmente entre distintos archivos para
compararlos.
En este tutorial, aprenderá a:
Crear un proyecto básico de Flask en un repositorio de Git con la plantilla "Proyecto web de Flask en blanco"
(paso 1)
Crear una aplicación de Flask con una página y representar esa página con una plantilla (paso 2)
Atender archivos estáticos, agregar páginas y usar la herencia de plantilla (paso 3)
Usar la plantilla Proyecto web de Flask para crear una aplicación con varias páginas y diseño con capacidad
de respuesta (paso 4)
Al seguir estos pasos, creará una única solución de Visual Studio que contendrá dos proyectos independientes.
Creará el proyecto mediante distintas plantillas de proyecto de Flask que se incluyen con Visual Studio. Al
mantener los proyectos en la misma solución, puede cambiar fácilmente entre distintos archivos para
compararlos.
NOTE
Este tutorial difiere del inicio rápido de Flask en el sentido de que obtendrá más información sobre Flask y sobre cómo
usar las distintas plantillas de proyecto de Flask que proporcionan un punto de partida más amplio para sus propios
proyectos. Por ejemplo, las plantillas de proyecto instalan automáticamente el paquete de Flask al crear un proyecto, en
lugar de tener que instalarlo manualmente, como se muestra en el inicio rápido.
Prerequisites
Visual Studio 2017 o posterior en Windows con las siguientes opciones:
La carga de trabajo Desarrollo de Python (pestaña Carga de trabajo del instalador). Para obtener
instrucciones, vea Instalación de la compatibilidad con Python en Visual Studio en Windows.
Git para Windows y Extensión de GitHub para Visual Studio en la pestaña Componentes
individuales de Herramientas de código .
Las plantillas de proyecto de Flask se incluyen con todas las versiones anteriores de las Herramientas de Python
para Visual Studio, aunque los detalles pueden diferir de lo que se describe en este tutorial.
El desarrollo de Python no es compatible actualmente en Visual Studio para Mac. En Mac y Linux, use la
extensión de Python en Visual Studio Code.
2. En los campos de la parte inferior del cuadro de diálogo, escriba la información siguiente (como se
muestra en el gráfico anterior) y, a continuación, seleccione Aceptar :
Nombre : establezca el nombre del proyecto de Visual Studio en BasicProject . Este nombre también
se usa para el proyecto de Flask.
Ubicación : especifique una ubicación en la que se va a crear la solución y el proyecto de Visual
Studio.
Nombre de la solución : establezca en LearningFlask , que es adecuado para la solución como
contenedor de varios proyectos de este tutorial.
Crear directorio para la solución : deje el valor predeterminado.
Crear nuevo repositorio Git : active esta opción (que está desactivada de forma predeterminada)
para que Visual Studio cree un repositorio Git local al generar la solución. Si no ve esta opción, ejecute
el instalador de Visual Studio y agregue Git para Windows y Extensión de GitHub para Visual
Studio en la pestaña Componentes individuales en Herramientas de código .
3. Tras un momento, Visual Studio muestra un cuadro de diálogo que indica Este proyecto necesita
paquetes externos (se muestra abajo). Este cuadro de diálogo aparece porque la plantilla incluye un
archivo requirements.txt que hace referencia al paquete Flask 1.x más reciente. (Active Mostrar
paquetes necesarios para ver las dependencias exactas).
4. Seleccione la opción Los instalaré de forma manual . Cree el entorno virtual en breve para asegurarse
de que se excluye del control de código fuente. (El entorno siempre puede crearse a partir de
requirements.txt).
NOTE
Si no selecciona Crear nuevo repositorio Git en el cuadro de diálogo Nuevo proyecto , los controles de Git
solo muestran un comando Agregar al control de código fuente que crea un repositorio local.
2. Seleccione el botón de cambios y Visual Studio abre su ventana de Team Explorer en la página
Cambios . Dado que el proyecto recién creado ya se ha confirmado automáticamente en el control de
código fuente, no verá cambios pendientes.
3. En la barra de estado de Visual Studio, haga clic en el botón de confirmaciones sin insertar (la flecha
arriba con 2 ) para abrir la página Sincronización en Team Explorer . Como tiene solo un repositorio
local, la página ofrece opciones sencillas para publicar el repositorio en repositorios remotos diferentes.
Puede elegir cualquier servicio que desee para sus propios proyectos. En este tutorial se muestra el uso
de GitHub, donde se mantiene el código de ejemplo completo del tutorial en el repositorio
Microsoft/python-sample-vs-learning-flask.
4. Al seleccionar cualquiera de los controles de Publicar , Team Explorer le pedirá más información. Por
ejemplo, al publicar el ejemplo para este tutorial, el propio repositorio tenía que haberse creado primero.
En este caso, la opción Inser tar en repositorio remoto se utilizó con la dirección URL del repositorio.
Si no tiene ningún repositorio, las opciones Publish to GitHub (Publicar en GitHub) e Inser tar en
Azure DevOps le permiten crear uno directamente desde Visual Studio.
5. Mientras esté trabajando en este tutorial, adopte la costumbre de usar los controles de Visual Studio
periódicamente para confirmar e insertar los cambios. Este tutorial se lo recuerda en los momentos
adecuados.
TIP
Para desplazarse rápidamente por Team Explorer , seleccione el encabezado (donde pone Changes o Push en las
imágenes anteriores) para ver un menú emergente de las páginas disponibles.
Pregunta: ¿Cuáles son algunas de las ventajas del uso de control de código fuente desde el principio de un
proyecto?
Respuesta: En primer lugar, usar el control de código fuente desde el principio, especialmente si también utiliza
un repositorio remoto, genera una copia de seguridad periódica externa del proyecto. A diferencia de mantener
un proyecto solo en un sistema de archivos local, el control de código fuente también proporciona un historial
de cambios completo y la capacidad de revertir con facilidad un único archivo o todo el proyecto a un estado
anterior. Ese historial de cambios ayuda a determinar la causa de regresiones (errores de prueba). Además, el
control de código fuente es esencial si varias personas trabajan en un proyecto, ya que administra las
sobrescrituras y ofrece solución para los conflictos. Por último, el control de código fuente, que es básicamente
una forma de automatización, facilita la automatización de las compilaciones, las pruebas y la administración de
versiones. Es realmente el primer paso para utilizar DevOps para un proyecto, y dado que las barreras de
entrada son tan bajas, realmente no hay ninguna razón que impida usar el control de código fuente desde el
principio.
Para obtener más información sobre el control de código fuente como automatización, consulte The Source of
Truth: The Role of Repositories in DevOps (El origen de la verdad, el rol de los repositorios en DevOps), un
artículo de MSDN Magazine escrito para aplicaciones móviles que se aplica también a las aplicaciones web.
Pregunta: ¿Puedo evitar que Visual Studio confirme automáticamente un nuevo proyecto?
Respuesta : Sí. Para deshabilitar la confirmación automática, vaya a la página Configuración de Team
Explorer , seleccione Git > Configuración global , desactive la opción Confirmar cambios tras la fusión
mediante combinación de forma predeterminada y, a continuación, seleccione Actualizar .
3. Seleccione Crear para aceptar los valores predeterminados. (Puede cambiar el nombre del entorno
virtual si lo desea, lo cual simplemente cambia el nombre de su subcarpeta, pero env es una convención
estándar).
4. Dé su consentimiento para los privilegios de administrador si se le solicita y tenga paciencia durante
unos minutos mientras Visual Studio descarga e instala los paquetes, lo que para Flask y sus
dependencias implica expandir cerca de miles de archivos en más de 100 subcarpetas. Puede ver el
progreso en la ventana Salida de Visual Studio. Mientras espera, consulte la sección Preguntas a
continuación. También puede ver una descripción de las dependencias de Flask en la página de
instalación de Flask (flask.pcocoo.org).
5. En los controles de Git de Visual Studio (en la barra de estado), seleccione el indicador de cambios (que
muestra 99* ) que abre la página Cambios en Team Explorer .
La creación del entorno virtual implica cientos de cambios, pero no es necesario que incluya ninguno de
ellos en el control de código fuente, dado que usted (o cualquier usuario que clone el proyecto) siempre
puede volver a crear el entorno a partir de requirements.txt.
Para excluir el entorno virtual, haga clic con el botón derecho en la carpeta env y seleccione Omitir
estos elementos locales .
6. Después de excluir el entorno virtual, los únicos cambios que faltan son en el archivo de proyecto y en
.gitignore. El archivo .gitignore contiene una entrada agregada para la carpeta del entorno virtual. Puede
hacer doble clic en el archivo para ver las diferencias.
7. Escriba un mensaje de confirmación y seleccione el botón Confirmar todo , a continuación, inserte las
confirmaciones en el repositorio remoto si lo desea.
Pregunta: ¿Por qué es conveniente crear un entorno virtual?
Respuesta: Un entorno virtual es una excelente manera de aislar las dependencias exactas de la aplicación. Este
tipo de aislamiento evita conflictos dentro de un entorno de Python global y contribuye a las pruebas y la
colaboración. Con el tiempo, a medida que desarrolle una aplicación, es inevitable que incorpore muchos
paquetes útiles de Python. Si mantiene los paquetes en un entorno virtual específico del proyecto, puede
actualizar fácilmente el archivo requirements.txt del proyecto que describe ese entorno, el cual se incluye en el
control de código fuente. Cuando el proyecto se copia en otros equipos, como los servidores de compilación, los
servidores de implementación y otros equipos de desarrollo, es fácil volver a crear el entorno con solo
requirements.txt (por este motivo no es necesario que el entorno esté en el control de código fuente). Para
obtener más información, vea Use virtual environments (Usar entornos virtuales).
Pregunta: ¿Cómo se quita un entorno virtual que ya se ha confirmado en el control de código fuente?
Respuesta: En primer lugar, edite el archivo .gitignore para excluir la carpeta: busque la sección del final con el
comentario # Python Tools for Visual Studio (PTVS) y agregue una línea nueva para la carpeta del entorno
virtual, como /BasicProject/env . (Dado que Visual Studio no muestra el archivo en el Explorador de
soluciones , ábralo directamente mediante el comando de menú Archivo > Abrir > Archivo . También puede
abrir el archivo desde Team Explorer : en la página Configuración , seleccione Configuración de
repositorios , vaya a la sección Archivos de omisión y de atributos y luego seleccione el vínculo Editar
junto a .gitignore ).
En segundo lugar, abra una ventana de comandos, vaya a la carpeta como BasicProject que contiene la carpeta
del entorno virtual, como env, y ejecute git rm -r env . A continuación, confirme esos cambios desde la línea de
comandos ( git commit -m 'Remove venv' ), o bien desde la página Cambios de Team Explorer .
Paso 1.4: Examinar el código reutilizable
1. Cuando termina la creación del proyecto, se ven la solución y el proyecto en el Explorador de
soluciones , donde el proyecto contiene solo dos archivos, app.py y requirements.txt:
2. Como se ha indicado antes, el archivo requirements.txt especifica la dependencia del paquete de Flask. La
presencia de este archivo es lo que le invita a crear un entorno virtual cuando empiece a crear el
proyecto.
3. El archivo app.py único consta de tres partes. La primera es una instrucción import para Flask, en la que
se crea una instancia de la clase Flask , que se asigna a la variable app , y luego se asigna una variable
wsgi_app (que es útil cuando se implementa en un host web, pero no se usa en este momento):
# Make the WSGI interface available at the top level so wfastcgi can get it.
wsgi_app = app.wsgi_app
4. La segunda parte, al final del archivo, es un fragmento de código opcional que inicia el servidor de
desarrollo de Flask con unos valores de host y de puerto específicos que se han tomado de las variables
de entorno (el valor predeterminado es localhost:5555):
if __name__ == '__main__':
import os
HOST = os.environ.get('SERVER_HOST', 'localhost')
try:
PORT = int(os.environ.get('SERVER_PORT', '5555'))
except ValueError:
PORT = 5555
app.run(HOST, PORT)
5. La tercera es un fragmento de código que asigna una función a una ruta de dirección URL, lo que
significa que la función proporciona el recurso identificado por la dirección URL. Las rutas se definen con
el decorador @app.route de Flask, cuyo argumento es la dirección URL relativa de la raíz del sitio. Como
puede ver en el código, aquí la función solo devuelve una cadena de texto, que basta para representar un
explorador. En los pasos siguientes se representan páginas más enriquecidas con HTML.
@app.route('/')
def hello():
"""Renders a sample page."""
return "Hello World!"
@app.route('/')
@app.route('/hello')
def hello():
"""Renders a sample page."""
return "Hello World!"
Pregunta: ¿Cómo trabaja Flask con las rutas de dirección URL de variables y con los parámetros de consulta?
Respuesta: En una ruta, las variables se marcan con <variable_name> y Flask pasa la variable a la función usando
un argumento con nombre en la ruta de acceso de la dirección URL. Por ejemplo, una ruta con el formato
/hello/<name> genera un argumento de cadena a la función denominado name . Los parámetros de consulta
también están disponibles mediante la propiedad request.args , en concreto mediante el método
request.args.get . Para obtener más información, vea la información sobre el objeto Request de la
documentación de Flask.
# URL: /hello/<name>?message=Have%20a%20nice%20day
@app.route('/hello/<name>')
def hello(name):
msg = request.args.get('message','')
return "Hello " + name + "! "+ msg + "."
Para cambiar el tipo, anteponga la variable con int , float , path (que acepta barras diagonales para delinear
los nombres de las carpetas) y uuid . Para obtener información detallada, vea las reglas de las variables en la
documentación de Flask.
Pregunta: ¿Puede Visual Studio generar un archivo requirements.txt a partir de un entorno virtual después de
instalar otros paquetes?
Respuesta : Sí. Expanda el nodo Entornos de Python , haga clic con el botón derecho en su entorno virtual y
seleccione el comando Generar requirements.txt . Es conveniente usar este comando periódicamente a
medida que modifica el entorno, y confirmar los cambios de requirements.txt en el control de código fuente
junto con cualquier otro cambio de código que dependa de ese entorno. Si configura la integración continua en
un servidor de compilación, debe generar el archivo y confirmar los cambios cada vez que se modifique el
entorno.
2. Cualquiera de los comandos asigna un número de puerto aleatorio a la variable de entorno PORT y,
luego, ejecuta python app.py . El código inicia la aplicación usando ese puerto en el servidor de desarrollo
de Flask. Si Visual Studio indica No se pudo iniciar el depurador con un mensaje relacionado con la
falta de un archivo de inicio, haga clic con el botón derecho en app.py en el Explorador de soluciones
y seleccione Establecer como archivo de inicio .
3. Al iniciar el servidor, verá una ventana de consola abierta en la que se muestra el registro del servidor.
Luego, Visual Studio abre automáticamente un explorador en http://localhost:<port> , donde debería
ver el mensaje que se representa mediante la función hello :
4. Cuando haya terminado, detenga el servidor cerrando la ventana de la consola o con el comando
Depurar > Detener depuración en Visual Studio.
Pregunta: ¿Cuál es la diferencia entre el uso de los comandos de menú de depuración y los comandos de
servidor en el submenú de Python del proyecto?
Respuesta: Además de con los comandos de menú de Depurar y los botones de la barra de herramientas,
también puede iniciar el servidor mediante los comandos Python > Run ser ver (Ejecutar servidor) o Python
> Run debug ser ver (Iniciar el servidor de depuración) en el menú contextual del proyecto. Ambos comandos
abren una ventana de consola en la que se ve la dirección URL local (localhost:port) del servidor en ejecución.
Sin embargo, debe abrir manualmente un explorador con esa dirección URL, y la ejecución del servidor de
depuración no inicia automáticamente el depurador de Visual Studio. Puede adjuntar un depurador al proceso
en ejecución más adelante, si lo desea, mediante el comando Depurar > Asociar al proceso .
Pasos siguientes
En este momento, el proyecto básico de Flask contiene el código de inicio y el código de página en el mismo
archivo. Es mejor separar estos dos elementos y separar también el código HTML y los datos mediante
plantillas.
Creación de una aplicación de Flask con vistas y plantillas de página
import HelloFlask.views
3. En la carpeta HelloFlask, cree un archivo denominado views.py con el siguiente contenido. El nombre
views.py es importante porque se ha usado import HelloFlask.views en __init__.py. Verá un error en
tiempo de ejecución si los nombres no coinciden.
@app.route('/')
@app.route('/home')
def home():
return "Hello Flask!"
Además de cambiar el nombre de la función y la ruta a home , este código contiene el código de
representación de la página de app.py e importa el objeto app que se declara en __init__.py.
4. Cree una subcarpeta en HelloFlask denominada templates, que de momento estará vacía.
5. En la carpeta raíz del proyecto, cambie el nombre de app.py por runserver.py y haga coincidir el
contenido con el siguiente código:
import os
from HelloFlask import app # Imports the code from HelloFlask/__init__.py
if __name__ == '__main__':
HOST = os.environ.get('SERVER_HOST', 'localhost')
try:
PORT = int(os.environ.get('SERVER_PORT', '5555'))
except ValueError:
PORT = 5555
app.run(HOST, PORT)
7. Seleccione Depurar > Iniciar depuración (F5 ) o use el botón Ser vidor web de la barra de
herramientas (el explorador puede variar) para que se inicie la aplicación y se abra un explorador. Pruebe
las rutas de dirección URL / y /home.
8. También puede establecer puntos de interrupción en distintas partes del código y reiniciar la aplicación
para seguir la secuencia de inicio. Por ejemplo, establezca un punto de interrupción en las primeras líneas
de runserver.py y HelloFlask_ init _.py y en la línea return "Hello Flask!" de views.py. Luego, reinicie la
aplicación (Depurar > Reiniciar , Ctrl +Mayús +F5 , o el botón de la barra de herramientas que se
muestra a continuación) y recorra el código (F10 ) o ejecútelo desde cada punto de interrupción mediante
F5 .
@app.route('/')
@app.route('/home')
def home():
now = datetime.now()
formatted_now = now.strftime("%A, %d %B, %Y at %X")
return html_content
2. Ejecute la aplicación y actualice la página varias veces para comprobar que se actualice la fecha y la hora.
Cuando haya terminado, detenga la aplicación.
3. Para convertir la representación de la página para usar una plantilla, cree un archivo denominado
index.html en la carpeta templates con el siguiente contenido, donde {{ content }} es un marcador de
posición o un token de reemplazo (también denominado variable de plantilla) para el que se proporciona
un valor en el código:
<html>
<head><title>Hello Flask</title></head>
<body>
{{ content }}
</body>
</html>
4. Modifique la función home para usar render_template para cargar la plantilla y proporcione un valor
para "content", lo cual se hace usando un argumento con nombre que coincida con el nombre del
marcador de posición. Flask busca automáticamente plantillas en la carpeta templates, así que la ruta de
acceso a la plantilla es relativa a esa carpeta:
def home():
now = datetime.now()
formatted_now = now.strftime("%A, %d %B, %Y at %X")
return render_template(
"index.html",
content = "<strong>Hello, Flask!</strong> on " + formatted_now)
5. Ejecute la aplicación para ver los resultados y observe que el HTML insertado del valor content no se
representa como HTML porque el motor de plantillas (Jinja) efectúa un escape automático del contenido
HTML. El escape automático evita vulnerabilidades accidentales en los ataques por inyección de código:
los desarrolladores suelen recopilar información de una página y emplearla como valor en otra mediante
un marcador de posición de plantilla. El escape también sirve como recordatorio de que es mejor
conservar el HTML fuera del código.
En consecuencia, compruebe que templates\index.html contenga distintos marcadores de posición para
cada sección de los datos dentro del marcado:
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<strong>{{ message }}</strong>{{ content }}
</body>
</html>
Luego, actualice la función home para proporcionar valores para todos los marcadores de posición:
def home():
now = datetime.now()
formatted_now = now.strftime("%A, %d %B, %Y at %X")
return render_template(
"index.html",
title = "Hello Flask",
message = "Hello, Flask!",
content = " on " + formatted_now)
7. Confirme los cambios en el control de código fuente y actualice su repositorio remoto, si quiere, tal y
como se describe en el paso 2-1.
Pregunta: Estoy utilizando un certificado X.509 con mi servicio y obtengo un
System.Security.Cryptography.CryptographicException. ¿Las plantillas de página deben estar en un archivo
independiente?
Respuesta: Aunque las plantillas normalmente se guardan en archivos HTML independientes, también se puede
usar una plantilla insertada. No obstante, se recomienda usar un archivo independiente para mantener una
separación clara entre código y marcado.
Pregunta: Estoy utilizando un certificado X.509 con mi servicio y obtengo un
System.Security.Cryptography.CryptographicException. ¿Deben usar las plantillas la extensión de archivo
.html?
Respuesta: La extensión .html para los archivos de plantilla de página es completamente opcional, ya que
siempre puede identificar la ruta de acceso exacta relativa al archivo en el primer argumento de la función
render_template . Pero Visual Studio (y otros editores) normalmente ofrecen características como la finalización
de código y el coloreado de sintaxis con archivos .html, lo que compensa con creces el hecho de que las
plantillas de página no sean estrictamente HTML.
De hecho, cuando está trabajando con un proyecto de Flask, Visual Studio detecta automáticamente si el archivo
HTML que está editando es realmente una plantilla de Flask y proporciona algunas características de
autocompletar. Por ejemplo, al comenzar a escribir un comentario de plantilla de página de Flask, {# , Visual
Studio proporciona automáticamente los caracteres #} de cierre. Los comandos Selección con comentarios
y Selección sin comentarios (en el menú Editar > Opciones avanzadas y en la barra de herramientas)
también utilizan comentarios de plantilla en lugar de comentarios HTML.
Pregunta: Estoy utilizando un certificado X.509 con mi servicio y obtengo un
System.Security.Cryptography.CryptographicException. ¿Las plantillas se pueden organizar en más
subcarpetas?
Respuesta: Sí, se pueden usar subcarpetas y luego hacer referencia a la ruta de acceso relativa en templates en
las llamadas a render_template . Es una excelente manera de crear espacios de nombres de forma efectiva para
las plantillas.
Pasos siguientes
Atender archivos estáticos, agregar páginas y usar la herencia de plantilla
Paso anterior : Crear una aplicación de Flask con vistas y plantillas de página
En los pasos anteriores de este tutorial, ha aprendido a crear una aplicación de Flask mínima con una sola
página HTML independiente. Pero las aplicaciones web modernas están formadas normalmente por muchas
páginas y usan recursos compartidos, como archivos CSS y JavaScript, para proporcionar un comportamiento y
un estilo uniformes.
En este paso aprenderá lo siguiente:
Usar plantillas de elementos de Visual Studio para agregar rápidamente nuevos archivos de distintos tipos
con práctico código reutilizable (paso 3.1)
Atender archivos estáticos desde el código (paso 3-2, opcional)
Agregar páginas adicionales a la aplicación (paso 3.3)
Usar la herencia de plantilla para crear un encabezado y una barra de navegación que se use en varias
páginas (paso 3.4)
.message {
font-weight: 600;
color: blue;
}
4. Reemplace el contenido del archivo templates/index.html de la aplicación por el código siguiente, que
reemplaza el elemento <strong> usado en el paso 2 por un <span> que hace referencia a la clase de
estilo message . El uso de una clase de estilo de este modo ofrece mucha más flexibilidad al aplicar estilo
al elemento.
<html>
<head>
<title>{{ title }}</title>
<link rel="stylesheet" type="text/css" href="/static/site.css" />
</head>
<body>
<span class="message">{{ message }}</span>{{ content }}
</body>
</html>
5. Ejecute el proyecto y observe los resultados. Detenga la aplicación cuando haya finalizado y confirme los
cambios en el control de código fuente si quiere (como se explica en paso 2).
Atender un archivo estático desde el código
Flask proporciona una función denominada serve_static_file a la que puede llamar desde el código para
hacer referencia a cualquier archivo de la carpeta static del proyecto. El siguiente proceso crea un punto de
conexión de API simple que devuelve un archivo de datos estáticos.
1. Si aún no lo ha hecho, cree una carpeta static: en el Explorador de soluciones , haga clic con el botón
derecho en la carpeta HelloFlask del proyecto de Visual Studio, seleccione Agregar > Nueva carpeta y
asigne a la carpeta el nombre static .
2. En la carpeta static, cree un archivo de datos JSON estático denominado data.json con el siguiente
contenido (que son datos de ejemplo carentes de significado):
{
"01": {
"note" : "Data is very simple because we're demonstrating only the mechanism."
}
}
3. En views.py, agregue una función con la ruta /api/data que devuelva el archivo de datos estático
mediante el método send_static_file :
@app.route('/api/data')
def get_data():
return app.send_static_file('data.json')
4. Ejecute la aplicación y vaya al punto de conexión /api/data para comprobar que se ha devuelto el archivo
estático. Cuando haya terminado, detenga la aplicación.
Pregunta: ¿Hay alguna convención para organizar los archivos estáticos?
Respuesta: Puede agregar otros archivos HTML, CSS y JavaScript a la carpeta static como quiera. Una forma
habitual de organizar los archivos estáticos es crear subcarpetas denominadas fonts, scripts y content (para las
hojas de estilos y cualquier otro archivo).
Pregunta: ¿Cómo gestiono las variables de dirección URL y los parámetros de consulta en una API?
Respuesta: Vea la respuesta en el paso 1-4 de la Pregunta: ¿Cómo trabaja Flask con las rutas de dirección URL de
variables y con los parámetros de consulta?
TIP
Si el comando Nuevo elemento no aparece en el menú Agregar , asegúrese de que ha detenido la aplicación
para que Visual Studio salga del modo de depuración.
3. Abra el archivo views.py de la aplicación y agregue una función denominada about que use la plantilla:
@app.route('/about')
def about():
return render_template(
"about.html",
title = "About HelloFlask",
content = "Example app page for Flask.")
4. Abra el archivo templates/index.html y agregue la siguiente línea dentro del elemento <body> que se va
a vincular a la página Acerca de (de nuevo, reemplace este vínculo por una barra de navegación en el
paso 3-4):
<div><a href="about">About</a></div>
5. Guarde todos los archivos con el comando de menú Archivo > Guardar todo o simplemente presione
Ctrl +Mayús +S . (Técnicamente, este paso no es necesario porque la ejecución del proyecto en Visual
Studio guarda los archivos automáticamente. No obstante, es un comando que viene bien conocer).
6. Ejecute el proyecto para observar los resultados y compruebe la navegación entre las páginas. Detenga la
aplicación cuando haya finalizado.
Pregunta: ¿Importa en Flask el nombre de una función de página?
Respuesta: No, porque es el decorador @app.route el que determina las direcciones URL para las que Flask
llama a la función para generar una respuesta. Los desarrolladores suelen hacer coincidir el nombre de la
función con la ruta, aunque no es algo obligatorio.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>{{ title }}</title>
<link rel="stylesheet" type="text/css" href="/static/site.css" />
</head>
<body>
<div class="navbar">
<a href="/" class="navbar-brand">Hello Flask</a>
<a href="{{ url_for('home') }}" class="navbar-item">Home</a>
<a href="{{ url_for('about') }}" class="navbar-item">About</a>
</div>
<div class="body-content">
{% block content %}
{% endblock %}
<hr/>
<footer>
<p>© 2018</p>
</footer>
</div>
</body>
</html>
2. Agregue los estilos siguientes al archivo static/site.css de la aplicación (en este tutorial no se está
intentando mostrar un diseño con capacidad de respuesta; estos estilos simplemente sirven para generar
un resultado interesante):
.navbar {
background-color: lightslategray;
font-size: 1em;
font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-
serif;
color: white;
padding: 8px 5px 8px 5px;
}
.navbar a {
text-decoration: none;
color: inherit;
}
.navbar-brand {
font-size: 1.2em;
font-weight: 600;
}
.navbar-item {
font-variant: small-caps;
margin-left: 30px;
}
.body-content {
padding: 5px;
font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
{% extends "layout.html" %}
{% block content %}
<span class="message">{{ message }}</span>{{ content }}
{% endblock %}
4. Modifique templates/about.html para hacer también referencia a la plantilla base y reemplace el bloque
de contenido:
{% extends "layout.html" %}
{% block content %}
{{ content }}
{% endblock %}
5. Ejecute el servidor para observar los resultados. Cierre el servidor cuando haya finalizado.
6. Dado que ha efectuado cambios sustanciales en la aplicación, vuelve a ser un buen momento para
confirmar los cambios en el control de código fuente.
Pasos siguientes
Puede profundizar más con estos recursos:
Publicación de la aplicación web en Azure App Service
Para ver más funcionalidades de las plantillas de Jinja, como el flujo de control, vea la documentación del
diseñador de plantillas de Jinja ( jinja.pocoo.org)
Para obtener información detallada sobre cómo usar url_for , vea url_for en la documentación de objetos
de aplicación de Flask (flask.pocoo.org)
Código fuente del tutorial en GitHub: Microsoft/python-sample-vs-learning-flask
Proyectos de Python en Visual Studio
13/12/2021 • 15 minutes to read
Las aplicaciones de Python suelen definirse usando solo carpetas y archivos, pero esta estructura se puede
complicar a medida que aplicaciones se van haciendo cada vez más grandes y pueden llegar a afectar a los
archivos generados automáticamente, a JavaScript para aplicaciones web, etc. Un proyecto de Visual Studio le
ayuda a administrar esta complejidad. El proyecto (un archivo .pyproj) identifica todos los archivos de origen y
de contenido asociados al proyecto, contiene información de compilación para cada archivo, mantiene la
información para integrarse con sistemas de control de código fuente y le ayuda a organizar la aplicación en
componentes lógicos.
Además, los proyectos siempre se administran dentro de una solución de Visual Studio, que puede contener
cualquier número de proyectos que pueden hacerse referencia entre sí. Por ejemplo, un proyecto de Python
puede hacer referencia a un proyecto de C++ que implementa un módulo de extensión. Con esta relación,
Visual Studio genera automáticamente el proyecto de C++ (si es necesario) al iniciar la depuración del proyecto
de Python. (Para obtener información general, consulte Soluciones y proyectos en Visual Studio).
Visual Studio proporciona numerosas plantillas de proyecto de Python para configurar rápidamente una serie
de estructuras de aplicación, incluida una plantilla para crear un proyecto a partir de un árbol de carpetas
existente y una plantilla para crear un proyecto vacío y limpio. Consulte la sección Plantillas de proyecto para ver
un índice.
TIP
Visual Studio 2019 permite abrir una carpeta que contiene código de Python y ejecutar ese código sin crear archivos de
solución y proyecto de Visual Studio. Para obtener más información, vea Inicio rápido: Apertura y ejecución de código de
Python en una carpeta. Sin embargo, usar un archivo del proyecto trae ventajas, como se explica en esta sección.
TIP
Sin un proyecto, todas las versiones de Visual Studio funcionan bien con el código de Python. Por ejemplo, puede abrir un
archivo de Python por sí mismo y disfrutar de las funciones de autocompletar, IntelliSense y depuración. Para ello, haga
clic con el botón derecho en el editor y seleccione Iniciar con depurar . Como dicho código siempre usa el entorno
global predeterminado, puede ver finalizaciones incorrectas o errores si el código está pensado para un entorno diferente.
Además, Visual Studio analiza todos los archivos y paquetes de la carpeta desde la que se abrió el archivo único, lo que
podría consumir mucho tiempo de CPU.
Se puede crear fácilmente un proyecto de Visual Studio a partir de código existente, como se describe en Creación de un
proyecto a partir de archivos existentes.
Deep Dive: Use source control with Python projects (Profundización: uso del control de código fuente
con proyectos de Python).
TIP
Si quita el archivo de inicio seleccionado de un proyecto y no selecciona uno nuevo, Visual Studio no sabrá con que
archivo de Python empezar al intentar ejecutar el proyecto. En este caso, Visual Studio 2017, versión 15.6 y posteriores,
muestra un error; con las versiones anteriores, se abre una ventana de salida con el intérprete de Python en ejecución o
verá la ventana de salida aparecer pero desaparecer a continuación casi de inmediato. Si se produce alguno de estos
comportamientos, compruebe que tiene un archivo de inicio asignado.
Si desea mantener abierta la ventana de salida por cualquier motivo, haga clic con el botón derecho en el proyecto,
seleccione Propiedades , seleccione la pestaña Depurar y, después, agregue -i al campo Argumentos del
intérprete . Este argumento hace que el intérprete entre en modo interactivo una vez que se haya finalizado un
programa, con lo que la ventana se mantendrá abierta hasta que pulse Ctrl+Z > Entrar para salir.
Un proyecto nuevo siempre está asociado al entorno de Python global predeterminado. Para asociar el proyecto
a otro entorno (incluidos los entornos virtuales), haga clic con el botón derecho en el nodo Python
Environments (Entornos de Python) del proyecto, seleccione Add/Remove Python Environments (Agregar
o quitar entornos de Python) y seleccione los que desee.
Un proyecto nuevo siempre está asociado al entorno de Python global predeterminado. Para asociar el proyecto
con un entorno distinto (incluidos los entornos virtuales), haga clic con el botón derecho en el nodo Entornos
de Python del proyecto, seleccione Agregar entorno… y seleccione el que quiera. También puede usar el
control desplegable de entornos de la barra de herramientas para seleccionar un entorno o agregar uno al
proyecto.
Para cambiar el entorno activo, haga clic con el botón derecho en el entorno que quiera en el Explorador de
soluciones y seleccione Activar entorno como se muestra a continuación. Para más información, vea
Selección de un entorno para un proyecto.
Plantillas de proyecto
Visual Studio ofrece varias maneras de configurar un proyecto de Python, desde cero o a partir de código
existente. Para usar una plantilla, seleccione el comando de menú Archivo > Nuevo > Proyecto o haga clic
con el botón derecho en la solución en el Explorador de soluciones y seleccione Agregar > Nuevo
proyecto . Ambas acciones abrirán el cuadro de diálogo Nuevo proyecto que se muestra a continuación. Para
ver plantillas específicas de Python, busque "Python" o seleccione el nodo Instalado > Python :
En la tabla siguiente se muestra un resumen de las plantillas disponibles en Visual Studio 2017 (no todas las
plantillas están disponibles en todas las versiones anteriores):
P L A N T IL L A DESC RIP C IÓ N
Desde código de Python existente Crea un proyecto de Visual Studio a partir de código Python
existente en una estructura de carpetas.
Aplicación de WPF de IronPython Estructura de proyecto que usa IronPython con archivos
XAML de Windows Presentation Foundation para la interfaz
de usuario de la aplicación. Visual Studio proporciona un
diseñador de IU XAML, el código subyacente se puede
escribir en Python y la aplicación se ejecuta sin mostrar una
consola.
Aplicación de Windows Forms de IronPython Estructura de proyecto que usa IronPython con la interfaz de
usuario creada mediante código con Windows Forms. La
aplicación se ejecuta sin mostrar una consola.
Aplicación en segundo plano (IoT) Admite la implementación de proyectos de Python para que
se ejecuten como servicios en segundo plano en
dispositivos. Visite el Centro de desarrollo de Windows IoT
para más información.
Módulo de extensión de Python Esta plantilla aparece en Visual C++ si ha instalado las
herramientas de desarrollo nativo Python con la carga
de trabajo de Python en Visual Studio 2017 o versiones
posteriores (vea Instalación). Proporciona la estructura básica
de un archivo DLL de extensión de C++, similar a lo que se
describe en Creación de una extensión de C++ para Python.
En la tabla siguiente se resumen las plantillas disponibles en Visual Studio 2019 (no todas las plantillas están
disponibles en todas las versiones anteriores):
P L A N T IL L A DESC RIP C IÓ N
Desde código de Python existente Crea un proyecto de Visual Studio a partir de código Python
existente en una estructura de carpetas.
Aplicación de WPF de IronPython Estructura de proyecto que usa IronPython con archivos
XAML de Windows Presentation Foundation para la interfaz
de usuario de la aplicación. Visual Studio proporciona un
diseñador de IU XAML, el código subyacente se puede
escribir en Python y la aplicación se ejecuta sin mostrar una
consola.
Aplicación de Windows Forms de IronPython Estructura de proyecto que usa IronPython con la interfaz de
usuario creada mediante código con Windows Forms. La
aplicación se ejecuta sin mostrar una consola.
P L A N T IL L A DESC RIP C IÓ N
Aplicación en segundo plano (IoT) Admite la implementación de proyectos de Python para que
se ejecuten como servicios en segundo plano en
dispositivos. Visite el Centro de desarrollo de Windows IoT
para más información.
Módulo de extensión de Python Esta plantilla aparece en Visual C++ si ha instalado las
herramientas de desarrollo nativo Python con la carga
de trabajo de Python en Visual Studio 2017 o versiones
posteriores (vea Instalación). Proporciona la estructura básica
de un archivo DLL de extensión de C++, similar a lo que se
describe en Creación de una extensión de C++ para Python.
NOTE
Dado que Python es un lenguaje interpretado, los proyectos de Python en Visual Studio no producen un archivo
ejecutable independiente al igual que otros proyectos de lenguaje compilado (C#, por ejemplo). Para obtener más
información, consulte Preguntas y respuestas.
IMPORTANT
El proceso que se describe aquí no mueve ni copia los archivos de código fuente originales. Si quiere trabajar con una
copia, duplique primero la carpeta.
5. Seleccione la ubicación en la que se va a guardar el archivo del proyecto (un archivo .pyproj en disco). Si
procede, también puede incluir la detección automática de entornos virtuales y personalizar el proyecto
para marcos web diferentes. Si no conoce estas opciones, déjelas con los valores predeterminados.
6. Haga clic en Finalizar . Visual Studio creará el proyecto y lo abrirá en el Explorador de soluciones . Si
quiere mover el archivo .pyproj a otra parte, selecciónelo en el Explorador de soluciones y elija
Archivo > Guardar como . Esta acción actualiza las referencias de archivo en el proyecto pero no mueve
ningún archivo de código.
7. Para establecer otro archivo de inicio, localice el archivo en el Explorador de soluciones , haga clic con
el botón derecho y seleccione Establecer como archivo de inicio .
Archivos vinculados
Los archivos vinculados son archivos que se incorporan a un proyecto pero normalmente residen fuera de las
carpetas de proyecto de la aplicación. Aparecen en el Explorador de soluciones como archivos normales con
un icono de acceso directo superpuesto:
Los archivos vinculados se especifican en el archivo .pyproj mediante el elemento <Compile Include="..."> . Los
archivos vinculados son implícitos si usan una ruta de acceso relativa fuera de la estructura de directorios o
explícitos si usan rutas de acceso dentro del Explorador de soluciones :
<Compile Include="..\test2.py">
<Link>MyProject\test2.py</Link>
</Compile>
Referencias
Los proyectos de Visual Studio admiten la incorporación de referencias a proyectos y extensiones, que aparecen
bajo el nodo References del Explorador de soluciones :
Las referencias de extensión normalmente indican dependencias entre proyectos y se utilizan para proporcionar
IntelliSense en tiempo de diseño o vinculación en tiempo de compilación. Los proyectos de Python usan
referencias de manera similar pero, debido a la naturaleza dinámica de Python, se utilizan principalmente en
tiempo de diseño para mejorar la funcionalidad IntelliSense. También se pueden utilizar para implementación en
Microsoft Azure para instalar dependencias adicionales.
Módulos de extensión
Una referencia a un archivo .pyd habilita IntelliSense para el módulo generado. Visual Studio carga el archivo
.pyd en el intérprete de Python y realiza introspecciones en sus tipos y funciones. También intenta analizar las
cadenas de documento para que las funciones proporcionen ayuda para las firmas.
Si en cualquier momento el módulo de extensión se actualiza en el disco, Visual Studio vuelve a analizarlo en
segundo plano. Esta acción no afecta al comportamiento en tiempo de ejecución, pero algunas finalizaciones no
están disponibles hasta que se complete el análisis.
Puede que también necesite agregar una ruta de acceso de búsqueda a la carpeta que contiene el módulo.
Proyectos de .NET
Cuando trabaje con IronPython, puede agregar referencias a ensamblados de .NET para habilitar IntelliSense.
Para los proyectos de .NET de la solución, haga clic con el botón derecho en el nodo References en el proyecto
de Python, seleccione Agregar referencia , seleccione la pestaña Proyectos y vaya al proyecto que desee. Para
archivos DLL que haya descargado por separado, seleccione la pestaña Examinar y vaya al archivo DLL que
desee.
Dado que las referencias de IronPython no están disponibles hasta que se realiza una llamada a
clr.AddReference('<AssemblyName>') , también necesita agregar una llamada clr.AddReference apropiada al
ensamblado, normalmente al principio del código. Por ejemplo, el código creado por la plantilla de proyecto
IronPython Windows Forms Application (Aplicación de Windows Forms en IronPython) de Visual Studio
incluye dos llamadas en la parte superior del archivo:
import clr
clr.AddReference('System.Drawing')
clr.AddReference('System.Windows.Forms')
Proyectos de WebPI
Puede agregar referencias a entradas de producto de WebPI para la implementación en Microsoft Azure Cloud
Services donde puede instalar componentes adicionales a través de la fuente de WebPI. De manera
predeterminada, la fuente que se muestra es específica de Python e incluye Django, CPython y otros
componentes principales. También puede seleccionar su propia fuente tal como se muestra a continuación. Al
publicar en Microsoft Azure, una tarea de configuración instala todos los productos a los que se hace referencia.
IMPORTANT
Los proyectos de WebPI no están disponibles en Visual Studio 2017 o Visual Studio 2019.
Plantillas de proyecto de aplicación web para
Python
13/12/2021 • 9 minutes to read
Python en Visual Studio admite el desarrollo de proyectos web en los marcos Bottle, Flask y Django mediante
plantillas de proyecto y un iniciador de depuración que puede configurarse para controlar varios marcos. Estas
plantillas incluyen un archivo requirements.txt para declarar las dependencias necesarias. Al crear un proyecto a
partir de alguna de estas plantillas, Visual Studio le pide que instale esos paquetes (vea Instalar requisitos de
proyecto más adelante en este artículo).
También puede usar la plantilla Proyecto web genérica para otras plataformas como Pyramid. En este caso, no
se instala ningún marco con la plantilla. En su lugar, instale los paquetes necesarios en el entorno que va a usar
para el proyecto (vea Ventana Entornos de Python - Pestaña Paquetes).
Para obtener información sobre la implementación de una aplicación web de Python en Azure, vea Publicar en
Azure App Service.
La plantilla genérica Proyecto web , que se ha mencionado anteriormente, solo ofrece un proyecto vacío de
Visual Studio sin código ni supuestos, aparte de que se trata de un proyecto de Python.
La plantilla genérica Proyecto web , que se ha mencionado anteriormente, solo ofrece un proyecto vacío de
Visual Studio sin código ni supuestos, aparte de que se trata de un proyecto de Python.
Todas las demás plantillas se basan en los marcos web de Bottle, Flask o Django y se dividen en tres grupos
generales, como se describe en las secciones siguientes. Las aplicaciones creadas con cualquiera de estas
plantillas contienen código suficiente para ejecutar y depurar la aplicación en local. Cada una de ellas ofrece el
objeto de aplicación WSGI necesario (python.org) para el uso con servidores web de producción.
Grupo en blanco
Todas las plantillas Proyecto web de <framework> en blanco crean un proyecto con más o menos el
código reutilizable mínimo y las dependencias necesarias declaradas en un archivo requirements.txt.
P L A N T IL L A DESC RIP T IO N
Proyecto web de Bottle en blanco Genera una aplicación mínima en app.py con una página
principal de / y una página /hello/<name> que devuelve
<name> mediante una plantilla de página insertada muy
breve.
Proyecto web de Django en blanco Genera un proyecto de Django con la estructura del sitio
principal de Django pero sin ninguna aplicación de Django.
Para obtener más información, vea Plantilla de proyecto web
de Django y Tutorial: Introducción al marco web de Django
en Visual Studio.
Proyecto web de Flask en blanco Genera un aplicación mínima con una única página "Hola
mundo" para / . Esta aplicación es similar al resultado
obtenido tras seguir los pasos detallados descritos en Inicio
rápido: usar Visual Studio para crear su primera aplicación
web Python. Vea también Tutorial: Introducción al marco
web de Flask en Visual Studio.
Grupo web
Todas las plantillas Proyecto web de <Framework> crean una aplicación web de inicio con un diseño
idéntico, con independencia del marco elegido. La aplicación tiene una página de inicio, otra de Acerca de y otra
de contacto, además de una barra de navegación y un diseño dinámico que usa el arranque. Cada aplicación
está correctamente configurada para archivos estáticos (CSS, JavaScript y fuentes) y usa un mecanismo de
plantilla de página adecuado para el marco.
P L A N T IL L A DESC RIP T IO N
P L A N T IL L A DESC RIP T IO N
Proyecto web de Bottle de sondeos Genera una aplicación que se puede ejecutar en una base de
datos en memoria, MongoDB o Azure Table Storage, que se
configura mediante la variable de entorno
REPOSITORY_NAME . Los modelos de datos y el código de
almacén de datos se encuentran en la carpeta models y el
archivo settings.py contiene código para determinar qué
almacén de datos se usa.
Proyecto web de Django de sondeos Genera un proyecto de Django y una aplicación de Django
con tres páginas y una base de datos de SQLite. Incluye las
personalizaciones de la interfaz administrativa de Django
para permitir que un administrador autenticado cree y
administre los sondeos. Para obtener más información, vea
Plantilla de proyecto web de Django y Paso 6. Usar la
plantilla de proyecto web de Django de sondeos.
Proyecto web de Flask/Jade de sondeos Genera la misma aplicación que con la plantilla Proyecto
web de Flask de sondeos , pero con la extensión Jade
para el motor de plantillas de Jinja.
Si se usa control de código fuente, normalmente se omite la carpeta del entorno virtual, ya que dicho entorno
solo puede volver a crearse con requirements.txt. La mejor forma de excluir la carpeta es seleccionar primero I
will install them myself (Haré la instalación por mi cuenta) en el aviso mostrado anteriormente y luego
deshabilitar la confirmación automática antes de crear el entorno virtual. Para obtener detalles, vea los pasos 1-
2 y 1-3 del tutorial de Django y los pasos 1-2 y 1-3 del tutorial de Flask.
Cuando implemente Microsoft Azure App Service, seleccione una versión de Python como una extensión del
sitio e instale los paquetes manualmente. Además, dado que Azure App Service no instala automáticamente los
paquetes de un archivo requirements.txt cuando se implementa desde Visual Studio, siga los detalles de
configuración de aka.ms/PythonOnAppService.
Depuración
Cuando se inicia un proyecto web para la depuración, Visual Studio inicia el servidor web local en un puerto
aleatorio y abre el explorador predeterminado en esa dirección y puerto. Para especificar opciones adicionales,
haga clic con el botón derecho en el proyecto, seleccione Propiedades y haga clic en la pestaña Iniciador web :
En el grupo Depurar :
Rutas de acceso de búsqueda , Argumentos de script , Argumentos del intérprete y Ruta del
intérprete : estas opciones son las mismas que para la depuración normal.
Iniciar URL : especifica la dirección URL que se abre en el explorador. El valor predeterminado es localhost .
Número de puer to : Puerto que se utilizará si no se especifica ninguno en la dirección URL (Visual Studio
selecciona uno automáticamente de forma predeterminada). Esta opción le permite invalidar el valor
predeterminado de la variable de entorno SERVER_PORT , usado por las plantillas para configurar el puerto en
el que escucha el servidor de depuración local.
Las propiedades de los grupos Ejecutar comando del ser vidor y Comando del ser vidor de depuración
(este último está por debajo de lo que es visible en la imagen) determinan cómo se inicia el servidor web. Dado
que muchos marcos requieren el uso de un script fuera del proyecto actual, se puede configurar aquí el script y
el nombre del módulo de inicio se puede pasar como parámetro.
Comando : puede ser un script de Python (archivo *.py), un nombre de módulo (como en
python.exe -m module_name ) o una sola línea de código (como en python.exe -c "code" ). El valor de la lista
desplegable indica cuál de estos tipos está previsto.
Argumentos : estos argumentos se pasan en la línea de comandos después del comando.
Entorno : lista separada por nuevas líneas de pares <NAME>=<VALUE> que especifican variables de
entorno. Estas variables se establecen después de todas las propiedades que pueden modificar el entorno,
como el número de puerto y las rutas de acceso de búsqueda y, por lo tanto, pueden sobrescribir estos
valores.
Cualquier propiedad de proyecto o variable de entorno se puede especificar con la sintaxis de MSBuild, por
ejemplo: $(StartupFile) --port $(SERVER_PORT) . $(StartupFile) es la ruta de acceso relativa al archivo de inicio
y {StartupModule} es el nombre del archivo de inicio que se puede importar. $(SERVER_HOST) y $(SERVER_PORT)
son variables de entorno normales que se establecen mediante las propiedades URL de inicio y Número de
puer to , automáticamente o mediante la propiedad Entorno .
NOTE
Los valores de Ejecutar comando del ser vidor se usan con el comando Depurar > Iniciar ser vidor o Ctrl+F5 ; los
valores del grupo Comando del ser vidor de depuración se usan con el comando Depurar > Iniciar el ser vidor
de depuración o F5 .
TIP
Es probable que tenga que configurar la propiedad Directorio de trabajo del proyecto porque las aplicaciones de
Pyramid suelen encontrarse en una carpeta por debajo de la raíz del proyecto.
Otras configuraciones
Si tiene una configuración para otro marco que quiere compartir, o si quiere solicitar la configuración para otro
marco, abra un problema en GitHub.
Vea también
Referencia de plantillas de elemento de Python
Publicación en Azure App Service
Plantilla de proyecto web de Django
13/12/2021 • 2 minutes to read
Django es un marco de Python de alto nivel diseñado para el desarrollo web rápido, seguro y escalable. La
compatibilidad de Python en Visual Studio proporciona varias plantillas de proyecto para configurar la
estructura de una aplicación web basada en Django. Para usar una plantilla en Visual Studio, seleccione Archivo
> Nuevo > Proyecto , busque "Django" y seleccione alguna de las plantillas Proyecto web de Django en
blanco , Proyecto web de Django y Proyecto web de Django de sondeos . Vea el tutorial de aprendizaje
de Django para obtener una guía detallada de todas las plantillas.
Django es un marco de Python de alto nivel diseñado para el desarrollo web rápido, seguro y escalable. La
compatibilidad de Python en Visual Studio proporciona varias plantillas de proyecto para configurar la
estructura de una aplicación web basada en Django. Para usar una plantilla en Visual Studio, seleccione Archivo
> Nuevo > Proyecto , busque "Django" y seleccione alguna de las plantillas del proyecto web de Django en
blanco y del proyecto web de Django . Vea el tutorial de aprendizaje de Django para obtener una guía
detallada de todas las plantillas.
Visual Studio proporciona IntelliSense al completo para proyectos de Django:
Variables de contexto que se pasan en la plantilla:
Django Sync DB (Base de datos de sincronización de Django): ejecuta manage.py syncdb en una ventana
interactiva :
Collect Static (Recopilar estáticos): ejecuta manage.py collectstatic --noinput para copiar todos los
archivos estáticos en la ruta de acceso que STATIC_ROOT especifica en settings.py.
Validar : ejecuta manage.py validate , que informa de los errores de validación en los modelos instalados
que especifica INSTALLED_APPS en settings.py:
Vea también
Tutorial de aprendizaje de Django
Publicación en Azure App Service
Creación y administración de entornos de Python
en Visual Studio
13/12/2021 • 14 minutes to read
Un entorno de Python es un contexto en el que se ejecuta el código de Python e incluye los entornos globales,
virtuales y de Conda. Un entorno consta de un intérprete, una biblioteca (normalmente la biblioteca estándar de
Python) y un conjunto de paquetes instalados. Todos estos componentes determinan qué construcciones de
lenguaje y sintaxis son válidas, a qué función de sistema operativo puede acceder y qué paquetes puede usar.
En Visual Studio en Windows, se usa la ventana Entornos de Python , como se explica en este artículo, para
administrar entornos y seleccionar uno como valor predeterminado para los proyectos nuevos. En los siguientes
artículos se indican otros aspectos de los entornos:
En cualquier proyecto puede seleccionar un entorno concreto en lugar de usar el predeterminado.
Para obtener detalles sobre la creación y el empleo de entornos virtuales para proyectos de Python, vea
Uso de entornos virtuales.
Si quiere instalar paquetes en un entorno, vea la referencia de la pestaña Paquetes.
Para instalar otro intérprete de Python, vea Instalación de intérpretes de Python. En general, si descarga y
ejecuta el instalador de una distribución principal de Python, Visual Studio detecta esa nueva instalación y
el entorno aparece en la ventana Entornos de Python y se puede seleccionar para los proyectos.
Si no está familiarizado con Python en Visual Studio, los siguientes artículos también proporcionan un contexto
general:
Uso de Python en Visual Studio
Instalación de la compatibilidad con Python en Visual Studio
NOTE
No puede administrar entornos de código de Python abiertos como carpeta con el comando Archivo > Abrir >
Carpeta . En su lugar, cree un proyecto de Python a partir del código existente para disfrutar de las características del
entorno de Visual Studio.
NOTE
Los entornos de código de Python abiertos como una carpeta se pueden administrar con el comando Archivo > Abrir >
Carpeta . La barra de herramientas de Python permite alternar entre todos los entornos detectados y, también, agregar
un entorno nuevo. La información del entorno se almacena en el archivo PythonSettings.json, en la carpeta .vs del área de
trabajo.
TIP
Si expande la ventana Entornos de Python con un ancho suficiente, obtendrá una vista más completa de los entornos
con la que podrá trabajar de una manera más cómoda.
NOTE
Aunque Visual Studio respeta la opción de paquetes de sitio de sistema, no ofrece una forma de cambiarla desde dentro
de Visual Studio.
¿Qué ocurre si no aparece ningún entorno?
Si no aparece ningún entorno, significa que Visual Studio no pudo detectar ninguna instalación de Python en las
ubicaciones estándar. Por ejemplo, es posible que haya instalado Visual Studio 2017 o una versión posterior,
pero también que haya borrado todas las opciones de intérprete en las opciones del instalador de la carga de
trabajo de Python. De manera similar, es posible que haya instalado Visual Studio 2015 o una versión anterior,
pero que no haya instalado un intérprete de manera manual (vea Instalación de intérpretes de Python).
Si sabe que tiene un intérprete de Python en el equipo pero Visual Studio (cualquier versión) no lo detectó, use
el comando + Personalizado para especificar manualmente la ubicación. Consulte la sección siguiente,
Identificación manual de un entorno existente.
TIP
Visual Studio detecta las actualizaciones de un intérprete existente, como actualizar Python 2.7.11 a 2.7.14 mediante los
instaladores de python.org. Durante el proceso de instalación, el entorno anterior desaparece de la lista de entornos de
Python antes de que aparezca la actualización en su lugar.
Sin embargo, si mueve manualmente un intérprete y su entorno con el sistema de archivos, Visual Studio no sabrá cuál es
la ubicación nueva. Para obtener más información, vea la sección sobre cómo mover un intérprete.
Tipos de entornos
Visual Studio puede trabajar con entornos globales, virtuales y de Conda.
Entornos globales
Cada instalación de Python (por ejemplo, Python 2.7, Python 3.6, Python 3.7, Anaconda 4.4.0, etc., vea Instalación
de intérpretes de Python) mantiene su propio entorno global. Cada entorno está formado por el intérprete de
Python correspondiente, su biblioteca estándar, un conjunto de paquetes preinstalados y cualquier paquete
adicional que instale mientras ese entorno está activado. Al instalar un paquete en un entorno global, este pasa
a estar disponible para todos los proyectos que usan ese entorno. Si el entorno se encuentra en un área
protegida del sistema de archivos (dentro de c:\archivos de programa, por ejemplo), la instalación de paquetes
requiere privilegios de administrador.
Los entornos globales están disponibles para todos los proyectos del equipo. En Visual Studio, debe seleccionar
un entorno global como predeterminado, que será el que se utilice para todos los proyectos (a menos que elija
específicamente otro diferente para un proyecto). Para más información, vea Selección de un entorno para un
proyecto.
Entornos virtuales
Aunque trabajar en un entorno global es una forma sencilla de empezar, con el tiempo, ese entorno se llena de
muchos paquetes diferentes que se han instalado para distintos proyectos. Tal desorden dificulta probar
exhaustivamente una aplicación en un conjunto específico de paquetes con versiones conocidas, que es
exactamente el tipo de entorno que se configuraría en un servidor web o de compilación. También pueden
producirse conflictos si dos proyectos necesitan paquetes no compatibles o versiones diferentes del mismo
paquete.
Por este motivo, los desarrolladores suelen crear un entorno virtual para un proyecto. Un entorno virtual es una
subcarpeta de un proyecto que contiene una copia de un intérprete determinado. Al activar el entorno virtual,
los paquetes que instale se instalan solo en la subcarpeta de ese entorno. Si luego ejecuta un programa de
Python en ese entorno, sabe que se está ejecutando solo en esos paquetes específicos.
Visual Studio permite crear directamente un entorno virtual para un proyecto. Por ejemplo, si abre un proyecto
que contiene un archivo requirements.txt o crea un proyecto a partir de una plantilla que incluye ese archivo,
Visual Studio le pide que cree automáticamente un entorno virtual e instale esas dependencias.
En un proyecto abierto puede crear un nuevo entorno virtual en cualquier momento. En el Explorador de
soluciones , expanda el nodo del proyecto, haga clic con el botón derecho en Entornos de Python y
seleccione "Agregar entorno virtual". Para obtener más información, vea Creación de un entorno virtual.
Visual Studio además proporciona un comando para generar un archivo requirements.txt desde un entorno
virtual, con lo que resulta sencillo volver a crear el entorno en otros equipos. Para obtener más información, vea
Use virtual environments (Usar entornos virtuales).
Entornos de coda
Un entorno de Conda es el creado mediante la herramienta conda o con la administración de Conda integrada
en Visual Studio 2017, versión 15.7 y versiones posterior. (Requiere Anaconda o Miniconda, que están
disponibles a través del instalador de Visual Studio; vea Instalación).
1. Seleccione + Crear entorno de Conda en la ventana Entornos de Python , que abre una pestaña
Crear nuevo entorno de Conda :
2. Escriba un nombre para el entorno en el campo Nombre , luego seleccione un intérprete de Python base
en el campo Python y, después, seleccione Crear .
3. La ventana Salida muestra el progreso del nuevo entorno, con algunas instrucciones de CLI cuando se
completa la creación:
4. En Visual Studio, puede activar un entorno de Conda para un proyecto de la misma forma que con
cualquier otro entorno, tal como se describe en Cómo asignar el entorno de Python que se usa en un
proyecto.
5. Para instalar paquetes en el entorno, use la pestaña Paquetes.
1. Seleccione Agregar entorno... en la ventana Entornos de Python (o desde la barra de herramientas
de Python), con lo que se abre el cuadro de diálogo Agregar entorno . En ese cuadro de diálogo,
seleccione la pestaña Entorno de Conda :
2. Configure los campos siguientes:
Establecer como entorno actual Activa el entorno nuevo en el proyecto seleccionado una
vez que se crea el entorno.
Establecer como entorno predeterminado para los Establecer y activa automáticamente el entorno de
nuevos proyectos Conda en los nuevos proyectos creados en Visual Studio.
Esta opción es igual que usar el comando Conver tir
este entorno en el predeterminado para nuevos
proyectos en la ventana Entornos de Python .
3. Seleccione Crear y observe el progreso en la ventana Salida . La salida incluye unas cuantas
instrucciones de la CLI una vez que se completa la creación:
4. En Visual Studio, puede activar un entorno de Conda para un proyecto de la misma forma que con
cualquier otro entorno, tal como se describe en Cómo asignar el entorno de Python que se usa en un
proyecto.
5. Para instalar paquetes adicionales en el entorno, use la pestaña Paquetes.
NOTE
Para obtener mejores resultados con entornos de Conda, use Conda 4.4.8 o posterior (las versiones de Conda son
diferentes de las versiones de Anaconda). Puede instalar las versiones adecuadas de Miniconda (Visual Studio 2019) y
Anaconda (Visual Studio 2017) mediante el instalador de Visual Studio.
Para ver la versión de conda, donde se almacenan los entornos de Conda, y otra información, ejecute
conda info en un símbolo del sistema de Anaconda (es decir, un símbolo del sistema donde Anaconda está en
la ruta de acceso):
conda info
Debido a que los entornos de Conda no se almacenan con un proyecto, actúan de forma similar a los entornos
globales. Por ejemplo, al instalar un paquete nuevo en un entorno de conda, ese paquete pasa a estar disponible
para todos los proyectos que usan ese entorno.
Para Visual Studio 2017, versión 15.6 y anteriores, puede usar entornos de Conda apuntando a ellos de forma
manual tal como se describe en Manually identify an existing environment (Identificar de forma manual un
entorno existente).
Visual Studio 2017, versión 15.7 y posteriores, detecta automáticamente los entornos de Conda y los muestra
en la ventana Entornos de Python , tal y como se describe en la sección siguiente.
4. Los detalles del entorno se pueden revisar y modificar en cualquier momento en la ventana Entornos de
Python . En esa ventana, seleccione el entorno y luego, la pestaña Configurar . Después de hacer
cambios, seleccione el comando Aplicar . También puede quitar el entorno con el comando Quitar (que
no está disponible en entornos detectados automáticamente). Para más información, consulte la sección
sobre la pestaña de configuración.
Vea también
Instalación de intérpretes de Python
Selección de un intérprete para un proyecto
Uso de requirements.txt para las dependencias
Rutas de acceso de búsqueda
Referencia de ventana Entornos de Python
Cómo seleccionar un entorno de Python para un
proyecto
13/12/2021 • 10 minutes to read
Todo el código de un proyecto de Python se ejecuta dentro del contexto de un entorno concreto, como uno de
Python global, de Anaconda, virtual o de Conda. Visual Studio también usa ese entorno para la depuración, las
finalizaciones de importaciones y miembros, la comprobación de sintaxis y cualquier otra tarea que necesite
servicios de lenguaje específicos de la versión de Python y un conjunto de paquetes instalados.
Todos los proyectos Python nuevos en Visual Studio están configurados inicialmente para usar el entorno global
predeterminado, que aparece en el nodo Entornos de Python en el Explorador de soluciones :
Para cambiar el entorno para un proyecto, haga clic en el nodo Entornos de Python y seleccione Agregar o
quitar entornos de Python . En la lista mostrada, que incluye entornos globales, virtuales y de conda,
seleccione todos los que desee que aparezca en el nodo Entornos de Python :
Una vez que seleccione Aceptar , todos los entornos seleccionados aparecen en el nodo Entornos de Python .
El entorno activado actualmente aparece en negrita:
Para activar rápidamente un entorno distinto, haga clic con el botón derecho en el nombre de ese entorno y
seleccione Activar entorno . La opción se guarda con el proyecto y ese entorno se abrirá cada vez que abra el
proyecto. Si desactiva todas las opciones en el cuadro de diálogo Agregar o quitar entornos de Python ,
Visual Studio activa el entorno predeterminado global.
El menú contextual del nodo Entornos de Python también proporciona comandos adicionales:
C O M A N DO DESC RIP C IÓ N
Agregar entorno vir tual Inicia el proceso de creación de un nuevo entorno virtual en
el proyecto. Consulte Creación de un entorno virtual.
Agregar entorno vir tual existente Le pide que seleccione una carpeta que contenga un
entorno virtual y lo agrega a la lista bajo Entornos de
Python , pero no lo activa. Consulte Activación de un
entorno virtual existente.
Para cambiar el entorno de un proyecto, haga clic con el botón derecho en el nodo Entornos de Python y
seleccione Agregar entorno . También puede seleccionar Agregar entorno en la lista desplegable de entornos
de la barra de herramientas de Python.
Una vez en el cuadro de diálogo Agregar entorno , seleccione la pestaña Entorno existente y elija un entorno
nuevo en la lista desplegable Entorno :
Si ya agregó un entorno distinto del valor predeterminado global a un proyecto, es posible que tenga que
activar un entorno recién agregado. Haga clic con el botón derecho en ese entorno en el nodo Entornos de
Python y seleccione Activar entorno . Para quitar un entorno del proyecto, seleccione Quitar .
2. En el campo Ubicación del entorno vir tual , especifique una ruta de acceso para el entorno virtual. Si
especifica solo un nombre, el entorno virtual se crea dentro del proyecto actual en una subcarpeta con
ese nombre.
3. Seleccione un entorno como el intérprete base y seleccione Crear . Visual Studio muestra una barra de
progreso mientras se configura el entorno y descarga los paquetes necesarios. Una vez finalizado, el
entorno virtual aparece en la ventana Entornos de Python para el proyecto contenedor.
4. El entorno virtual no se activa de manera predeterminada. Para activar el entorno virtual del proyecto,
haga clic con el botón derecho en él y seleccione Activar entorno .
NOTE
Si la ruta de acceso de la ubicación identifica un entorno virtual existente, Visual Studio detecta de manera automática el
intérprete básico (con el archivo orig-prefix.txt en el directorio lib del entorno) y cambia el botón Crear a Agregar .
Si existe un archivo requirements.txt cuando se agrega un entorno virtual, el cuadro de diálogo Agregar entorno
vir tual muestra una opción para instalar los paquetes de manera automática, lo que facilita volver a crear un entorno en
otro equipo:
En cualquier caso, el resultado es el mismo que si se usara el comando Agregar entorno vir tual existente .
O P C IÓ N DESC RIP C IÓ N
Establecer como entorno actual Activa el entorno nuevo en el proyecto seleccionado una
vez que se crea el entorno.
Establecer como entorno predeterminado para los Establecer y activa automáticamente el entorno virtual
nuevos proyectos en los nuevos proyectos creados en Visual Studio.
Cuando se usa esta opción, el entorno virtual debe estar
en una ubicación fuera de un proyecto específico.
Poner el entorno a disposición globalmente Especifica si el entorno virtual también sirve como
entorno global. Cuando se usa esta opción, el entorno
virtual debe estar en una ubicación fuera de un proyecto
específico.
4. Seleccione Crear para finalizar el entorno virtual. Visual Studio muestra una barra de progreso mientras
se configura el entorno y descarga los paquetes necesarios. Una vez finalizado, el entorno virtual se
activa y aparece en el nodo Entornos de Python del Explorador de soluciones y la ventana
Entornos de Python del proyecto contenedor.
Activación de un entorno virtual existente
Si ya creó un entorno virtual en otro lugar, puede activarlo para un proyecto como se indica a continuación:
1. Haga clic con el botón derecho en Entornos de Python en el Explorador de soluciones y seleccione
Agregar entorno .
2. En el cuadro de diálogo Examinar que aparece, vaya a la carpeta que contiene el entorno virtual,
selecciónela y, luego, seleccione Aceptar . Si Visual Studio detecta un archivo requirements.txt en ese
entorno, preguntará si instalar esos paquetes.
3. Después de unos momentos, el entorno virtual aparece en el nodo Entornos de Python en el
Explorador de soluciones . El entorno virtual no se activa de manera predeterminada, por lo que debe
hacer clic con el botón derecho en él y seleccionar Activar entorno .
Eliminación de un entorno virtual
1. En el Explorador de soluciones , haga clic con el botón derecho en el entorno virtual y seleccione
Quitar .
2. Visual Studio pregunta si desea quitar o eliminar el entorno virtual. Si selecciona Quitar , deja de estar
disponible para el proyecto pero sigue en el sistema de archivos. Si selecciona Eliminar , se quita el
entorno del proyecto y se elimina del sistema de archivos. El intérprete básico no se ve afectado.
Para instalar paquetes nuevos, haga clic con el botón derecho en el entorno y seleccione Instalar paquete de
Python para cambiar a la pestaña Paquetes correspondiente en la ventana Entornos de Python . Escriba un
término de búsqueda (por lo general, el nombre del paquete) y Visual Studio mostrará los paquetes que
coincidan.
Para instalar paquetes nuevos, haga clic con el botón derecho en el entorno y seleccione Administrar
paquetes de Python (o use el botón de paquete de la barra de herramientas de Python) para cambiar a la
pestaña Paquetes correspondiente en la ventana Entornos de Python . En la pestaña Paquetes , escriba un
término de búsqueda (por lo general, el nombre del paquete) y Visual Studio mostrará los paquetes que
coincidan.
Dentro de Visual Studio, los paquetes (y las dependencias) de la mayoría de los entornos se descargan desde
Python Package Index (PyPI) (Índice de paquetes de Python), donde también puede buscar los paquetes
disponibles. La barra de estado y la ventana de salida de Visual Studio muestran información sobre la
instalación. Para desinstalar un paquete, haga clic con el botón derecho en él y seleccione Quitar .
Por lo general, el administrador de paquetes de Conda usa https://repo.continuum.io/pkgs/ como el canal
predeterminado, pero hay otros canales disponibles. Para más información, consulte Administrar canales
(docs.conda.io).
Tenga en cuenta que las entradas mostradas puede que no sean siempre precisas, y la instalación y
desinstalación pueden no ser confiables o estar disponibles. Visual Studio usa el administrador de paquetes de
pip si está disponible y lo descarga e instala cuando sea necesario. Visual Studio también puede usar el
administrador de paquetes de easy_install. También se muestran los paquetes instalados con pip o
easy_install desde la línea de comandos.
Tenga en cuenta también que Visual Studio no admite actualmente el uso de conda para instalar paquetes en
un entorno de conda. En su lugar, use conda desde la línea de comandos.
TIP
Una situación común donde pip no puede instalar un paquete es cuando este incluye código fuente para componentes
nativos en archivos *.pyd. Sin la versión necesaria de Visual Studio instalada, pip no puede compilar estos componentes. El
mensaje de error que aparece en esta situación es error : Unable to find vcvarsall.bat (Error: no se encuentra
vcvarsall.bat). easy_install suele poder descargar los binarios previamente compilados, y el usuario puede descargar
un compilador adecuado para versiones anteriores de Python de https://python.en.uptodown.com/windows/versions.
Para más información, consulte How to deal with the pain of "unable to find vcvarsallbat" (Cómo afrontar la dificultad de
"no poder encontrar vcvarsallbat") en el blog del equipo de herramientas de Python.
Vea también
Creación y administración de entornos de Python en Visual Studio
Uso de requirements.txt para las dependencias
Rutas de acceso de búsqueda
Referencia de ventana Entornos de Python
Administración de los paquetes necesarios con
requirements.txt
13/12/2021 • 2 minutes to read
Si comparte un proyecto con otros usuarios, usa un sistema de compilación o pretende copiar el proyecto en
cualquier otra ubicación donde necesita restaurar un entorno, necesita especificar los paquetes externos que
dicho proyecto requiere. El enfoque recomendado es usar un archivo requirements.txt (readthedocs.org) que
contiene una lista de comandos para pip que instala las versiones necesarias de los paquetes dependientes. El
comando más común es pip freeze > requirements.txt , que registra la lista de paquetes actual del entorno en
requirements.txt.
Técnicamente, se puede utilizar cualquier nombre de archivo para realizar un seguimiento de los requisitos
(mediante el uso de -r <full path to file> al instalar un paquete), pero Visual Studio proporciona
compatibilidad específica para requirements.txt:
Si ha cargado un proyecto que contiene requirements.txt y desea instalar todos los paquetes enumerados
en ese archivo, expanda el nodo Python Environments en el Explorador de soluciones y, luego, haga
clic con el botón derecho en un nodo de entorno y seleccione Instalar desde requirements.txt :
Si quiere instalar las dependencias en un entorno virtual, cree y active primero ese entorno y luego use el
comando Instalar desde requirements.txt . Para más información sobre cómo crear un entorno
virtual, consulte Uso de entornos virtuales.
Si ya tiene todos los paquetes necesarios instalados en un entorno, puede hacer clic con el botón derecho
en ese entorno en el Explorador de soluciones y seleccionar Generar requirements.txt para crear el
archivo necesario. Si el archivo ya existe, aparece un mensaje sobre cómo actualizarlo:
Replace entire file (Reemplazar todo el archivo) quita todos los elementos, comentarios y opciones
que existen.
Actualizar entradas existentes detecta los requisitos del paquete y actualiza los especificadores de
versión para que coincidan con la versión actualmente instalada.
Update and add entries (Actualizar y agregar entradas) actualiza todos los requisitos que se
encuentran y agrega todos los demás paquetes al final del archivo.
Dado que los archivos requirements.txt están pensados para inmovilizar los requisitos de un entorno, todos los
paquetes instalados se escriben con versiones precisas. Usar versiones precisas garantiza que puede reproducir
fácilmente el entorno en otro equipo. Los paquetes se incluyen aunque se instalaran con un intervalo de
versiones, como una dependencia de otro paquete, o con un instalador distinto de pip.
Si un paquete no se puede instalar mediante pip y aparece en un archivo requirements.txt, toda la instalación
produce un error. En este caso, edite manualmente el archivo para excluir este paquete o para usar opciones de
pip para hacer referencia a una versión instalable del paquete. Por ejemplo, puede ser preferible usar pip wheel
para compilar una dependencia y agregar la opción --find-links <path> a su requirements.txt:
C:\Project>type requirements.txt
--find-links wheelhouse
--no-index
azure==0.8.0
Vea también
Creación y administración de entornos de Python en Visual Studio
Selección de un intérprete para un proyecto
Rutas de acceso de búsqueda
Referencia de ventana Entornos de Python
Cómo usa Visual Studio las rutas de acceso de
búsqueda de Python
13/12/2021 • 2 minutes to read
Con un uso típico de Python, la variable de entorno PYTHONPATH (o IRONPYTHONPATH , etc.) proporciona la ruta de
acceso de búsqueda predeterminada para los archivos de módulo. Es decir, cuando usa una instrucción
from <name> import... or import <name> , Python busca un nombre coincidente en las siguientes ubicaciones en
orden:
1. Módulos integrados de Python.
2. La carpeta que contiene el código de Python que está ejecutando.
3. La "ruta de acceso de búsqueda de módulo" tal y como la definió la variable de entorno aplicable. (Consulte
The Module Search Path (Ruta de acceso de búsqueda de módulos) y Environment variables (Variables de
entorno) en la documentación principal de Python).
Sin embargo, Visual Studio omite la variable de entorno de ruta de acceso de búsqueda, incluso si se ha
establecido para todo el sistema. De hecho, se omite precisamente porque se establece para todo el sistema y,
por tanto, surgen determinadas preguntas que no se pueden responder automáticamente: ¿Están los módulos a
los que se hace referencia diseñados para Python 2.7 o Python 3.6+? ¿Van a invalidar a los módulos de
biblioteca estándar? ¿Es consciente el desarrollador de este comportamiento o se trata de un intento de
secuestro de sesión malintencionado?
Visual Studio proporciona así un medio para especificar rutas de acceso de búsqueda directamente tanto en
entornos como en proyectos. El código que ejecuta o depura en Visual Studio recibe rutas de acceso de
búsqueda en el valor de PYTHONPATH (y otras variables equivalente). Mediante la incorporación de rutas de
acceso de búsqueda, Visual Studio inspecciona las bibliotecas en estas ubicaciones y crea bases de datos de
IntelliSense para ellas cuando sea necesario (Visual Studio 2017, versión 15.5 y anteriores; crear la base de datos
puede tardar algún tiempo dependiendo del número de bibliotecas).
Para agregar una ruta de búsqueda, vaya al Explorador de soluciones , expanda el nodo del proyecto, haga
clic con el botón derecho en Rutas de búsqueda y seleccione Agregar carpeta a ruta de búsqueda :
Este comando muestra un explorador en el que se puede seleccionar la carpeta que se va a incluir.
Si la variable de entorno PYTHONPATH ya incluye las carpetas que quiere, use Agregar PYTHONPATH a rutas
de búsqueda como un cómodo acceso directo.
Una vez que se han agregado las carpetas a las rutas de búsqueda, Visual Studio usa esas rutas para cualquier
entorno asociado al proyecto. (Puede ver errores si el entorno se basa en Python 3 e intenta agregar una ruta de
acceso de búsqueda a los módulos de Python 2.7).
Los archivos con una extensión .zip o .egg también se pueden agregar como rutas de búsqueda al seleccionar el
comando Add Zip Archive to Search Path (Agregar archivo Zip a ruta de búsqueda). Al igual que con las
carpetas, el contenido de estos archivos se examina y se pone a disposición de IntelliSense.
Vea también
Creación y administración de entornos de Python en Visual Studio
Selección de un intérprete para un proyecto
Uso de requirements.txt para las dependencias
Referencia de ventana Entornos de Python
Referencia de pestañas de la ventana Entorno de
Python
13/12/2021 • 8 minutes to read
C O M A N DO DESC RIP C IÓ N
Hacer que este entorno sea el predeterminado para Establece el entorno activo, que puede hacer que Visual
los proyectos nuevos Studio (2017, versión 15.5 y anteriores) deje de responder
por unos instantes mientras se carga la base de datos de
IntelliSense. Los entornos con muchos paquetes pueden
dejar de responder durante más tiempo.
Visitar el sitio web del distribuidor Abre un explorador en la URL proporcionada por la
distribución de Python. Python 3.x, por ejemplo, se dirige a
python.org.
Abrir ventana interactiva Abre la ventana interactiva (REPL) para este entorno en
Visual Studio, aplicando cualquiera de los scripts de inicio
(ver a continuación).
Usar el modo interactivo de IPython Cuando se establece, se abre la ventana interactiva con
IPython de manera predeterminada. Esto habilita los gráficos
en línea, así como la sintaxis de IPython extendida como
name? para ver la ayuda y !command para los comandos
del shell. Esta opción se recomienda al usar una distribución
de Anaconda, ya que necesita paquetes adicionales. Para
obtener más información, vea Uso de IPython en la ventana
interactiva.
Scripts de inicio
A medida que usa las ventanas interactivas en su flujo de trabajo diario, probablemente desarrolle funciones del
asistente que usa con frecuencia. Por ejemplo, puede crear una función que abra un DataFrame en Excel y,
después, guardar ese código como un script de inicio de manera que siempre esté disponible en la ventana
interactiva .
Los scripts de inicio contienen código que la ventana interactiva carga y ejecuta automáticamente, como
importaciones, definiciones de función y literalmente cualquier otra cosa. Hay dos maneras de hacer referencia
a dichos scripts:
1. Cuando instala un entorno, Visual Studio crea una carpeta Documents\Visual Studio
<version>\Python Scripts\<environment> donde <versión> se corresponde a la versión de
Visual Studio (como 2017 o 2019) y <entorno> coincide con el nombre del entorno. Puede navegar
fácilmente a la carpeta específica del entorno con el comando Explorar scripts interactivos . Cuando
inicie la ventana interactiva para ese entorno, se cargan y ejecutan los archivos de .py que se encuentran
aquí en orden alfabético.
2. El control Scripts de la pestaña Herramientas > Opciones > Python > Ventanas interactivas
(consulte Opciones de las ventanas interactivas) pretende especificar una carpeta adicional para los
scripts de inicio que se cargan y ejecutan en todos los entornos. No obstante, esta característica no
funciona actualmente.
Pestaña Configurar
Si está disponible, la pestaña Configurar contiene detalles como se describe en la tabla siguiente. Si esta
pestaña no está presente, significa que Visual Studio administra todos los detalles automáticamente.
CAMPO DESC RIP C IÓ N
Prefix path (Ruta de acceso de prefijo) Ubicación de la carpeta base del intérprete. Si rellena este
valor y hace clic en Detección automática , Visual Studio
intentará rellenar los demás campos automáticamente.
Interpreter path (Ruta de acceso del intérprete) Ruta de acceso al ejecutable del intérprete, normalmente la
ruta de acceso de prefijo seguida de python.exe .
Librar y path (Ruta de acceso a la biblioteca) Especifica la raíz de la biblioteca estándar, pero este valor se
(si está disponible) puede omitir si Visual Studio es capaz de solicitar una ruta de
acceso más precisa desde el intérprete.
CAMPO DESC RIP C IÓ N
Path environment variable (Variable de entorno de ruta Variable de entorno que el intérprete usa para encontrar
de acceso) rutas de acceso de búsqueda. Visual Studio cambia el valor
de la variable al iniciar Python para que contenga las rutas
de búsqueda del proyecto. Normalmente, esta propiedad se
debe establecer en PYTHONPATH , pero algunos intérpretes
utilizan un valor diferente.
Pestaña Paquetes
También se etiqueta como "pip" en versiones anteriores
Administra los paquetes instalados en el entorno con pip (la pestaña Paquetes (PyPI) ) o conda (la pestaña
Paquetes (Conda) para entornos en la versión 15.7 y posteriores de Visual Studio 2017). En esta pestaña
también se pueden buscar e instalar paquetes nuevos, incluidas sus dependencias.
Los paquetes que ya están instalados aparecen con controles para actualizar (una flecha hacia arriba) y
desinstalar (la X en un círculo) el paquete:
Especifique los filtros de un término de búsqueda en la lista de paquetes instalados, así como paquetes que
pueden instalarse desde PyPI.
Como puede ver en la imagen anterior, los resultados de la búsqueda muestran un número de paquetes que
coinciden con el término de búsqueda; pero la primera entrada de la lista es un comando para ejecutar pip
install <name> directamente. Si se encuentra en la pestaña Paquetes (Conda) , en su lugar verá conda
install <name> :
En ambos casos, puede personalizar la instalación si agrega argumentos en el cuadro de búsqueda después del
nombre del paquete. Cuando se incluyen argumentos, en los resultados de la búsqueda se muestra pip install
o conda install seguido del contenido del cuadro de búsqueda:
Al instalar un paquete se crean subcarpetas dentro de la carpeta Lib del entorno en el sistema de archivos. Por
ejemplo, si tiene instalado Python 3.6 en c:\Python36, los paquetes se instalan en c:\Python36\Lib; si tiene
instalado Anaconda3 en c:\Program Files\Anaconda3, los paquetes se instalan en c:\Program
Files\Anaconda3\Lib. En el caso de los entornos de Conda, los paquetes se instalan en la carpeta de ese entorno.
Concesión de privilegios de administrador para la instalación de paquetes
Al instalar paquetes en un entorno que está situado en un área protegida del sistema de archivos, como
c:\Program Files\Anaconda3\Lib, Visual Studio debe ejecutar pip install con permisos elevados para
permitirle que cree subcarpetas del paquete. Cuando se necesita la elevación de privilegios, Visual Studio
muestra el mensaje Puede que se necesiten privilegios de administrador para instalar, actualizar o
desinstalar paquetes para este entorno :
Elevar ahora concede privilegios administrativos a pip para una única operación, sujeto también a cualquier
sistema operativo que solicite permisos. Al seleccionar Continuar sin privilegios de administrador se
intenta instalar el paquete, pero pip produce un error al intentar crear carpetas con un resultado como error :
no se pudo crear "C:\Archivos de programa\Anaconda3\Lib\site-packages\png.py": permiso
denegado.
Al seleccionar Elevar siempre al instalar o desinstalar paquetes se impide que el cuadro de diálogo
aparezca para el entorno en cuestión. Para que el cuadro de diálogo aparezca de nuevo, vaya a Herramientas >
Opciones > Python > General y seleccione el botón Restablecer todos los cuadros de diálogo ocultos
de manera permanente .
En esa misma pestaña de opciones , también puede seleccionar Ejecutar siempre pip como administrador
para suprimir el cuadro de diálogo en todos los entornos. Vea Opciones: pestaña General.
Restricciones de seguridad con versiones anteriores de Python
Cuando se usa Python 2.6, 3.1 y 3.2, Visual Studio muestra la advertencia Debido a restricciones de
seguridad, la instalación desde Internet podría no funcionar en esta versión de Python :
El motivo de la advertencia es que con estas versiones anteriores de Python, pip install no admite la
Seguridad de la capa de transporte (TLS) 1.2, que es necesaria para descargar paquetes desde el proveedor,
pypi.org. Las compilaciones de Python personalizadas pueden admitir TLS 1.2, en cuyo caso pip install podría
funcionar.
Es posible descargar el get-pip.py apropiado para un paquete desde bootstrap.pypa.io, descargar manualmente
un paquete desde pypi.org y, a continuación, instalar el paquete desde esa copia local.
Pero lo recomendable es actualizar a una versión reciente de Python, en cuyo caso no aparece la advertencia.
Pestaña IntelliSense
Muestra el estado actual de la base de datos de finalización de IntelliSense:
En Visual Studio 2017, versión 15.5 y versiones anteriores, las finalizaciones de IntelliSense dependen de una
base de datos que se han compilado para esa biblioteca. La creación de la base de datos se realiza en
segundo plano cuando se instala una biblioteca, pero puede tardar un tiempo y es posible que no esté
completa cuando comience a escribir código.
Visual Studio 2017, versión 15.6 y posteriores, usa un método más rápido para proporcionar las
finalizaciones que no dependen de la base de datos de forma predeterminada. Por esta razón la pestaña se
etiqueta como IntelliSense [base de datos deshabilitada] . Puede habilitar la base de datos si desactiva
la opción Herramientas > Opciones > Python > Experimental > Usar el nuevo estilo IntelliSense
para los entornos .
Cuando Visual Studio detecta un nuevo entorno (o el usuario agrega uno), comienza a compilar
automáticamente la base de datos analizando los archivos de origen de la biblioteca. Este proceso puede tardar
desde un minuto a una hora o más dependiendo de lo que esté instalado. (Anaconda, por ejemplo, incluye
muchas bibliotecas y tarda algún tiempo en compilar la base de datos.) Una vez finalizado, obtiene detalles de
IntelliSense y no necesita actualizar la base de datos (con el botón Refresh DB (Actualizar base de datos)) hasta
que instale más bibliotecas.
Las bibliotecas para las que no se han compilado los datos se marcan con ! ; si la base de datos de un entorno
no está completa, también aparece ! junto a ella en la lista principal de entornos.
Vea también
Creación y administración de entornos de Python en Visual Studio
Selección de un intérprete para un proyecto
Uso de requirements.txt para las dependencias
Rutas de acceso de búsqueda
Configuración de aplicaciones web de Python para
IIS
13/12/2021 • 5 minutes to read
Cuando se usa Internet Information Services (IIS) como servidor web en un equipo Windows (incluidas
máquinas virtuales Windows en Azure, las aplicaciones de Python deben incluir una configuración específica en
sus archivos web.config para que IIS pueda procesar correctamente el código Python. El equipo mismo también
debe tener instalado Python junto con cualquier paquete que la aplicación web necesite.
NOTE
Anteriormente, este artículo contenía guías para la configuración de Python en Azure App Service en Windows. Las
extensiones de Python y los hosts de Windows que se usaban en ese escenario quedaron en desuso a favor de Azure App
Service en Linux. Para más información, consulte Publicación de una aplicación de Python en Azure App Service (Linux). Sin
embargo, todavía puede encontrar el artículo anterior en Configuración de un entorno de Python en Azure App Service.
Instalar paquetes
Cuando se usa un host dedicado, puede usar el entorno global de Python para ejecutar la aplicación en lugar de
un entorno virtual. En consecuencia, para instalar todos los requisitos de la aplicación en el entorno global,
simplemente ejecute pip install -r requirements.txt en un símbolo del sistema.
La variable de entorno HTTP_PLATFORM_PORT que se muestra aquí contiene el puerto en el que debe escuchar su
servidor local para las conexiones del localhost. Este ejemplo también muestra cómo crear otra variable de
entorno (si se quiere), que en este caso es SERVER_PORT .
Configuración del controlador FastCGI
FastCGI es una interfaz que funciona en el nivel de solicitud. IIS recibe conexiones entrantes y reenvía cada
solicitud a una aplicación WSGI que se ejecuta en uno o más procesos de Python persistentes.
Para usarlo, primero instale y configure el paquete wfastcgi como se describe en pypi.org/project/wfastcgi/.
A continuación, modifique el archivo web.config para incluir las rutas de acceso completas a python.exe y
wfastcgi.py en la clave PythonHandler . En los pasos que aparecen a continuación, se supone que Python está
instalado en c:\python36-32 y que el código de aplicación se encuentra en c:\home\site\wwwroot, por lo que
debe ajustar las rutas de acceso según corresponda:
1. Modifique la entrada PythonHandler en web.config para que la ruta de acceso coincida con la ubicación
de instalación de Python (consulte Referencia de configuración de IIS (iis.net) para ver los detalles
exactos).
<system.webServer>
<handlers>
<add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
scriptProcessor="c:\python36-32\python.exe|c:\python36-32\wfastcgi.py"
resourceType="Unspecified" requireAccess="Script"/>
</handlers>
</system.webServer>
2. En la sección <appSettings> del archivo web.config, agregue claves para WSGI_HANDLER , WSGI_LOG
(opcional) y PYTHONPATH :
<appSettings>
<add key="PYTHONPATH" value="c:\home\site\wwwroot"/>
<!-- The handler here is specific to Bottle; see the next section. -->
<add key="WSGI_HANDLER" value="app.wsgi_app()"/>
<add key="WSGI_LOG" value="c:\home\LogFiles\wfastcgi.log"/>
</appSettings>
Estos valores de <appSettings> están disponibles para la aplicación como variables de entorno:
El valor de PYTHONPATH puede ampliarse libremente, pero debe incluir la raíz de la aplicación.
WSGI_HANDLER debe apuntar a una aplicación WSGI que se pueda importar desde la aplicación.
WSGI_LOG es opcional, pero es recomendable para depurar la aplicación.
3. Establezca la entrada WSGI_HANDLER en web.config de forma adecuada para el marco que esté usando:
Bottle : asegúrese de usar paréntesis después de app.wsgi_app como se muestra a continuación.
Esto resulta necesario porque ese objeto es una función (vea app.py) en lugar de una variable:
Flask : cambie el valor WSGI_HANDLER por <project_name>.app , donde <project_name> coincide con
el nombre del proyecto. Puede encontrar el identificador exacto examinando la instrucción
from <project_name> import app en runserver.py. Por ejemplo, si el proyecto se denominara
"FlaskAzurePublishExample", la entrada aparecería así:
<!-- Flask apps only: change the project name to match your app -->
<add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>
Django : se requieren dos cambios en web.config para los proyectos de Django. En primer lugar,
cambie el valor WSGI_HANDLER a django.core.wsgi.get_wsgi_application() (el objeto está en el
archivo wsgi.py):
4. Solo para las aplicaciones de Django : en el archivo settings.py del proyecto de Django, agregue el
dominio de dirección URL del sitio o la dirección IP a ALLOWED_HOSTS , como se muestra más adelante,
reemplazando, por supuesto, "1.2.3.4" con su dirección URL o su dirección IP:
Dado que invierte mucho tiempo de desarrollo en el editor de código, la compatibilidad de Python en Visual
Studio proporciona funciones para ayudarle a ser más productivo. Las características incluyen resalte de sintaxis
de IntelliSense, finalización automática, ayuda para la firma, invalidaciones de método, búsqueda y navegación.
El editor también está integrado en la ventana interactiva de Visual Studio, lo que hace que sea sencillo
intercambiar código entre los dos. Vea Paso 3: Usar la ventana interactiva de REPL y Uso de la ventana
interactiva - Comando Enviar código a Interactive para obtener información detallada.
Para obtener documentación general sobre la edición de código en Visual Studio, vea Características del editor
de código. Vea también Esquematización, que le ayudará a mantenerse centrado en determinadas secciones del
código.
También puede usar el Examinador de objetos de Visual Studio (Ver > Otras ventanas > Examinador de
objetos o Ctrl +W > J ) para inspeccionar las clases de Python definidas en cada módulo y las funciones
definidas en esas clases.
IntelliSense
IntelliSense ofrece finalizaciones, ayuda para la firma, información rápida y coloración de código. Visual Studio
2017 versión 15.7 y posteriores también admite sugerencias de tipo.
Para mejorar el rendimiento, IntelliSense en Visual Studio 2017, versión 15.5 y versiones anteriores, depende de
la base de datos de finalizaciones que se genera para cada entorno de Python en el proyecto. Si agrega, quita o
actualiza paquetes las bases de datos puede que necesiten actualizarse. El estado de la base de datos se muestra
en la ventana Entornos de Python (un elemento relacionado del Explorador de soluciones ) en la pestaña
IntelliSense (vea Referencia de pestañas de la ventana Entorno de Python).
Visual Studio 2017, versión 15.6 y posteriores, se utiliza un medio diferente para proporcionar finalizaciones de
IntelliSense que no dependen de la base de datos.
Finalizaciones
Las finalizaciones aparecen como instrucciones, identificadores y otras palabras que pueden especificarse
adecuadamente en la ubicación actual en el editor. Lo que se muestra en la lista se basa en contexto y se filtra
para omitir las opciones incorrectas o molestas. Las finalizaciones a menudo se desencadenan escribiendo
instrucciones diferentes (como import ) y operadores (incluido el punto), pero puede hacer que aparezcan en
cualquier momento si presiona Ctrl +J > Espacio .
Cuando se abre una lista de finalizaciones, puede buscar la finalización que desee con las teclas de dirección, el
mouse o bien escribiendo algo más. A medida que escriba más letras, la lista se seguirá filtrando para mostrar
las finalizaciones probables. También puede usar accesos directos como:
Escribir letras que no están al principio del nombre, como "parse" para buscar "argparse"
Escribir solo las letras que se encuentran al principio de palabras, como "abc" para buscar 'AbstractBaseClass'
o "air" para buscar "as_integer_ratio"
Omitir letras, como "b64" para buscar "base64"
He aquí algunos ejemplos:
Las finalizaciones de miembros aparecen automáticamente al escribir un punto después de una variable o un
valor, junto con los métodos y atributos de los tipos posibles. Si una variable puede ser de más de un tipo, la
lista incluye todas las posibilidades de todos los tipos, con información adicional para indicar qué tipos admite
cada finalización. Cuando una finalización es compatible con todos los tipos posibles, se muestra sin la
anotación.
De manera predeterminada, no se muestran los miembros "dunder" (miembros que comienzan y terminan con
un doble carácter de subrayado). En general, no se debe acceder a dichos miembros directamente. En cambio, si
necesita uno, al escribir el doble carácter de subrayado inicial se agregan estas finalizaciones a la lista:
Las instrucciones import y from ... import muestran una lista de módulos que pueden importarse. Con
from ... import , la lista incluye miembros que pueden importarse desde el módulo especificado.
Las instrucciones raise y except muestran listas de clases que probablemente sean tipos de error. La lista
puede no incluir todas las excepciones definidas por el usuario, pero le ayudan a encontrar rápidamente las
excepciones integradas adecuadas:
Al escribir @ se inicia un decorador y se muestran todos los posibles decoradores. Muchos de estos elementos
no se pueden usar como decoradores; consulte la documentación de la biblioteca para determinar cuál se va a
usar.
TIP
Puede configurar el comportamiento de estas finalizaciones en Herramientas > Opciones > Editor de texto >
Python > Opciones avanzadas . De estas opciones, Filter list based on search string (Filtrar lista en función de la
cadena de búsqueda) aplica el filtrado de sugerencias de finalización mientras se escribe (activo de manera
predeterminada) y Member completion displays intersection of members (La finalización de miembros muestra la
intersección de miembros) muestra solo las finalizaciones que son compatibles con todos los posibles tipos (desactivado
de manera predeterminada). Vea Opciones: resultados de finalización.
Sugerencias de escritura
Visual Studio 2017, versión 15.7 y posteriores
"Sugerencias de escritura" en Python 3.5 + (PEP 484 (python.org) es una sintaxis de anotación de funciones y
clases que indica los tipos de argumentos, valores devueltos y atributos de clase. IntelliSense muestra
sugerencias de tipo cuando mantiene el mouse sobre las llamadas a funciones, argumentos y variables que
tengan dichas anotaciones.
En el ejemplo siguiente, la clase Vector se declara como List[float] , y la función scale contiene sugerencias
de tipo para sus argumentos y el valor devuelto. Al mantener el mouse sobre una llamada a esa función se
muestran las sugerencias de tipo:
En el ejemplo siguiente puede ver cómo los atributos anotados de la clase Employee aparecen en la ventana
emergente de finalización de IntelliSense para un atributo:
También es útil validar las sugerencias de tipo en todo el proyecto, porque los errores normalmente no
aparecerán hasta el tiempo de ejecución. Para ello, Visual Studio integra la herramienta estándar del sector
MyPy mediante el comando de menú contextual Python > Ejecutar MyPy en el Explorador de soluciones :
Al ejecutar el comando se le solicita que instale el paquete MyPy, si es necesario. Después, Visual Studio ejecuta
MyPy para validar las sugerencias de tipo de cada archivo de Python en el proyecto. Los errores se muestran en
la ventana Lista de errores de Visual Studio. Al seleccionar un elemento en la ventana se desplaza a la línea
adecuada del código.
Como ejemplo sencillo, la siguiente definición de función contiene una sugerencia de tipo para indicar que el
argumento input es de tipo str , mientras que la llamada a esa función intenta pasar un entero:
def commas_to_colons(input: str):
items = input.split(',')
items = [x.strip() for x in items]
return ':'.join(items)
commas_to_colons(1)
TIP
Para las versiones de Python anteriores a la 3.5, Visual Studio también muestra las sugerencias de tipo que proporcione a
través de archivos de código auxiliar de Typeshed (.pyi). Puede usar archivos de código auxiliar siempre que no quiera
incluir sugerencias de tipo directamente en el código o cuando quiera crear sugerencias de tipo para una biblioteca que
no los usa directamente. Para obtener más información, vea Create Stubs for Python Modules (Creación de códigos
auxiliares para los módulos de Python) en la wiki de proyecto de MyPy.
Actualmente Visual Studio no admite sugerencias de tipo en los comentarios.
TIP
Para las versiones de Python anteriores a la 3.5, Visual Studio también muestra las sugerencias de tipo que proporcione a
través de archivos de código auxiliar de Typeshed (.pyi). Puede usar archivos de código auxiliar siempre que no quiera
incluir sugerencias de tipo directamente en el código o cuando quiera crear sugerencias de tipo para una biblioteca que
no los usa directamente. Para obtener más información, vea Create Stubs for Python Modules (Creación de códigos
auxiliares para los módulos de Python) en la wiki de proyecto de MyPy.
Visual Studio incluye un conjunto de agrupaciones de archivos Typeshed para Python 2 y 3, por lo que no se necesitan
otras descargas. Sin embargo, si quiere usar un conjunto de archivos distinto, puede especificar la ruta en las opciones
Herramientas > Opciones > Python > Ser vidor de lenguaje . Consulte Opciones: servidor de lenguaje.
Actualmente Visual Studio no admite sugerencias de tipo en los comentarios.
Información rápida
Al pasar el puntero del mouse sobre un identificador aparece una sugerencia de información rápida. Según el
identificador, la información rápida puede mostrar los valores o tipos posibles, cualquier documentación
disponible, los tipos de devolución y las ubicaciones de definición:
Coloración de código
La coloración de código utiliza información desde análisis de código a variables de colores, instrucciones y otras
partes del código. Por ejemplo, las variables que hacen referencia a clases o módulos pueden mostrarse en un
color diferente que las funciones u otros valores, y los nombres de los parámetros aparecen en un color
diferente que las variables locales o globales. (De manera predeterminada, las funciones no se muestran en
negrita):
Para personalizar los colores, vaya a Herramientas > Opciones > Entorno > Fuentes y colores y modifique
las entradas de Python en la lista Mostrar elementos :
TIP
Para deshabilitar la coloración de código, vaya a Herramientas > Opciones > Editor de texto > Python > Opciones
avanzadas y desactive Otras opciones > Color names based on type (Nombres de colores basados en tipo). Vea
Opciones: Otras opciones.
Fragmentos de código
Los fragmentos de código son pedazos de código que se pueden insertar en los archivos mediante un método
abreviado de teclado y la tecla Tab o bien con los comandos Editar > IntelliSense > Inser tar fragmento de
código y Delimitar con , seleccionando Python y luego el fragmento deseado.
Por ejemplo, class es un acceso directo para un fragmento de código que inserta una definición de clase. El
fragmento de código aparece en la lista de finalización automática cuando se escribe class :
Al presionar Tab , se genera el resto de la clase. Puede escribir sobre el nombre y la lista de bases, moviéndose
entre los campos resaltados con Tab , y luego presionar Entrar para empezar a escribir el cuerpo.
Comandos de menú
Cuando use el comando de menú Editar > IntelliSense > Inser tar fragmento de código , seleccione
Python primero y luego un fragmento de código:
Del mismo modo, el comando Editar > IntelliSense > Delimitar con , coloca la selección actual en el editor de
texto dentro de un elemento estructural elegido. Por ejemplo, suponga que tiene un poco de código similar al
siguiente:
sum = 0
for x in range(1, 100):
sum = sum + x
Al seleccionar este código y elegir el comando Delimitar con aparece una lista de fragmentos de código
disponibles. Al elegir def en la lista se coloca el código seleccionado dentro de una definición de función, y
puede utilizar la tecla Tab para desplazarse entre los argumentos y el nombre de la función resaltados:
Para crear sus propios fragmentos de código, vea Tutorial: Crear un fragmento de código.
Si escribe un fragmento de código excelente que le gustaría compartir, no dude en publicarlo de manera
resumida y hacérnoslo saber. Es posible que podamos incluirlo en una futura versión de Visual Studio.
TIP
Para ocultar la barra de navegación, vaya a Herramientas > Opciones > Editor de texto > Python > General y
desactive Configuración > Barra de navegación .
Ir a definición
Ir a definición rápidamente salta del uso de un identificador (por ejemplo, un nombre de función, clase o
variable) al código fuente donde se define. Se invoca haciendo clic con el botón derecho en un identificador y
seleccionando Ir a definición , o colocando el símbolo de intercalación en el identificador y presionando F12 .
Funciona en todo su código y las bibliotecas externas siempre que el código fuente esté disponible. Si el código
fuente de la biblioteca no está disponible, Ir a definición salta a la correspondiente instrucción import para
una referencia de módulo, o mostrará un error.
Navegar a
El comando Editar > Navegar a (Ctrl + , ) muestra un cuadro de búsqueda en el editor donde puede escribir
cualquier cadena y consultar las posibles coincidencias en el código que define una función, una clase o una
variable que contiene la cadena. Esta característica proporciona una función similar a Ir a definición , pero sin
tener que buscar un uso de un identificador.
Haga doble clic en cualquier nombre, o seleccione con las teclas de dirección y Entrar , para navegar a la
definición de ese identificador.
Consulte también
Formato
Refactorización
Utilizar un linter
Aplicar formato a código de Python
13/12/2021 • 3 minutes to read
Visual Studio permite volver a aplicar formato rápidamente al código para que coincida con las opciones de
formato configuradas previamente.
Para aplicar formato a una selección: seleccione Editar > Opciones avanzadas > Dar formato a la
selección o presione Ctrl +E > F .
Para aplicar formato a todo el archivo: seleccione Editar > Opciones avanzadas > Dar formato al
documento o presione Ctrl +E > D .
Las opciones se configuran en Herramientas > Opciones > Editor de texto > Python > Formato y sus
pestañas anidadas. Es necesario seleccionar Mostrar todas las configuraciones para que aparezcan estas
opciones:
Las opciones de formato se establecen de forma predeterminada para que coincidan con un supraconjunto de la
guía de estilo PEP 8. La pestaña General determina cuándo se aplica el formato; la configuración de las otras
tres pestañas se describe en este artículo.
La compatibilidad con Python en Visual Studio también agrega el práctico comando Rellenar párrafo del
comentario al menú Editar > Opciones avanzadas , como se describe en una sección posterior.
Espaciado
El espaciado controla dónde se insertan o quitan los espacios en torno a diversas construcciones de lenguajes.
Cada opción tiene tres valores posibles:
Activada: garantiza que se aplica el espaciado.
Desactivada: elimina el espaciado.
Indeterminada: deja el formato original en su sitio.
En las tablas siguientes se proporcionan ejemplos de las distintas opciones:
O P C IÓ N DEF IN IC IO N ES DE C L A SE A C T IVA DA DESA C T IVA DO
Inser tar espacio entre el nombre class X (object): pass class X(object): pass
de la declaración de clase y la
lista de bases
Inser tar espacio en paréntesis de class X( object ): pass class X(object): pass
lista de bases
Inser tar espacio entre el nombre def X (): pass def X(): pass
de una declaración de función y
la lista de parámetros
Inser tar espacio en paréntesis de def X( a, b ): pass def X(a, b): pass
lista de parámetros
Inser tar espacios alrededor de includes X(a = 42): pass includes X(a=42): pass
"=" en valores de parámetro
predeterminados
Inser tar espacio antes y después includes X() -> 42: pass includes X()->42: pass
de los operadores de anotación
de valor devuelto
O P C IÓ N DE ESPA C IA DO DE
EXP RESIÓ N A C T IVA DA DESA C T IVA DO
Instrucciones
Las opciones de instrucciones controlan la reescritura automática de diversas instrucciones en varios
formularios de Python.
Ajuste
Ajuste le permite establecer el Ancho máximo del comentario (el valor predeterminado es 80). Si la opción
Ajustar comentarios que son demasiado anchos está activada, Visual Studio volverá a aplicar formato a
los comentarios para no superar ese ancho máximo.
# Wrapped to 40 columns
# There should be one-- and preferably
# only one --obvious way to do it.
# Not-wrapped:
# There should be one-- and preferably only one --obvious way to do it.
# foo
# bar
# baz
cambia a:
# This is a very long long long long long long long long long long long long long long long long long long
long comment
cambia a:
# This is a very long long long long long long long long long long long long
# long long long long long long long comment
Refactorización del código de Python
13/12/2021 • 3 minutes to read
Visual Studio proporciona varios comandos para transformar y limpiar automáticamente el código fuente de
Python:
Cambiar nombre: cambia el nombre de la clase, el método o la variable seleccionados.
Extraer método: crea un nuevo método a partir del código seleccionado.
Agregar importación: proporciona una etiqueta inteligente para agregar una importación que falta.
Quitar importaciones no usadas: quita las importaciones no utilizadas.
Cambiar nombre
1. Haga clic con el botón derecho en el identificador cuyo nombre desea cambiar y seleccione Rename
(Cambiar nombre); o bien, coloque el símbolo de intercalación en ese identificador y seleccione el
comando de menú Edit > Refactor > Rename (Editar > Refactorizar > Cambiar nombre...) (F2 ).
2. En el diálogo Rename (Cambiar nombre) que aparece, escriba el nuevo nombre del identificador y
seleccione OK (Aceptar):
3. En el siguiente diálogo, seleccione los archivos y las instancias del código al que se va a aplicar el cambio
de nombre; seleccione cualquier instancia individual para obtener una vista previa del cambio concreto:
4. Seleccione Apply (Aplicar) para realizar los cambios en los archivos de código fuente. (Esta acción se no
puede deshacer).
Extraer método
1. Seleccione las líneas de código o la expresión para extraer en un método distinto.
2. Seleccione el comando de menú Edit > Refactor > Extract method (Editar > Refactorizar > Extraer
método...) o pulse Ctrl +R > M .
3. En el diálogo que aparece, escriba un nuevo nombre de método, indique dónde extraerlo y seleccione las
variables de cierre. Las variables no seleccionadas para cierre se convierten en los argumentos de
método:
Agregar importación
Al colocar el símbolo de intercalación en un identificador que carece de información de tipo, Visual Studio
proporciona una etiqueta inteligente (el icono de bombilla a la izquierda del código) cuyos comandos agregan la
instrucción import o from ... import necesaria:
Visual Studio ofrece finalizaciones de import para paquetes de nivel superior y módulos en el proyecto actual y
la biblioteca estándar. Visual Studio también ofrece finalizaciones de from ... import para submódulos y
subpaquetes, así como para miembros de módulo. Las finalizaciones incluyen funciones, clases o datos
exportados. Al seleccionar cualquier opción, se agrega la instrucción a la parte superior del archivo, detrás de
otras importaciones, o a una instrucción from ... import existente si ya se importó el mismo módulo.
Visual Studio intenta filtrar miembros que no están definidos realmente en un módulo, como módulos que se
importan en otros, pero no son elementos secundarios del módulo que realiza la importación. Por ejemplo,
muchos módulos usan import sys en lugar de from xyz import sys , por lo que no verá una finalización para
importar sys desde otros módulos, aunque a los módulos les falte un miembro __all__ que excluye sys .
De forma similar, Visual Studio filtra las funciones que se importan desde otros módulos o desde el espacio de
nombres integrado. Por ejemplo, si un módulo importa la función settrace desde el módulo sys , en teoría
podría importarla desde ese módulo. Pero es mejor usar import settrace from sys directamente, y así Visual
Studio ofrece esa instrucción específicamente.
Por último, si algo se fuese a excluir normalmente, pero tiene otros valores que se incluirán (por ejemplo,
porque al nombre se le ha asignado un valor en el módulo), Visual Studio sigue excluyendo la importación. Este
comportamiento asume que el valor no debe exportarse porque está definido en otro módulo y, por tanto, es
probable que la asignación adicional sea un valor ficticio que tampoco se exporta.
Tenga en cuenta que Visual Studio no tiene en cuenta el flujo de control; el uso de un nombre delante de una
instrucción import se tratará como si de hecho se usara el nombre. Visual Studio también omite todas las
importaciones from __future__ , importaciones que se realizan dentro de una definición de clase y de las
instrucciones from ... import * .
Uso de PyLint para comprobar el código de Python
13/12/2021 • 2 minutes to read
PyLint, una herramienta ampliamente usada que busca errores en el código de Python y promueve patrones
correctos de codificación en Python, se integra en proyectos de Visual Studio para Python.
Ejecución de PyLint
Simplemente haga clic con el botón derecho en un proyecto de Python en el Explorador de soluciones y
seleccione Python > Run PyLint (Ejecutar PyLint...):
Al usar este comando se le pide que instale PyLint en su entorno activo si todavía no está presente.
Aparecen errores y advertencias de PyLint en la ventana de lista de errores :
Al hacer doble clic en un error se le dirigirá directamente al código fuente que ha generado el problema.
TIP
Consulte la referencia de características de PyLint para obtener una lista detallada de todos los mensajes de salida de
PyLint.
2. En el Explorador de soluciones de Visual Studio, haga clic con el botón derecho en el proyecto, seleccione
Agregar > Elemento existente , vaya al nuevo archivo .pylintrc, selecciónelo y haga clic en Agregar .
3. Abra el archivo para editarlo; que contiene una variedad de opciones de configuración con las que puede
trabajar. Para deshabilitar una advertencia, busque la sección [MESSAGES CONTROL] y luego el valor
disable en esa sección. Existe una cadena larga de mensajes concretos, a la que se puede anexar
cualquier advertencia que quiera. En este ejemplo, anexe ,missing-docstring (incluida la coma de
delimitación).
4. Guarde el archivo .pylintrc y ejecute PyLint de nuevo para ver que ahora las advertencias se han
suprimido.
TIP
Para usar un archivo .pylintrc desde un recurso compartido de red, cree una variable de entorno denominada PYLINTRC
con el valor del nombre de archivo en el recurso compartido de red con una ruta de acceso UNC o una letra de unidad
asignada. Por ejemplo, PYLINTRC=\\myshare\python\.pylintrc .
Definir comandos personalizados para proyectos de
Python
13/12/2021 • 14 minutes to read
Al trabajar con proyectos de Python, es posible que se encuentre cambiando a una ventana de comandos para
ejecutar módulos o scripts concretos, ejecutar comandos pip o ejecutar alguna otra herramienta arbitraria. Para
mejorar este flujo de trabajo, se pueden agregar comandos personalizados al submenú Python en el menú
contextual del proyecto de Python. Esos comandos se pueden ejecutar en una ventana de consola o en la
ventana de salida de Visual Studio. También se pueden usar expresiones regulares para indicar a Visual Studio
cómo analizar los errores y advertencias de la salida del comando.
Este menú contiene de forma predeterminada un solo comando, Ejecutar PyLint :
Los comandos personalizados aparecen en este mismo menú contextual. Los comandos personalizados se
agregan a un archivo de proyecto directamente cuando son de aplicación en ese proyecto individual en
cuestión. Los comandos personalizados también se pueden definir en un archivo .targets que se puede importar
fácilmente en varios archivos de proyecto.
Algunas plantillas de proyecto de Python en Visual Studio ya agregan sus propios comandos personalizados
mediante su archivo .targets. Por ejemplo, las plantillas Proyecto web de Bottle y Proyecto web de Flask agregan
dos comandos, Iniciar ser vidor e Iniciar el ser vidor de depuración . La plantilla Proyecto web de Django
agrega esos mismos comandos y unos cuantos más:
Cada comando personalizado puede hacer referencia a un archivo de Python, a un módulo de Python, a código
de Python en línea, a un archivo ejecutable al azar o a un comando de pip. También puede especificar cómo y
dónde se ejecuta el comando.
TIP
Cada vez que se realicen cambios en un archivo de proyecto en un editor de texto, será necesario volver a cargar el
proyecto en Visual Studio para que esos cambios surtan efecto. Por ejemplo, deberá volver a cargar un proyecto después
de agregar definiciones de comando personalizado para que esos comandos aparezcan en el menú contextual de dicho
proyecto.
Como puede que sepa, Visual Studio permite modificar el archivo de proyecto directamente. En primer lugar, haga clic con
el botón derecho en el archivo de proyecto y seleccione Descargar el proyecto ; luego, vuelva a hacer clic con el botón
derecho y seleccione Editar <project-name> para abrir el proyecto en el editor de Visual Studio. Hacemos y
guardamos las modificaciones necesarias, hacemos clic con el botón derecho en el proyecto una vez más y seleccionamos
Volver a cargar el proyecto , que le pedirá confirmación para cerrar el archivo de proyecto en el editor.
Bien es cierto que todos estos clics pueden resultar tediosos al desarrollar un comando personalizado. Para lograr un flujo
de trabajo más eficaz, cargue el proyecto en Visual Studio y además abra el archivo .pyproj en un editor aparte (por
ejemplo, otra instancia de Visual Studio, Visual Studio Code, el Bloc de notas, etc.). Al guardar los cambios en el editor y
cambiar a Visual Studio, este detecta los cambios y le pregunta si quiere volver a cargar el proyecto (El proyecto
<name> se ha modificado fuera del entorno ). Seleccione Volver a cargar . Los cambios se aplicarán
inmediatamente en un solo paso.
<PropertyGroup>
<PythonCommands>
$(PythonCommands);
</PythonCommands>
</PropertyGroup>
5. Cambie a Visual Studio y seleccione Volver a cargar cuando le pregunte acerca del cambio de archivo.
Tras ello, consulte de nuevo el menú Python para ver que Ejecutar PyLint sigue siendo el único
elemento aparece, dado que las líneas que hemos agregado replican únicamente el grupo de
propiedades <PythonCommands> predeterminado que contiene el comando de PyLint.
6. Cambie al editor con el archivo de proyecto y agregue la siguiente definición de <Target> después de
<PropertyGroup> . Como se explica más adelante en este artículo, este elemento Target define un
comando personalizado para ejecutar el archivo de inicio (identificado por la propiedad "StartupFile") por
medio de python.exe en una ventana de la consola. El atributo ExecuteIn="consolepause" usa una consola
que espera a que el usuario presione una tecla antes de cerrarse.
7. Agregue el valor del atributo Name del destino al grupo de propiedades <PythonCommands> que
agregamos anteriormente para que el elemento sea similar al siguiente código. El nombre del destino
que agregamos a esta lista es lo que se incorpora al menú de Python .
<PythonCommands>
$(PythonCommands);
Example_RunStartupFile
</PythonCommands>
Si quiere que el comando aparezca antes que los que hay definidos en $(PythonCommands) , colóquelo
antes de ese token.
8. Guarde el archivo de proyecto, cambie a Visual Studio y vuelva a cargar el proyecto cuando se le pida.
Después, haga clic con el botón derecho en el proyecto Python-CustomCommands y seleccione
Python . Debería haber un elemento Run star tup file (Ejecutar archivo de inicio) en el menú. Si no lo ve,
confirme que ha agregado el nombre al elemento <PythonCommands> . Vea también Solución de problemas
más adelante en este artículo.
9. Seleccione el comando Run star tup file (Ejecutar archivo de inicio) para que se abra una ventana de
comandos con el texto Hello custom commands seguido de Press any key to continue . Presione
cualquier tecla para cerrar la ventana.
10. Vuelva al editor con el archivo de proyecto abierto y cambie el valor del atributo ExecuteIn a output .
Guarde el archivo, cambie a Visual Studio, vuelva a cargar el proyecto e invoque el comando de nuevo.
Esta vez, verá que la salida del programa se muestra en la ventana Resultados de Visual Studio:
11. Para agregar más comandos, defina un elemento <Target> adecuado para cada comando, agregue el
nombre del destino al grupo de propiedades <PythonCommands> y vuelva a cargar el proyecto en Visual
Studio.
TIP
Si invoca un comando que usa propiedades del proyecto, como ($StartupFile) , y se produce un error en ese comando
porque no hay un token definido, Visual Studio lo deshabilita hasta que el proyecto se vuelva a cargar. Realizar cambios en
el proyecto que definan la propiedad no hace que el estado de estos comandos se actualice, de modo que en esos casos
seguirá siendo necesario volver a cargar el proyecto.
<!-- Output always appears in this form, with these exact attributes -->
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>
Para hacer referencia a propiedades del proyecto o a variables de entorno en los valores de atributo, use el
nombre dentro de un token $() , como $(StartupFile) y $(MSBuildProjectDirectory) . Para más información,
vea Propiedades de MSBuild.
Atributos de destino
AT RIB UTO O B L IGATO RIO DESC RIP C IÓ N
Atributos CreatePythonCommandItem
Ninguno de los valores de atributo distingue entre mayúsculas y minúsculas.
Para permitir que Visual Studio extraiga la información correcta de esas advertencias y las muestre en la
ventana Lista de errores , el valor de WarningRegex en el comando Ejecutar Pylint es el siguiente:
Tenga en cuenta que msg_id en el valor debe ser en realidad code ; vea el problema 3680.
Para cargar un archivo .targets en un proyecto, coloque un elemento <Import Project="(path)"> en cualquier
lugar dentro del elemento <Project> . Por ejemplo, si tiene un archivo denominado CustomCommands.targets
en una subcarpeta targets del proyecto, use el siguiente código:
<Import Project="targets/CustomCommands.targets"/>
NOTE
Cada vez que se modifica el archivo .targets, es necesario volver a cargar la solución que contiene un proyecto, no solo el
propio proyecto.
Comandos de ejemplo
Ejecutar PyLint (Target: module )
Aparece el siguiente código en el archivo Microsoft.PythonTools.targets:
<PropertyGroup>
<PythonCommands>$(PythonCommands);PythonRunPyLintCommand</PythonCommands>
<PyLintWarningRegex>
<![CDATA[^(?<filename>.+?)\((?<line>\d+),(?<column>\d+)\): warning (?<msg_id>.+?): (?<message>.+?)$]]>
</PyLintWarningRegex>
</PropertyGroup>
<Target Name="PythonRunPyLintCommand"
Label="resource:Microsoft.PythonTools.Common;Microsoft.PythonTools.Common.Strings;RunPyLintLabel"
Returns="@(Commands)">
<CreatePythonCommandItem Target="pylint.lint"
TargetType="module"
Arguments=""--msg-template={abspath}({line},{column}): warning {msg_id}:
{msg} [{C}:{symbol}]" -r n @(Compile, ' ')"
WorkingDirectory="$(MSBuildProjectDirectory)"
ExecuteIn="output"
RequiredPackages="pylint>=1.0.0"
WarningRegex="$(PyLintWarningRegex)">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>
<PropertyGroup>
<PythonCommands>$(PythonCommands);ShowOutdatedPackages</PythonCommands>
</PropertyGroup>
<PropertyGroup>
<PythonCommands>$(PythonCommands);ShowAllPythonFilesInProject</PythonCommands>
</PropertyGroup>
<PropertyGroup>
<PythonCommands>PipInstallDevCommand;$(PythonCommands);</PythonCommands>
</PropertyGroup>
<PropertyGroup>
<PythonCommands>$(PythonCommands);BdistWheelCommand;</PythonCommands>
</PropertyGroup>
Solución de problemas
Mensaje: "No se pudo cargar el archivo del proyecto"
Indica que hay errores de sintaxis en el archivo de proyecto. El mensaje refleja el error específico con un número
de línea y una posición de carácter.
La ventana de la consola se cierra inmediatamente después de que el comando se ejecute
Use ExecuteIn="consolepause" en lugar de ExecuteIn="console" .
El comando no aparece en el menú
Compruebe que el comando está incluido en el grupo de propiedades <PythonCommands> y que el nombre que
figura en la lista de comandos es el mismo que el nombre especificado en el elemento <Target> .
Por ejemplo, en el siguiente código, el nombre "Example" en el grupo de propiedades no coincide con el nombre
"ExampleCommand" en el destino. Visual Studio no encuentra un comando llamado "Example", así que no se
muestra ningún comando. Use "ExampleCommand" en la lista de comandos, o bien cambie el nombre del
destino a sencillamente "Example".
<PropertyGroup>
<PythonCommands>$(PythonCommands);Example</PythonCommands>
</PropertyGroup>
<Target Name="ExampleCommand" Label="Example Command" Returns="@(Commands)">
<!-- ... -->
</Target>
Mensaje: "Error al ejecutar <command name>. No se pudo obtener el comando <target-name> del
proyecto."
Indica que el contenido de los elementos <Target> o <CreatePythonCommandItem> es incorrecto. Esto puede
deberse a lo siguiente:
El atributo Target necesario está vacío.
El atributo TargetType necesario está vacío o contiene un valor no reconocido.
El atributo ExecuteIn necesario está vacío o contiene un valor no reconocido.
Se ha especificado ErrorRegex o WarningRegex sin definir ExecuteIn="output" .
Existen atributos no reconocidos en el elemento. Por ejemplo, puede que haya usado Argumnets (mal escrito)
en lugar de Arguments .
Los valores de atributo pueden estar vacíos si se hace referencia a una propiedad que no está definida. Por
ejemplo, si usa el token $(StartupFile) , pero no ha definido ningún archivo de inicio en el proyecto, el token se
resuelve como una cadena vacía. En tales casos, conviene definir un valor predeterminado. Por ejemplo, los
comandos Iniciar ser vidor e Iniciar el ser vidor de depuración definidos en las plantillas de proyecto de
Bottle, Flask y Django se establecen de forma predeterminada en manage.py si no se ha especificado un archivo
de inicio del servidor en las propiedades del proyecto.
Visual Studio deja de responder cuando el comando se ejecuta
Probablemente esté intentando ejecutar un comando de consola con ExecuteIn="output" , en cuyo caso Visual
Studio se puede bloquear al intentar analizar la salida. Utilice ExecuteIn="console" en su lugar. (Vea el problema
3682).
El comando ejecutable "no se reconoce como un comando interno o externo, programa o archivo por lotes
ejecutable"
Al usar TargetType="executable" , el valor de Target debe ser únicamente el nombre del programa sin
argumentos, como python o python.exe exclusivamente. Mueva los argumentos que haya al atributo Arguments .
Uso de la ventana interactiva de Python
13/12/2021 • 7 minutes to read
Visual Studio proporciona una ventana interactiva read-evaluate-print loop (REPL) para cada entorno de Python,
que ofrece mejoras con respecto al REPL obtenido con python.exe en la línea de comandos. La ventana
interactiva (que se abre con los comandos de menú Ver > Otras ventanas > <entorno >Interactivo ) le
permite escribir código de Python arbitrario y ver resultados inmediatos. Esta manera de codificación le ayuda a
obtener información y experimentar con las API y las bibliotecas, así como a desarrollar de manera interactiva
código de trabajo para incluirlo en sus proyectos.
Visual Studio tiene una serie de modos de REPL de Python entre los que se puede elegir:
IPython sin PyLab REPL habla con el IPython estándar No Sí, ventana
back-end de IPython independiente
En este artículo se describen los modos de REPL Estándar y Depurar . Para obtener más información sobre los
modos de IPython, vea Uso de IPython en la ventana interactiva.
Para obtener un tutorial detallado con ejemplos, incluidas las interacciones con el editor como Ctrl +Entrar , vea
Paso 3 del tutorial: Uso de la ventana interactiva de REPL.
En segundo lugar, cerca del botón del menú Ver > Otras ventanas , se encuentra el comando Ventana
interactiva de Python , que puede usar en su entorno predeterminado, así como un comando para cambiar a
la ventana de entornos :
En tercer lugar, puede abrir una ventana interactiva en el archivo de inicio del proyecto o en un archivo
independiente; para ello, seleccione el comando de menú Depurar > Ejecutar <Project | File> en la
ventana interactiva de Python (Mayús +Alt +F5 ):
Por último, puede seleccionar código en el archivo y usar el comando Enviar a interactivo descrito a
continuación.
La excepción se produce cuando se necesitan líneas de código adicionales para realizar una instrucción
completa, como cuando una instrucción for termina en dos puntos como se ha mostrado anteriormente. En
estos casos, el símbolo de la línea cambia a ... , lo que indica que necesita escribir líneas adicionales para el
bloque, tal como se muestra en las líneas cuarta y quinta del gráfico anterior. Si presiona Entrar en una línea en
blanco, la ventana interactiva cierra el bloque y lo ejecuta en el intérprete.
TIP
La ventana interactiva ofrece mejoras con respecto a la experiencia de REPL de línea de comandos de Python habitual,
ya que aplica sangrías automáticamente a las instrucciones que pertenecen a un ámbito adyacente. Su historial
(recuperado con la flecha arriba) también ofrece elementos multilínea, mientras que el REPL de la línea de comandos solo
ofrece líneas simples.
La ventana interactiva también admite varios metacomandos. Todos los metacomandos empiezan con $ , y
puede escribir $help para obtener una lista de los metacomandos y $help <command> para obtener los detalles
de uso de un comando específico.
M ETA C O M A N DO DESC RIP C IÓ N
$load Carga los comandos del archivo y los ejecuta hasta que
terminan.
$load Carga los comandos del archivo y los ejecuta hasta que
terminan.
Los comandos también se extienden mediante extensiones de Visual Studio con la implementación y
exportación de IInteractiveWindowCommand (ejemplo).
Ámbitos de cambio
De forma predeterminada, la ventana interactiva de un proyecto se limita al archivo de inicio del proyecto,
como si lo ejecutara desde el símbolo del sistema. Para un archivo independiente, se limita a dicho archivo. No
obstante, el menú desplegable de la parte superior de la ventana interactiva permite cambiar en cualquier
momento el ámbito durante la sesión de REPL:
Después de importar un módulo, como escribir import importlib , aparecen opciones en el menú desplegable
para cambiar a cualquier ámbito en dicho módulo. Un mensaje en la ventana interactiva también indica el
nuevo ámbito, para que pueda realizar un seguimiento de cómo ha adoptado un estado determinado durante la
sesión.
Al escribir dir() en un ámbito, se muestran identificadores válidos en dicho ámbito, como nombres de
funciones, clases y variables. Por ejemplo, con import importlib seguido de dir() , se muestra lo siguiente:
Este comando resulta útil para el desarrollo de código iterativo o evolutivo, incluido probar el código a medida
que se desarrolla. Por ejemplo, después de enviar una porción de código a la ventana interactiva y ver la salida,
puede presionar la flecha arriba para volver a ver el código, modificarlo y probarlo rápidamente si presiona las
teclas Ctrl +Entrar . (Si presiona Entrar al final de la entrada, la ejecuta, pero, si presiona Entrar en el medio de
la entrada, inserta una nueva línea). Cuando tenga el código que desea, puede volver a copiarlo con facilidad en
el archivo del proyecto.
TIP
De manera predeterminada, Visual Studio quita >>> y ... REPL pregunta al pegar código desde la ventana interactiva al
editor. Puede cambiar este comportamiento en la pestaña Herramientas > Opciones > Editor de texto > Python >
Opciones avanzadas con la opción Quitar mensajes de REPL al pegar . Vea Opciones: Otras opciones.
Comportamiento de IntelliSense
La ventana interactiva incluye IntelliSense basándose en los objetos activos, a diferencia del editor de código,
en el que IntelliSense se basa exclusivamente en el análisis de código fuente. Estas sugerencias son más
correctas en la ventana interactiva , sobre todo, con el código generado de forma dinámica. El inconveniente es
que las funciones con efectos secundarios (como los mensajes de registro) pueden afectar a su experiencia de
desarrollo.
Si este comportamiento es un problema, cambie la configuración en Herramientas > Opciones > Python >
Ventanas Interactivas en el grupo Modo de finalización , como se describe en Opciones: Opciones de las
ventanas interactivas.
Uso de IPython en la ventana interactiva
13/12/2021 • 2 minutes to read
La ventana interactiva de Visual Studio en modo de IPython es un entorno de desarrollo interactivo avanzado y
fácil de usar que tiene características de computación paralela interactiva. En este artículo se explica cómo usar
IPython en la ventana interactiva de Visual Studio, en la que también están disponibles todas las características
habituales de la ventana interactiva.
Para este tutorial, deberá tener instalados IPython, numpy y matplotlib. Si usa Anaconda, estas bibliotecas ya
están instaladas. En el resto del tutorial se da por supuesto que usa Anaconda.
NOTE
IronPython no admite IPython, a pesar de que puede seleccionarlo en el formulario Interactive Options (Opciones de
interactivo). Para obtener más información, vea la Solicitud de características.
1. Abra Visual Studio, cambie a la ventana Entornos de Python , en Ver > Otras ventanas > Entornos
de Python , y después seleccione el entorno de Anaconda.
2. Vaya a la pestaña Paquetes (Conda) (que pueden aparecer como pip o Paquetes ) de ese entorno para
asegurarse de que ipython y matplotlib se muestren. De lo contrario, instálelos. Vea Ventana Entorno
de Python - pestaña Paquetes.
3. Seleccione la pestaña Información general y después Usar modo interactivo de IPython . (En Visual
Studio 2015, seleccione Configurar opciones interactivas para abrir el cuadro de diálogo Opciones ,
después establezca Modo interactivo en IPython y haga clic en Aceptar ).
4. Seleccione Abrir ventana interactiva para que aparezca la ventana interactiva en modo de IPython.
Puede que necesite restablecer la ventana si solo ha cambiado el modo interactivo; también puede que
necesite presionar Entrar si solo aparece un mensaje >>>, para recibir una solicitud como En [2] .
x = np.linspace(0, 5, 10)
y = x ** 2
plt.plot(x, y, 'r', x, x ** 3, 'g', x, x ** 4, 'b')
6. Después de escribir la última línea, debe aparecer un gráfico insertado, cuyo tamaño puede modificar si
arrastra la esquina inferior derecha.
7. En lugar de escribir en el REPL, puede escribir código en el editor, seleccionarlo, hacer clic con el botón
derecho y seleccionar el comando Enviar a interactivo (o presionar Ctrl +Entrar ). Intente pegar el
código siguiente en un nuevo archivo en el editor; selecciónelo con Ctrl +A y envíelo a la ventana
interactiva . (Visual Studio envía el código como una unidad para evitar que se representen gráficos
intermedios o parciales. Y si no tiene un proyecto de Python abierto con otro entorno seleccionado,
Visual Studio abre una ventana interactiva para el entorno que esté seleccionado como predeterminado
en la ventana Entornos de Python ).
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()
8. Para ver los gráficos fuera de la ventana interactiva , ejecute el código en lugar de utilizar el comando
Depurar > Iniciar sin depurar .
IPython tiene muchas otras características útiles, como el escape al shell del sistema, la sustitución de variables,
la captura de salidas, etc. Vea la documentación de IPython para obtener más información.
Vea también
Azure Data Science Virtual Machine está preconfigurado para ejecutar cuadernos de Jupyter, junto con una
amplia variedad de otras herramientas de ciencia de datos.
Depurar el código de Python
13/12/2021 • 15 minutes to read
Visual Studio proporciona una experiencia de depuración completa para Python, lo que incluye la asociación a
procesos en ejecución, la evaluación de expresiones en las ventanas Inspección e Inmediato , la inspección de
variables locales, los puntos de interrupción, las instrucciones Depurar paso a paso por
instrucciones/procedimientos/para salir, Establecer instrucción siguiente , etc.
Vea también los siguientes artículos de depuración específicos para distintos escenarios:
Depuración remota de Linux
Mixed-mode Python/C++ debugging (Depuración en modo mixto Python/C++)
Symbols for mixed-mode debugging (Símbolos de depuración en modo mixto)
TIP
Python en Visual Studio admite la depuración sin un proyecto. Con un archivo independiente de Python abierto, haga clic
con el botón derecho en el editor y seleccione Iniciar con depuración . Visual Studio inicia el script con el entorno
predeterminado global (vea Entornos de Python) y sin argumentos. Pero desde ese momento, dispone de compatibilidad
total para depuración.
Para controlar el entorno y los argumentos, cree un proyecto para el código de manera sencilla con la plantilla de
proyecto Desde código de Python existente.
Depuración básica
El flujo de trabajo de depuración básica conlleva configurar puntos de interrupción, recorrer paso a paso el
código, inspeccionar valores y administrar excepciones, tal y como se describe en las secciones siguientes.
Puede iniciar una sesión de depuración con el comando Depurar > Iniciar depuración , el botón Iniciar de la
barra de herramientas o la tecla F5 . Estas acciones inician el archivo de inicio del proyecto (se muestra en
negrita en el Explorador de soluciones ) con el entorno activo del proyecto y los argumentos de línea de
comandos o las rutas de búsqueda que se hayan especificado en Propiedades del proyecto (vea Project
debugging options [Opciones de depuración de proyectos]). Visual Studio 2017, versión 15.6 y posteriores, le
avisa si no tiene un archivo de inicio configurado; en las versiones anteriores, es posible que se abra una
ventana de salida con el intérprete de Python en ejecución o que la ventana de salida aparezca brevemente y
luego desaparezca. En cualquier caso, haga clic con el botón derecho en el archivo adecuado y seleccione
Establecer como archivo de inicio .
NOTE
El depurador siempre se inicia con el entorno de Python activo para el proyecto. Para cambiar el entorno, active otro
distinto como se explica en Cómo asignar el entorno de Python que se usa en un proyecto.
Puntos de interrupción
Los puntos de interrupción detienen la ejecución del código en un punto especificado, a fin de poder
inspeccionar el estado del programa. Para establecer los puntos de interrupción, haga clic en el margen
izquierdo del editor de código o haga clic con el botón derecho en una línea de código y seleccione Punto de
interrupción > Inser tar punto de interrupción . En cada línea con un punto de interrupción, aparece un
punto rojo.
Para eliminar un punto de interrupción, haga clic en el punto rojo o haga clic con el botón derecho en la línea de
código y seleccione Punto de interrupción > Eliminar punto de interrupción . También puede
deshabilitarlo sin quitarlo; para ello, use el comando Punto de interrupción > Deshabilitar punto de
interrupción .
NOTE
Algunos puntos de interrupción de Python pueden resultar sorprendentes para aquellos desarrolladores que hayan
trabajado con otros lenguajes de programación. En Python, todo el archivo es código ejecutable, por lo que Python
ejecuta el archivo cuando se carga para procesar cualquier definición de clase o función de nivel superior. Si se ha
establecido un punto de interrupción, puede observar que el depurador se interrumpe parcialmente a través de una
declaración de clase. Este comportamiento es correcto, aunque a veces sea sorprendente.
Puede personalizar las condiciones en que se desencadena un punto de interrupción, como que la interrupción
se lleve a cabo cuando una variable se establece en un valor concreto o en un intervalo de valor. Para definir las
condiciones, haga clic con el botón derecho en el punto rojo del punto de interrupción, seleccione Condición y
después cree expresiones con código Python. Para obtener todos los detalles sobre esta característica de Visual
Studio, vea Breakpoint conditions (Condiciones de los puntos de interrupción).
Al definir las condiciones, también puede completar el campo Acción y crear un mensaje para registrarlo en la
ventana de salida, con la opción de que la ejecución continúe automáticamente. Al registrar el mensaje se crea lo
que se denomina un punto de seguimiento sin agregar código de registro directamente en la aplicación:
Examinar el código
Una vez detenido en un punto de interrupción, hay varias maneras de recorrer el código paso a paso o de
ejecutar bloques de código antes de que se produzca una nueva interrupción. Estos comandos están disponibles
en varias ubicaciones, como la barra de herramientas de depuración de la parte superior, el menú Depurar , en
el menú contextual del editor de código y mediante métodos abreviados de teclado (aunque no todos los
comandos están en todas las ubicaciones):
C A RA C T ERÍST IC A P UL SA C IÓ N DE T EC L A DESC RIP C IÓ N
Paso a paso para salir Mayús +F11 Ejecuta el código hasta el final de la
función actual y después pasa a la
instrucción de llamada. Este comando
resulta útil cuando no necesita depurar
el resto de la función actual.
La ventana Variables locales (Depurar > Ventanas > Variables locales ) muestra todas las variables que se
encuentran en el ámbito actual, que se pueden volver a modificar:
Para obtener más información sobre el uso de Automático y Variables locales , vea Inspect variables in the
Autos and Locals windows (Inspeccionar las variables en las ventanas Variables locales y Automático).
Las ventanas Inspección (Depurar > Ventanas > Inspección > Inspección 1-4 ) permiten especificar
expresiones arbitrarias de Python y ver los resultados. Las expresiones se vuelven a evaluar para cada paso:
Para obtener más información sobre el uso de Inspección , vea Set a watch on variables using the Watch and
QuickWatch windows (Establecimiento de una inspección en variables mediante las ventanas Inspección e
Inspección rápida).
Al inspeccionar un valor de cadena ( str , unicode , bytes y bytearray se consideran cadenas para este
propósito), aparece un icono de lupa a la derecha del valor. Al hacer clic en este icono, se muestra el valor de
cadena sin comillas en un cuadro de diálogo emergente, con las opciones de ajuste y desplazamiento, que
resultan útiles para cadenas largas. Además, seleccionar la flecha desplegable en el icono le permite seleccionar
texto sin formato y visualizaciones HTML, XML y JSON:
Las visualizaciones HTML, XML y JSON aparecen en ventanas emergentes independientes con resaltado de
sintaxis y vistas de árbol.
Excepciones
Si se produce algún error en su programa durante la depuración, pero no dispone de un controlador de
excepciones para él, el depurador se interrumpe en el punto de la excepción:
En este punto puede inspeccionar el estado del programa, incluida la pila de llamadas. En cambio, si intenta
recorrer el código, la excepción sigue produciéndose hasta que se controle o hasta que el programa se cierre.
El comando de menú Depurar > Ventanas > Configuración de excepciones abre una ventana en la que
puede expandir Excepciones de Python :
La casilla de cada excepción controla si el depurador siempre se interrumpe cuando se produce la excepción.
Active esta casilla si quiere que las interrupciones sean más frecuentes para una excepción concreta.
De manera predeterminada, la mayoría de las excepciones activan una interrupción cuando no se pueda
encontrar un controlador de excepciones en el código fuente. Para cambiar este comportamiento, haga clic con
el botón derecho en cualquier excepción y modifique la opción Continuar cuando no se controle en el
código de usuario . Desactive esta casilla si quiere que las interrupciones sean menos frecuentes para una
excepción.
Para configurar una excepción que no aparece en esta lista, haga clic en el botón Agregar para agregarla. El
nombre debe coincidir con el nombre completo de la excepción.
Iniciador de Python estándar Utiliza código de depuración escrito en Portable Python que
es compatible con CPython, IronPython y variantes, como
Stackless Python. Proporciona la mejor experiencia de
depuración de código Python puro. Al realizar una asociación
a un proceso python.exe en ejecución, se usa este iniciador.
Este selector también proporciona depuración en modo
mixto para CPython, que permite cambiar sin problemas
entre los códigos C/C++ y Python.
Iniciador de IronPython (.NET) Usa el depurador de .NET, que solo funciona con IronPython,
pero permite cambiar entre cualquier proyecto en lenguaje
.NET, incluidos C# y VB. Este selector se usa para establecer
una asociación con un proceso .NET en ejecución que
hospeda IronPython.
Ruta del intérprete Reemplaza la ruta de acceso asociada con el entorno actual.
El valor puede resultar útil para iniciar el script con un
intérprete no estándar.
La ventana Interactiva de depuración admite metacomandos especiales además de los comandos estándar
de REPL:
Tenga en cuenta que las ventanas estándar del depurador, como Procesos , Subprocesos y Pila de llamadas ,
no están sincronizadas con la ventana Interactiva de depuración . El cambio del marco, subproceso o proceso
activo en la ventana Interactiva de depuración no afecta a las otras ventanas del depurador. Del mismo
modo, el cambio del marco, subproceso o proceso activo en las otras ventanas del depurador no afecta a la
ventana Interactiva de depuración .
En este caso, seleccione Usar el depurador heredado para establecer la opción Usar el depurador
heredado y reiniciar el depurador.
La advertencia El paquete del depurador está obsoleto aparece cuando se ha instalado una versión
anterior a 4.x de ptvsd:
IMPORTANT
Aunque puede omitir la advertencia en algunas versiones de ptvsd, es posible que Visual Studio no funcione
correctamente.
3. Si la versión es anterior a 4.1.1a9 (la versión incluida con Visual Studio), seleccione el símbolo X a la
derecha del paquete para desinstalar la versión anterior. Visual Studio usará la versión incluida. (También
puede desinstalarla desde PowerShell mediante pip uninstall ptvsd ).
4. Como alternativa, puede actualizar el paquete de ptvsd a su versión más reciente siguiendo las
instrucciones de la sección Solución de problemas.
Solución de problemas
Para la actualización de ptvsd de Visual Studio 2019 (versión 16.4 y posteriores)
Si tiene problemas con el depurador, primero actualice su versión del depurador de la siguiente manera:
1. Navegue a la pestaña Paquetes en la ventana Entornos de Python .
2. Escriba ptvsd --upgrade en el cuadro de búsqueda y seleccione Ejecutar comando: pip install ptvsd
--upgrade . (También puede usar el mismo comando desde PowerShell).
3. Inicie la depuración y recorra los pasos que sean necesarios para reproducir el problema. Durante este
tiempo, los registros de depuración aparecen en la ventana Salida bajo Registro del host de
adaptador de depuración . Luego puede copiar los registros de esa ventana y pegarlos en un problema
de GitHub, correo electrónico, etc.
4. Si Visual Studio deja de responder o le resulta imposible acceder a la ventana Salida , reinicie
Visual Studio, abra una ventana de comandos y escriba el siguiente comando:
DebugAdapterHost.Logging /On
5. Inicie la depuración y reproduzca el problema de nuevo. Después, puede encontrar los registros del
depurador en %temp%\DebugAdapterHostLog.txt .
Vea también
Para obtener información detallada sobre el depurador de Visual Studio, vea Debugging in Visual Studio
(Depuración en Visual Studio).
Depurar código de Python en Linux de forma
remota
13/12/2021 • 16 minutes to read
En Visual Studio se pueden iniciar y depurar aplicaciones de Python de manera local y remota en un equipo
Windows (vea Depuración remota). También puede realizar la depuración remota en un sistema operativo, un
dispositivo o una implementación de Python diferentes a CPython mediante la biblioteca ptvsd.
Al usar ptvsd, el código de Python que se depura hospeda el servidor de depuración al que puede asociar Visual
Studio. El hospedaje necesita una pequeña modificación en el código para importar y habilitar al servidor.
Además, es posible que haya que modificar la configuración de la red o del firewall en el equipo remoto para
permitir conexiones TCP.
Para obtener una introducción a la depuración remota, vea Deep Dive: Cross-platform remote
debugging (Profundización: Depuración remota multiplataforma) (youtube.com, 6 minutos 22 segundos), que
se aplica a Visual Studio 2015 y 2017.
guesses_made = 0
name = input('Hello! What is your name?\n')
number = random.randint(1, 20)
print('Well, {0}, I am thinking of a number between 1 and 20.'.format(name))
NOTE
Es buena idea registrar la versión de ptvsd que se instala en caso de necesitarla para solucionar problemas; la lista
de ptvsd también muestra las versiones disponibles.
3. Habilite la depuración remota al agregar el código siguiente al primer punto posible de guessing-
game.py, delante de otro código. (Aunque no es un requisito estricto, es imposible depurar subprocesos
en segundo plano generados antes de la llamada a la función enable_attach ).
import ptvsd
ptvsd.enable_attach()
TIP
Además de enable_attach y wait_for_attach , ptvsd también proporciona una función del asistente
break_into_debugger , que actúa como un punto de interrupción de programación si el depurador está asociado.
También hay una función is_attached que devuelve True si el depurador está asociado (tenga en cuenta que no es
necesario comprobar este resultado antes de llamar a cualquier otra función ptvsd ).
Si inicia otro programa en el equipo remoto después de rellenar esta lista, haga clic en el botón
Actualizar .
7. Seleccione el proceso para depurar y después haga clic en Adjuntar , o haga doble clic en el proceso.
8. Visual Studio cambia después al modo de depuración mientras el script continúa ejecutándose en el
equipo remoto, lo que proporciona todas las capacidades normales de depuración. Por ejemplo,
establezca un punto de interrupción en la línea if guess < number: , después cambie al equipo remoto y
escriba otro intento. Una vez hecho esto, el programa Visual Studio del equipo local se detiene en ese
punto de interrupción, muestra las variables locales, etc.:
9. Al detener la depuración, Visual Studio se desconecta del programa, que continúa ejecutándose en el
equipo remoto. ptvsd también sigue escuchando para conectar depuradores, por lo que se puede volver
a conectar al proceso en cualquier momento.
Solución de problemas de conexión
1. Asegúrese de que ha seleccionado Depuración remota de Python (ptvsd) para el Tipo de conexión
(Depuración remota de Python para Transpor te con versiones anteriores).
2. Compruebe que el secreto en Destino de la conexión (o Calificador ) coincide exactamente con el
secreto en el código remoto.
3. Compruebe que la dirección IP en Destino de la conexión (o Calificador ) coincide exactamente con la
del equipo remoto.
4. Compruebe que esté abierto el puerto de depuración remota en el equipo remoto y que ha incluido el
sufijo de puerto en el destino de la conexión, por ejemplo :5678 .
Si necesita usar un puerto diferente, puede especificarlo en la llamada a enable_attach mediante el
argumento address , como en ptvsd.enable_attach(address = ('0.0.0.0', 8080)) . En este caso, abra
ese puerto concreto en el firewall.
5. Compruebe que la versión de ptvsd instalada en el equipo remoto, tal como la devuelve pip3 list ,
coincide con la que usa la versión de las herramientas de Python que se usa en Visual Studio en la tabla
siguiente. Si es necesario, actualice ptvsd en el equipo remoto.
2015 2.2.6
2013 2.2.2
De forma predeterminada, la conexión al servidor de depuración remota de ptvsd 3.x solo está protegida por el
secreto y todos los datos se pasan como texto sin formato. Para una conexión más segura, ptvsd 3.x admite SSL
con el protocolo tcsp , que se configura de la siguiente manera:
1. En el equipo remoto, genere archivos de certificado autofirmado y de clave independientes con openssl:
openssl req -new -x509 -days 365 -nodes -out cert.cer -keyout cert.key
Cuando se le solicite, use el nombre de host o la dirección IP (lo que use para conectarse) para el
Nombre común cuando se lo solicite openssl.
(Vea Certificados autofirmados en la documentación del módulo ssl de Python para obtener más
detalles. Tenga en cuenta que en esa documentación el comando solo genera un único archivo
combinado).
2. En el código, modifique la llamada a enable_attach para incluir los argumentos certfile y keyfile
usando los nombres de archivo como valores (estos argumentos tienen el mismo significado que para la
función estándar ssl.wrap_socket de Python):
También puede realizar el mismo cambio en el archivo de código en el equipo local, pero dado que este
código no se ejecuta realmente, no es estrictamente necesario.
3. Reinicie el programa de Python en el equipo remoto, para prepararlo para la depuración.
4. Proteja el canal agregando el certificado a la CA raíz de confianza en el equipo Windows con Visual
Studio:
a. Copie el archivo de certificado desde el equipo remoto al equipo local.
b. Abra el Panel de Control y vaya a Herramientas administrativas > Administrar cer tificados
de equipo .
c. En la ventana que aparece, expanda Entidades de cer tificación raíz de confianza en el lado
izquierdo, haga clic con el botón derecho en Cer tificados y seleccione Todas las tareas >
Impor tar .
d. Vaya al archivo .cer copiado desde el equipo remoto, selecciónelo y, después, haga clic en los cuadros
de diálogo para completar la importación.
5. Repita el proceso de asociación en Visual Studio como se ha descrito anteriormente y ahora use tcps://
como protocolo para el Destino de la conexión (o Calificador ).
6. Visual Studio le avisará sobre posibles problemas de certificado cuando se conecta a través de SSL.
Puede pasar por alto las advertencias y continuar, pero aunque el canal sigue cifrado frente a la
intercepción, puede estar abierto a ataques de tipo "Man in the middle".
a. Si ve la siguiente advertencia El cer tificado remoto no es de confianza , significa que no ha
agregado correctamente el certificado a la CA raíz de confianza. Compruebe esos pasos y vuelve a
intentarlo.
b. Si ve la siguiente advertencia El nombre del cer tificado remoto no coincide con el nombre
de host , significa que no se han usado la dirección IP o el nombre de host correctos como
Nombre común al crear el certificado.
En Visual Studio se pueden iniciar y depurar aplicaciones de Python de manera local y remota en un equipo
Windows (vea Depuración remota). También puede realizar la depuración remota en un sistema operativo, un
dispositivo o una implementación de Python diferentes a CPython mediante la biblioteca debugpy.
Al usar debugpy, el código de Python que se depura hospeda el servidor de depuración al que puede asociar
Visual Studio. El hospedaje necesita una pequeña modificación en el código para importar y habilitar al servidor.
Además, es posible que haya que modificar la configuración de la red o del firewall en el equipo remoto para
permitir conexiones TCP.
NOTE
En Visual Studio 2019 16.4 y versiones anteriores, se usó la biblioteca ptvsd. La biblioteca debugpy reemplazó a ptvsd 4
en Visual Studio 2019 16.5.
NOTE
Este tutorial se basa en Visual Studio 2019 16.6.
Puede crear fácilmente una máquina virtual de Linux en Azure y acceder mediante Escritorio remoto desde
Windows. Ubuntu para la máquina virtual resulta útil porque Python está instalado de forma predeterminada;
de lo contrario, vea la lista de Instalación de los intérpretes de Python para obtener otras ubicaciones de
descarga de Python.
Para obtener detalles sobre cómo crear una regla de firewall para una máquina virtual de Azure, vea Apertura
de puertos en una máquina virtual con Azure Portal.
guesses_made = 0
name = input('Hello! What is your name?\n')
number = random.randint(1, 20)
print('Well, {0}, I am thinking of a number between 1 and 20.'.format(name))
NOTE
Es buena idea registrar la versión de debugpy que se instala en caso de necesitarla para solucionar problemas; la
lista de debugpy también muestra las versiones disponibles.
3. Habilite la depuración remota al agregar el código siguiente al primer punto posible de guessing-
game.py, delante de otro código. (Aunque no es un requisito estricto, es imposible depurar subprocesos
en segundo plano generados antes de la llamada a la función listen ).
import debugpy
debugpy.listen(5678)
4. Guarde el archivo y ejecute python3 guessing-game.py . La llamada a listen se ejecuta en segundo plano
y espera las conexiones entrantes mientras se interactúa con el programa. Si lo desea, se puede llamar a
la función wait_for_client después de listen para bloquear el programa hasta que se asocie el
depurador.
TIP
Además de listen y wait_for_client , debugpy también proporciona una función del asistente breakpoint , que
actúa como un punto de interrupción de programación si el depurador está asociado. También hay una función
is_client_connected que devuelve True si el depurador está asociado (tenga en cuenta que no es necesario
comprobar este resultado antes de llamar a cualquier otra función debugpy ).
Si inicia otro programa en el equipo remoto después de rellenar esta lista, haga clic en el botón
Actualizar .
7. Seleccione el proceso para depurar y después haga clic en Adjuntar , o haga doble clic en el proceso.
8. Visual Studio cambia después al modo de depuración mientras el script continúa ejecutándose en el
equipo remoto, lo que proporciona todas las capacidades normales de depuración. Por ejemplo,
establezca un punto de interrupción en la línea if guess < number: , después cambie al equipo remoto y
escriba otro intento. Una vez hecho esto, el programa Visual Studio del equipo local se detiene en ese
punto de interrupción, muestra las variables locales, etc.:
9. Al detener la depuración, Visual Studio se desconecta del programa, que continúa ejecutándose en el
equipo remoto. debugpy también sigue escuchando para conectar depuradores, por lo que se puede
volver a conectar al proceso en cualquier momento.
Solución de problemas de conexión
1. Asegúrese de haber seleccionado Remota de Python (debugpy) para Tipo de conexión
2. Compruebe que el secreto en Destino de la conexión coincide exactamente con el secreto en el código
remoto.
3. Compruebe que la dirección IP en Destino de la conexión coincide exactamente con la del equipo
remoto.
4. Compruebe que ha abierto el puerto de depuración remota en el equipo remoto y que ha incluido el
sufijo de puerto en el destino de la conexión, por ejemplo :5678 .
Si necesita usar un puerto diferente, puede especificarlo en listen , como en
debugpy.listen((host, port)) . En este caso, abra ese puerto concreto en el firewall.
5. Compruebe que la versión de debugpy instalada en el equipo remoto, tal como la devuelve pip3 list ,
coincide con la que usa la versión de las herramientas de Python que se usa en Visual Studio en la tabla
siguiente. Si es necesario, actualice debugpy en el equipo remoto.
openssl req -new -x509 -days 365 -nodes -out cert.cer -keyout cert.key
Cuando se le solicite, use el nombre de host o la dirección IP (lo que use para conectarse) para el
Nombre común cuando se lo solicite openssl.
(Vea Certificados autofirmados en la documentación del módulo ssl de Python para obtener más
detalles. Tenga en cuenta que en esa documentación el comando solo genera un único archivo
combinado).
2. En el código, modifique la llamada a enable_attach para incluir los argumentos certfile y keyfile
usando los nombres de archivo como valores (estos argumentos tienen el mismo significado que para la
función estándar ssl.wrap_socket de Python):
También puede realizar el mismo cambio en el archivo de código en el equipo local, pero dado que este
código no se ejecuta realmente, no es estrictamente necesario.
3. Reinicie el programa de Python en el equipo remoto, para prepararlo para la depuración.
4. Proteja el canal agregando el certificado a la CA raíz de confianza en el equipo Windows con Visual
Studio:
a. Copie el archivo de certificado desde el equipo remoto al equipo local.
b. Abra el Panel de Control y vaya a Herramientas administrativas > Administrar cer tificados
de equipo .
c. En la ventana que aparece, expanda Entidades de cer tificación raíz de confianza en el lado
izquierdo, haga clic con el botón derecho en Cer tificados y seleccione Todas las tareas >
Impor tar .
d. Vaya al archivo .cer copiado desde el equipo remoto, selecciónelo y, después, haga clic en los cuadros
de diálogo para completar la importación.
5. Repita el proceso de asociación en Visual Studio como se ha descrito anteriormente y ahora use tcps://
como protocolo para el Destino de la conexión (o Calificador ).
6. Visual Studio le avisará sobre posibles problemas de certificado cuando se conecta a través de SSL.
Puede pasar por alto las advertencias y continuar, pero aunque el canal sigue cifrado frente a la
intercepción, puede estar abierto a ataques de tipo "Man in the middle".
a. Si ve la siguiente advertencia El cer tificado remoto no es de confianza , significa que no ha
agregado correctamente el certificado a la CA raíz de confianza. Compruebe esos pasos y vuelve a
intentarlo.
b. Si ve la siguiente advertencia El nombre del cer tificado remoto no coincide con el nombre
de host , significa que no se han usado la dirección IP o el nombre de host correctos como
Nombre común al crear el certificado.
Publicación en Azure App Service
13/12/2021 • 2 minutes to read
Actualmente, Python es compatible con Azure App Service para Linux y se pueden publicar aplicaciones con la
implementación de Git y los contenedores, tal como se describe en este artículo.
NOTE
La compatibilidad de Python con Azure App Service para Windows oficialmente entró en desuso. Como resultado, el
comando Publish de Visual Studio solo se admite oficialmente para un destino de IIS y la depuración remota de Azure
App Service ya no se admite de manera oficial.
Sin embargo, las características de publicación en App Service en Windows sigue funcionando por el momento, porque las
extensiones de Python para App Service en Windows siguen disponibles, pero no se actualizarán ni atenderán.
Los módulos escritos en C++ (o C) se usan normalmente para ampliar las funciones de un intérprete de Python.
También se usan para habilitar el acceso a las funcionalidades de sistema operativo de bajo nivel.
Hay tres tipos principales de módulos:
Módulos de acelerador : como Python es un lenguaje interpretado, puede escribir módulos de acelerador
en C++ para un mayor rendimiento.
Módulos de contenedor : exponen las interfaces de C o C++ existentes a código de Python, o bien exponen
una API más propia de Python que se pueda usar fácilmente con este código.
Módulos de acceso al sistema de bajo nivel : puede crear estos módulos para acceder a características
de bajo nivel del tiempo de ejecución de CPython , el sistema operativo o el hardware subyacente.
Este artículo le guía por la compilación de un módulo de extensión de C++ para CPython que calcula la
tangente hiperbólica y la llama desde código de Python. Primero, se implementa la rutina en Python para
demostrar la mejora relativa del rendimiento de la implementación de la misma rutina en C++.
En este artículo también se muestran dos formas de hacer que la extensión de C++ esté disponible para Python:
Usar las extensiones de CPython estándar, como se describe en la documentación de Python.
Usar PyBind11, que es la recomendación para C++11 debido a su sencillez.
Encontrará el ejemplo completo de este tutorial en GitHub, en python-samples-vs-cpp-extension.
Prerrequisitos
Visual Studio 2017 o posterior, con la carga de trabajo Desarrollo de Python instalada. La carga de trabajo
incluye las herramientas de desarrollo nativas de Python, que proporcionan la carga de trabajo de C++ y
los conjuntos de herramientas necesarios para las extensiones nativas.
NOTE
Al instalar la carga de trabajo Aplicaciones de ciencia de datos y de análisis , se instalan de forma
predeterminada Python y la opción Herramientas de desarrollo nativo de Python .
Para obtener más información sobre las opciones de instalación, vea Instalación de la compatibilidad con Python
en Visual Studio. Si instala Python por separado, asegúrese de seleccionar Download debugging symbols
(Descargar símbolos de depuración) en Opciones avanzadas en el programa de instalación. Esta opción es
necesaria para usar la depuración en modo mixto entre el código de Python y el código nativo.
TIP
Escriba el código en Python puro antes de volver a escribirlo en C++. De este modo, puede comprobar más
fácilmente que el código nativo es correcto.
COUNT = 500000 # Change this value depending on the speed of your computer
DATA = [(random() - 0.5) * 3 for _ in range(COUNT)]
e = 2.7182818284590452353602874713527
def sinh(x):
return (1 - (e ** (-2 * x))) / (2 * (e ** -x))
def cosh(x):
return (1 + (e ** (-2 * x))) / (2 * (e ** -x))
def tanh(x):
tanh_x = sinh(x) / cosh(x)
return tanh_x
for d in result:
assert -1 <= d <= 1, " incorrect values"
if __name__ == "__main__":
print('Running benchmarks with COUNT = {}'.format(COUNT))
3. Para ver los resultados, seleccione Depurar > Iniciar sin depurar o presione Ctrl+F5 para ejecutar el
programa.
Puede ajustar la variable COUNT para cambiar el tiempo que tarda en ejecutarse la prueba comparativa.
Para los fines de este tutorial, establezca el contador para que la prueba comparativa tarde
aproximadamente dos segundos.
TIP
Al ejecutar pruebas comparativas, use siempre Depurar > Iniciar sin depurar . Esto ayuda a evitar la sobrecarga
que se genera al ejecutar el código dentro del depurador de Visual Studio.
TIP
Como alternativa, con las herramientas de desarrollo nativo de Python instaladas en Visual Studio, puede
comenzar con la plantilla Módulo de extensión de Python. La plantilla ya incluye gran parte de lo que se describe a
continuación.
En este tutorial partiremos de un proyecto vacío para mostrar la compilación del módulo de extensión paso a
paso. Después de comprender el proceso, puede usar la plantilla para ahorrar tiempo cuando escriba extensiones
propias.
3. Para crear un archivo de C++ en el nuevo proyecto, haga clic con el botón derecho en el nodo Archivos
de origen y, después, seleccione Agregar > Nuevo elemento .
4. Seleccione Archivo de C++ , asígnele el nombre module.cpp y, después, seleccione Aceptar .
IMPORTANT
Para activar las páginas de propiedades de C++ en los pasos siguientes, es necesario un archivo con la extensión
.cpp.
5. En la barra de herramientas principal, use el menú desplegable para realizar una de las acciones
siguientes:
Para un entorno de ejecución de Python de 64 bits, active la configuración de x64 .
Para un entorno de ejecución de Python de 32 bits, active la configuración de Win32 .
6. En el Explorador de soluciones , haga clic con el botón derecho en el proyecto de C++, seleccione
Propiedades y, después, haga lo siguiente:
a. En Configuración , escriba Activo (Depurar) .
b. En Plataforma , escriba Activo (x64) o Activo (Win32) , en función de la selección del paso anterior.
NOTE
Al crear proyectos propios, querrá establecer las configuraciones de depuración y versión. En esta unidad, solo se
configura la configuración de depuración y se establece para usar una compilación de versión de CPython. Esta
configuración deshabilita algunas características de depuración del tiempo de ejecución de C++, incluidas las
aserciones. Para usar archivos binarios de depuración de CPython (python_d.exe) se necesita otra configuración.
P ESTA Ñ A P RO P IEDA D VA LO R
C/C++ > Generación de código Biblioteca en tiempo de DLL multiproceso (/MD) para
ejecución que coincida con la versión que no
es de depuración de CPython. Si usa
python_d.exe, deje este valor como
DLL de depuración
multiproceso (/MDd) .
P ESTA Ñ A P RO P IEDA D VA LO R
P ESTA Ñ A P RO P IEDA D VA LO R
C/C++ > Generación de código Biblioteca en tiempo de DLL multiproceso (/MD) para
ejecución que coincida con la versión que no
es de depuración de CPython .
Cuando use python_d.exe , deje
este valor sin cambios.
NOTE
Si la pestaña C/C++ no se muestra en las propiedades del proyecto, el proyecto no contiene ningún archivo que
identifique como archivos de código fuente de C/C++. Esta condición se puede producir si crea un archivo de
código fuente sin una extensión .c o .cpp.
Por ejemplo, si ha escrito accidentalmente module.coo en lugar de module.cpp en el anterior cuadro de diálogo
Nuevo elemento, Visual Studio crea el archivo, pero no establece el tipo de archivo en Código de C/C++ , que es
lo que activa la pestaña de propiedades de C/C++. Este error de identificación se mantiene incluso si cambia el
nombre del archivo con una extensión .cpp.
Para establecer el tipo de archivo correctamente, haga clic con el botón derecho en el archivo en el Explorador
de soluciones y seleccione Propiedades . Después, en Tipo de archivo , seleccione Código de C/C++ .
8. Seleccione Aceptar .
9. Para probar las configuraciones (tanto de Depuración como de Versión), haga clic con el botón derecho
en el proyecto de C++ y seleccione Compilar .
Encontrará los archivos .pyd en la carpeta solution de Depuración y Versión, no en la carpeta del proyecto
de C++.
10. Agregue el código siguiente al archivo module.cpp del proyecto de C++:
#include <Windows.h>
#include <cmath>
double sinh_impl(double x) {
return (1 - pow(e, (-2 * x))) / (2 * pow(e, -x));
}
double cosh_impl(double x) {
return (1 + pow(e, (-2 * x))) / (2 * pow(e, -x));
}
double tanh_impl(double x) {
return sinh_impl(x) / cosh_impl(x);
}
#include <Python.h>
2. Modifique el método tanh_impl para aceptar y devolver tipos de Python (es decir, PyObject* ):
3. Agregue una estructura que defina la manera en que la función tanh_impl de C++ se muestra en
Python:
4. Agregue una estructura que defina el módulo como quiera que se haga referencia a él en el código de
Python, en concreto cuando use la instrucción from...import .
El nombre que se importa en este código debe coincidir con el valor de las propiedades del proyecto en
Propiedades de configuración > General > Nombre del destino .
En el ejemplo siguiente, el nombre de módulo "superfastcode" significa que puede usar
from superfastcode import fast_tanh en Python, porque fast_tanh se define en superfastcode_methods .
Los nombres de archivo que son internos del proyecto de C++, como module.cpp, no son esenciales.
5. Agregue un método al que Python llame cuando cargue el módulo, que debe denominarse
PyInit_<module-name> , donde <module-name> coincide exactamente con la propiedad General >
Nombre de destino del proyecto de C++. Es decir, coincide con el nombre del archivo .pyd creado por
el proyecto.
PyMODINIT_FUNC PyInit_superfastcode() {
return PyModule_Create(&superfastcode_module);
}
6. Compile de nuevo el proyecto de C++ para verificar el código. Si se producen errores, vea la sección
"Solución de problemas".
Uso de PyBind11
Si ha completado los pasos descritos en la sección anterior, sin duda ha observado que usa una gran cantidad
de código reutilizable para crear las estructuras de módulo necesarias para el código de C++. PyBind11
simplifica el proceso mediante macros en un archivo de encabezado de C++ que consigue el mismo resultado,
pero con mucho menos código.
Para obtener más información sobre el código de esta sección, vea Conceptos básicos de PyBind11.
1. Instale PyBind11 mediante pip: pip install pybind11 o py -m pip install pybind11 .
Como alternativa, puede instalar PyBind11 con la ventana Entornos de Python y, después, usar su
comando Abrir en PowerShell para el paso siguiente.
2. En el mismo terminal, ejecute python -m pybind11 --includes o py -m pybind11 --includes .
Esto imprime una lista de rutas de acceso que debe agregar a la propiedad C/C++ > General >
Directorios de inclusión adicionales del proyecto. Asegúrese de quitar el prefijo -I , si está presente.
3. En la parte superior de un archivo module.cpp nuevo que no incluya ninguno de los cambios de la
sección anterior, incluya pybind11.h:
#include <pybind11/pybind11.h>
4. En la parte inferior de module.cpp, use la macro PYBIND11_MODULE para definir el punto de entrada a la
función de C++:
namespace py = pybind11;
PYBIND11_MODULE(superfastcode2, m) {
m.def("fast_tanh2", &tanh_impl, R"pbdoc(
Compute a hyperbolic tangent of a single argument expressed in radians.
)pbdoc");
#ifdef VERSION_INFO
m.attr("__version__") = VERSION_INFO;
#else
m.attr("__version__") = "dev";
#endif
}
5. Compile el proyecto de C++ para verificar el código. Si se producen errores, vea la sección siguiente,
"Solución de problemas de compilación", para obtener soluciones.
Solución de problemas de compilación
Es posible que se produzca un error de compilación en el módulo de C++ por las razones siguientes:
Error: No se puede encontrar Python.h (E1696: no se puede abrir el archivo de código fuente
"Python.h" o C1083: No se puede abrir el archivo de inclusión: "Python.h": no existe en
archivo o directorio )
Solución: compruebe que la ruta de acceso de C/C++ > General > Directorios de inclusión
adicionales de las propiedades del proyecto apunta a la carpeta include de la instalación de Python.
Consulte el paso 6 en Crear el proyecto de C++ principal.
Error: No se pueden encontrar las bibliotecas de Python
Solución: compruebe que la ruta de acceso de C/C++ > General > Directorios de biblioteca
adicionales de las propiedades del proyecto apunta a la carpeta libs de la instalación de Python.
Consulte el paso 6 en Crear el proyecto de C++ principal.
Errores del enlazador relacionados con la arquitectura de destino
Solución: cambie la arquitectura del proyecto del destino de C++ para que coincida con la de la
instalación de Python. Por ejemplo, si el destino es Win32 con el proyecto de C++, pero la instalación de
Python es de 64 bits, cambie el proyecto de C++ a x64.
Un método alternativo instala el módulo en el entorno de Python, lo que hace que el módulo también
esté disponible para otros proyectos de Python. Para obtener más información, vea la Documentación del
proyecto setuptools . Haga lo siguiente:
1. Cree un archivo denominado setup.py en el proyecto de C++; para ello, haga clic con el botón
derecho en el proyecto y seleccione Agregar > Nuevo elemento .
2. Seleccione Archivo de C++ (.cpp) , asigne el nombre setup.py al archivo y, después, seleccione
Aceptar .
Al asignar un nombre al archivo con la extensión .py, Visual Studio lo reconoce como un archivo
de Python a pesar del uso de la plantilla de archivo de C++.
Cuando el archivo aparezca en el editor, pegue el código siguiente en él, en función de lo que
corresponda al método de extensión:
Para las extensiones de CPython (proyecto superfastcode) :
setup(
name='superfastcode',
version='1.0',
description='Python Package with superfastcode C++ extension',
ext_modules=[sfc_module]
)
sfc_module = Extension(
'superfastcode2',
sources=['module.cpp'],
include_dirs=[pybind11.get_include()],
language='c++',
extra_compile_args=cpp_args,
)
setup(
name='superfastcode2',
version='1.0',
description='Python package with superfastcode2 C++ extension (PyBind11)',
ext_modules=[sfc_module],
)
[build-system]
requires = ["setuptools", "wheel", "pybind11"]
build-backend = "setuptools.build_meta"
4. Para compilar la extensión, haga clic con el botón derecho en la pestaña pyproject.toml abierta y,
después, seleccione Copiar ruta de acceso completa . Eliminará el nombre pyproject.toml de la
ruta de acceso antes de usarla.
5. En el Explorador de soluciones , haga clic con el botón derecho en el entorno de Python activo y
seleccione Administrar paquetes de Python .
TIP
Si ya ha instalado el paquete, verá que aparece aquí. Antes de continuar, haga clic en la X para
desinstalarlo.
6. En el cuadro de búsqueda, pegue la ruta de acceso copiada, elimine pyproject.toml de la parte final
y, después, presione Entrar para instalar el módulo desde ese directorio.
TIP
Si se produce un error en la instalación debido a un error de permisos, agregue --user al final y vuelva a
probar el comando.
2. Para ejecutar el programa de Python, seleccione Depurar > Iniciar sin depurar o presione Ctrl+F5.
NOTE
Si el comando Iniciar sin depurar está deshabilitado, haga clic con el botón derecho en el proyecto de Python
en el Explorador de soluciones y seleccione Establecer como proyecto de inicio .
Observe que las rutinas de C++ se ejecutan aproximadamente de cinco a veinte veces más rápido que la
implementación de Python. El resultado típico se muestra de la manera siguiente:
3. Intente aumentar la variable COUNT para que las diferencias sean más pronunciadas.
Una compilación de depuración del módulo de C++ también se ejecuta de forma más lenta que una
compilación de versión, ya que la de depuración está menos optimizada y contiene varias
comprobaciones de errores. No dude en cambiar entre esas configuraciones para ver la comparación,
pero recuerde volver y actualizar las propiedades que ha establecido antes para la configuración de
versión.
En la salida, es posible que vea que la extensión de PyBind11 no es tan rápida como la de CPython, aunque
debería ser mucho más rápida que la implementación pura de Python. Esta diferencia se debe en gran medida a
que ha usado la llamada METH_O , que no admite varios parámetros, nombres de parámetros o argumentos de
palabras clave. PyBind11 genera código ligeramente más complejo para proporcionar a los autores de la
llamada una interfaz más similar a Python. Pero como el código de prueba llama 500 000 veces a la función, es
posible que los resultados aumenten considerablemente esa sobrecarga.
Podría reducir todavía más la sobrecarga si mueve el bucle for al código nativo. Este enfoque supondría usar
el protocolo de iterador (o el tipo py::iterable de PyBind11 para el parámetro de función) a fin de procesar
cada elemento. Quitar las transiciones repetidas entre Python y C++ es una manera eficaz de reducir el tiempo
que se necesita para procesar la secuencia.
Solución de problemas de importación
Si recibe un mensaje ImportError al intentar importar el módulo, puede resolverlo de una de las maneras
siguientes:
Al realizar la compilación mediante una referencia de proyecto, asegúrese de que las propiedades del
proyecto de C++ coincidan con el entorno de Python activado para el proyecto de Python, especialmente
los directorios Include y Library.
Asegúrese de que el archivo de salida se denomina superfastcode.pyd. Cualquier otro nombre o
extensión impedirá que se importe.
Si ha instalado el módulo mediante el archivo setup.py, compruebe que ha ejecutado el comando pip en
el entorno de Python activado para el proyecto de Python. Al expandir el entorno de Python en el
Explorador de soluciones se debe mostrar una entrada para superfastcode.
TIP
Al habilitar la depuración de código nativo, la ventana de salida de Python podría cerrarse de inmediato al
completarse el programa, sin ofrecer la pausa habitual Presione cualquier tecla para continuar .
Solución: para forzar una pausa después de habilitar la depuración de código nativo, agregue la opción -i al
campo Ejecutar > Argumentos del intérprete de la pestaña Depurar . Este argumento coloca el intérprete de
Python en modo interactivo después de ejecutar el código, momento en el que espera a que presione Ctrl+Z y
después Entrar para cerrar la ventana.
Como alternativa, si no le importa modificar el código de Python, puede agregar instrucciones import os y
os.system("pause") al final del programa. Este código duplica la petición de pausa original.
4. Como normalmente el código tarda más tiempo en ejecutarse en el depurador, puede que le interese
cambiar la variable COUNT del archivo .py por un valor que sea unas cinco veces más pequeño que el
predeterminado. Por ejemplo, puede cambiarlo de 500 000 a 100 000 .
5. En el código de C++, establezca un punto de interrupción en la primera línea del método tanh_impl y,
después, presione F5 o seleccione Depurar > Iniciar depuración para iniciar el depurador.
El depurador se detendrá cuando se llame al punto de interrupción. Si no se alcanza el punto de
interrupción, compruebe que la configuración esté establecida en Depuración y que ha guardado el
proyecto, lo que no se realiza automáticamente al iniciar al depurador.
6. En el punto de interrupción, puede ejecutar paso a paso el código de C++, examinar las variables, etc.
Para obtener más información sobre estas características, vea Depuración conjunta de Python y C++.
Enfoques alternativos
Existen diversos métodos para crear extensiones de Python, como se describe en la tabla siguiente. En este
artículo se describen las dos primeras filas, CPython y PyBind11 .
HPy 2019
mypyc 2017
Boost.Python 2002
cppyy 2017
Consulte también
Encontrará el ejemplo completo de este tutorial en GitHub, en python-samples-vs-cpp-extension.
Depurar Python y C++ de forma conjunta
13/12/2021 • 13 minutes to read
La mayoría de los depuradores normales de Python admiten la depuración de código de Python exclusivamente.
En la práctica, sin embargo, Python se usa junto con C o C++ en escenarios que requieren alto rendimiento o la
posibilidad de invocar directamente las API de plataforma. (Vea Creación de una extensión de C++ para Python
para obtener un tutorial).
Visual Studio proporciona depuración en modo mixto simultánea e integrada para Python y C o C++ nativo.
Para usar esta función, seleccione la opción Herramientas de desarrollo nativo Python para la carga de
trabajo Desarrollo de Python en el instalador de Visual Studio.
NOTE
La depuración en modo mixto no está disponible con Herramientas de Python para Visual Studio 1.x en Visual Studio
2015 y versiones anteriores.
Las características de depuración en modo mixto incluyen las siguientes opciones, tal y como se explica en este
artículo:
Pilas de llamadas combinada
Transición entre código de Python y nativo
Puntos de interrupción en ambos tipos de código
Vea las representaciones de Python de objetos en marcos nativos y viceversa.
Depuración en el ámbito de los proyectos de Python o C++
Para obtener una introducción a la compilación, las pruebas y la depuración de módulos de C nativos
con Visual Studio, vea Deep Dive: Create Native Modules (Profundización: Creación de módulos nativos)
(youtube.com, 9 minutos 09 segundos). El vídeo se aplica a Visual Studio 2015 y 2017.
TIP
Cuando se habilita la depuración de código nativo, la ventana de resultados de Python podría desaparecer de
inmediato al completarse el programa, sin ofrecer la pausa habitual Presione cualquier tecla para continuar .
Para forzar una pausa, agregue la opción -i al campo Ejecutar > Argumentos del intérprete en la pestaña
Depurar al habilitar la depuración de código nativo. Este argumento coloca al intérprete de Python en modo
interactivo cuando finaliza el código, momento en que espera a que presione Ctrl+Z > Entrar para salir.
2. Al asociar el depurador en modo mixto a un proceso existente (Depurar > Asociar al proceso ), use el
botón Seleccionar para abrir el cuadro de diálogo Seleccionar tipo de código . A continuación,
establezca la opción Depurar estos tipos de código y seleccione Nativo y Python en la lista:
La configuración del tipo de código es permanente, por lo que si quiere deshabilitar la depuración en
modo mixto cuando asocie a otro proceso más adelante, borre el tipo de código Python .
Es posible seleccionar otros tipos de código además de Nativo , o en lugar de este. Por ejemplo, si una
aplicación administrada hospeda CPython, que, a su vez, usa módulos de extensión nativa, y desea
depurar los tres, puede activar Python , Nativo y Administrado juntos para obtener una experiencia de
depuración unificada que incluye pilas de llamadas combinadas y transición entre los tres tipos de
tiempos de ejecución.
3. Al iniciar la depuración en modo mixto por primera vez, es posible que vea un cuadro de diálogo Se
necesitan símbolos de Python (consulte Símbolos para la depuración en modo mixto). Debe instalar
los símbolos solo una vez para cualquier entorno de Python. Los símbolos se incluyen automáticamente
si instala la compatibilidad con Python mediante el instalador de Visual Studio (Visual Studio 2017 y
versiones posteriores).
4. Para que el código fuente de Python estándar esté disponible durante la depuración, visite
https://www.python.org/downloads/source/, descargue el archivo correspondiente a la versión y
extráigalo en una carpeta. Después, apunte Visual Studio a los archivos específicos de esa carpeta en el
momento en el que se le pida.
Con este método, tenga en cuenta que no se puede depurar el propio iniciador py.exe, ya que genera un proceso
secundario python.exe al que no se asocia el depurador. Si quiere iniciar python.exe directamente con
argumentos, cambie la opción Comando de las propiedades de Depuración nativa/Python (se muestra en la
imagen anterior) para especificar la ruta de acceso completa a python.exe. Luego especifique los argumentos en
Argumentos de comandos .
Asociación del depurador en modo mixto
En todas las versiones anteriores de Visual Studio, la depuración en modo mixto directa está habilitada solo al
iniciar un proyecto de Python en Visual Studio, ya que los proyectos de C o C++ solo usan el depurador nativo.
Sin embargo, puede asociar el depurador por separado:
1. Inicie el proyecto de C++ sin depurar (Depurar > Iniciar sin depurar o Ctrl +F5 ).
2. Seleccione Depurar > Asociar al proceso . En el cuadro de diálogo que aparece, seleccione el proceso
adecuado y después use el botón Seleccionar para abrir el cuadro de diálogo Seleccionar tipo de
código , donde puede seleccionar Python :
3. Seleccione Aceptar para cerrar ese cuadro de diálogo y, después, seleccione Asociar para iniciar el
depurador.
4. Puede que necesite especificar una pausa adecuada o un retraso en la aplicación de C++ para garantizar
que no llama al código de Python que quiere depurar antes de que pueda asociar el depurador.
Para deshabilitar esta característica, haga clic con el botón derecho en cualquier parte de la ventana Variables
locales y cambie la opción de menú Python > Mostrar nodos de vista de Python :
Tipos de C que muestran nodos [Vista de Python] (si está habilitada esta característica):
PyObject
PyVarObject
PyTypeObject
PyByteArrayObject
PyBytesObject
PyTupleObject
PyListObject
PyDictObject
PySetObject
PyIntObject
PyLongObject
PyFloatObject
PyStringObject
PyUnicodeObject
[Vista de Python] no aparece automáticamente para los tipos que crea el usuario. Al crear extensiones para
Python 3.x, esto no suele ser un problema, ya que cualquier objeto tiene en última instancia un campo ob_base
de uno de los tipos anteriores, lo que hace que aparezca [Vista de Python] .
Para Python 2.x, sin embargo, cada tipo de objeto declara normalmente su encabezado como una colección de
campos insertados y no hay ninguna asociación entre los tipos personalizados creados y PyObject en el nivel
de sistema de tipos en código de C o C++. Para habilitar los nodos [Vista de Python] para dichos tipos
personalizados, edite el archivo PythonDkm.natvis en el directorio de instalación de herramientas de Python y
agregue otro elemento en el código XML para el struct de C o la clase de C++.
Una opción alternativa (y mejor) es seguir PEP 3123 y usar un campo PyObject ob_base; explícito en lugar de
PyObject_HEAD , si bien puede que esto no sea siempre posible por motivos de compatibilidad con versiones
anteriores.
Vista de valores nativos en el código de Python
Al igual que en la sección anterior, puede habilitar una [Vista de C++] para valores nativos en la ventana
Variables locales cuando un marco de Python está activo. Esta característica no está habilitada de forma
predeterminada; para activarla, es necesario hacer clic con el botón derecho en la ventana Variables locales y
cambiar la opción de menú Python > Mostrar nodos de vista de C++ .
El nodo [Vista de C++] proporciona una representación de la estructura de C o C++ subyacente de un valor,
idéntica a la que se vería en un marco nativo. Por ejemplo, muestra una instancia de _longobject (para el que
PyLongObject es una declaración typedef) de un entero largo de Python, e intenta inferir tipos para clases
nativas que haya creado usted mismo. Los elementos secundarios de este nodo son editables.
Si un campo secundario de un objeto es de tipo PyObject o de uno de los otros tipos admitidos, tiene un nodo
de representación [Vista de Python] (si esas representaciones están habilitadas), lo que hace que sea posible
desplazarse por gráficos de objetos donde los vínculos no se exponen directamente a Python.
A diferencia de los nodos [Vista de Python] , que usan metadatos de objetos de Python para determinar el
tipo del objeto, no hay ningún mecanismo similar confiable para [Vista de C++] . Por lo general, dado un valor
de Python (es decir, una referencia PyObject ), no es posible determinar con seguridad qué estructura de C o
C++ lo respalda de manera confiable. El depurador en modo mixto intenta adivinar ese tipo examinando los
distintos campos del tipo del objeto (como la referencia a PyTypeObject por su campo ob_type ) que tienen
tipos de puntero de función. Si uno de esos punteros de función hace referencia a una función que se puede
resolver, y esa función tiene un parámetro self con un tipo más específico que PyObject* , se asume que ese
tipo es el tipo de respaldo. Por ejemplo, si ob_type->tp_init de un objeto dado señala a la siguiente función:
el depurador puede deducir correctamente que el tipo de C del objeto es FobObject . Si no puede determinar un
tipo más preciso a partir de tp_init , continúa con los demás campos. Si no puede deducir el tipo a partir de
ninguno de esos campos, el nodo [Vista de C++] presenta el objeto como una instancia de PyObject .
Para obtener siempre una representación útil de los tipos personalizados creados, es mejor registrar al menos
una función especial cuando se registra el tipo y usar un parámetro self fuertemente tipado. Es obvio que la
mayoría de los tipos cumplen este requisito; si no fuera así, tp_init es habitualmente la entrada más
conveniente que se puede usar con esta finalidad. Una implementación ficticia de tp_init para un tipo que está
presente exclusivamente para permitir la inferencia del tipo de depurador solo puede devolver cero
inmediatamente, como en el ejemplo de código anterior.
foo.bar[0].baz['key']
El depurador en modo mixto también resuelve tales expresiones de forma diferente. Todas las operaciones de
acceso a miembros buscan solamente campos que son parte directamente del objeto (como una entrada en su
__dict__ o , o un campo de un struct nativo que se expone a Python mediante tp_members ), y omite
__slots__
cualquier __getattr__ , __getattribute__ o lógica de descriptor. De igual forma, todas las operaciones de
indexación omiten __getitem__ y acceden directamente a la estructuras de datos internas de las colecciones.
Por motivos de coherencia, este esquema de resolución de nombres se usa con todas las expresiones que
coincidan con las restricciones de la evaluación limitada de expresiones, con independencia de si se permiten
expresiones arbitrarias en el punto de detención actual. Para forzar la semántica de Python apropiada cuando un
evaluador completo está disponible, encierre la expresión entre paréntesis:
(foo.bar[0].baz['key'])
Instalación de símbolos de depuración para
intérpretes de Python
13/12/2021 • 5 minutes to read
Para proporcionar una experiencia de depuración completa, el depurador en modo mixto de Python en Visual
Studio necesita depurar símbolos para el intérprete de Python que se está usando y así analizar numerosas
estructuras de datos internas. Para python27.dll, por ejemplo, el archivo de símbolos correspondiente es
python27.pdb; para python36.dll, el archivo de símbolos es python36.pdb. Cada versión del intérprete también
proporciona archivos de símbolos para diferentes módulos.
Con Visual Studio 2017 y versiones posteriores, los intérpretes Python 3 y Anaconda 3 instalan
automáticamente sus símbolos respectivos y Visual Studio los buscará automáticamente. Para Visual Studio
2015 y versiones anteriores, o al usar otros intérpretes, es necesario descargar los símbolos por separado y,
después, apuntar Visual Studio a ellos a través del cuadro de diálogo Herramientas > Opciones en la pestaña
Depuración > Símbolos . Estos pasos se detallan en las secciones siguientes.
Es posible que Visual Studio le solicite los símbolos cuando los necesite, normalmente al iniciar una sesión de
depuración en modo mixto. En este caso, muestra un cuadro de diálogo con dos opciones:
Abrir cuadro de diálogo de configuración de símbolos abre el cuadro de diálogo Opciones en la
pestaña Depuración > Símbolos .
Descargar símbolos para el intérprete abre esta página de documentación actual, en cuyo caso,
seleccione Herramientas > Opciones y navegue hasta la pestaña Depuración > Símbolos para
continuar.
Descargar símbolos
Python 3.5 y versiones posteriores: adquiera los símbolos de depuración a través del programa de
instalación de Python. Seleccione Instalación personalizada , haga clic en Siguiente para acceder a
Opciones avanzadas y después active las casillas Download debugging symbols (Descargar
símbolos de depuración) y Download debug binaries (Descargar archivos binarios de depuración):
Los archivos de símbolos (.pdb) se encuentran en la carpeta raíz de la instalación (los archivos de
símbolos para módulos individuales también se encuentran en la carpeta DLL). Por este motivo, Visual
Studio los encontrará automáticamente y no se necesita realizar ningún paso adicional.
Python 3.4.x y versiones anteriores: los símbolos están disponibles como archivos .zip que se pueden
descargar desde las distribuciones oficiales o Enthought Canopy. Después de descargarlos, extraiga los
archivos en una carpeta local para continuar, como una carpeta Símbolos dentro de la carpeta de Python.
IMPORTANT
Los símbolos difieren entre compilaciones menores de Python y entre las compilaciones de 32 y 64 bits, por lo
que querrá que las versiones coincidan. Para comprobar el intérprete que se va a usar, expanda el nodo Entornos
de Python en el proyecto en el Explorador de soluciones y anote el nombre del entorno. Después, cambie a
la ventana Entornos de Python y anote la ubicación de la instalación. Luego, abra una ventana de comandos en
esa ubicación e inicie python.exe, que muestra la versión exacta y si es de 32 o 64 bits.
Para otras distribuciones de Python de terceros, como ActiveState Python: póngase en contacto con los
autores de la distribución para solicitarles los símbolos. En el caso de WinPython, incorpora el intérprete
de Python estándar sin cambios, así que use los símbolos de la distribución oficial para el número de
versión correspondiente.
NOTE
Las características de almacenamiento en caché de símbolos que se muestran en el cuadro de diálogo se usan para crear
una caché local de símbolos obtenidos de un origen en línea. Estas características no son necesarias con los símbolos del
intérprete de Python, pues ya hay símbolos presentes localmente. En cualquier caso, consulte Specify Symbols and Source
Files in the Visual Studio Debugger (Especificar símbolos y archivos de origen en el depurador de Visual Studio) para
obtener más detalles.
Distribuciones oficiales
VERSIÓ N DE P Y T H O N DESC A RGA S
Enthought Canopy
Enthought Canopy ofrece símbolos para sus archivos binarios, a partir de la versión 1.2. Se instalan
automáticamente junto con la distribución, pero tendrá que agregar manualmente la carpeta que los contiene
en la ruta de acceso a los símbolos, como se ha descrito anteriormente. Para una instalación por usuario típica
de Canopy, los símbolos se encuentran en %UserProfile%\AppData\Local\Enthought\Canopy\User\Scripts para
la versión de 64 bits y %UserProfile%\AppData\Local\Enthought\ Canopy32\User\Scripts para la versión de 32
bits.
Enthought Canopy 1.1 y las versiones anteriores y Enthought Python Distribution (EPD) no proporcionan
símbolos para el intérprete y, por tanto, no son compatibles con la depuración en modo mixto.
Generación de perfiles de código de Python
13/12/2021 • 2 minutes to read
Puede generar perfiles de una aplicación de Python al usar intérpretes de CPython (vea Generación de perfiles
de la matriz de características para conocer la disponibilidad de esta característica en las distintas versiones de
Visual Studio).
Al seleccionar Aceptar , el generador de perfiles se ejecuta y abre un informe de rendimiento a través del cual
puede explorar cómo se emplea el tiempo en la aplicación:
NOTE
Al generar perfiles de una aplicación de Python, Visual Studio recopila datos durante la vigencia del proceso. Actualmente
no es posible pausar la generación de perfiles. Nos encantaría recibir sus comentarios sobre las funcionalidades futuras.
Use el botón Comentarios sobre el producto que está en la parte inferior de esta página.
Las pruebas unitarias son fragmentos de código que prueban otras unidades de código de una aplicación,
normalmente funciones aisladas, clases, etc. Cuando una aplicación supera todas sus pruebas unitarias, al
menos puede confiar en que su función de bajo nivel es correcta.
Python utiliza pruebas unitarias ampliamente para validar escenarios durante el diseño de un programa. La
compatibilidad de Python en Visual Studio incluye características para descubrir, ejecutar y depurar pruebas
unitarias dentro del contexto de su proceso de desarrollo, sin tener que ejecutar pruebas independientemente.
En este artículo se proporciona una descripción breve de las funcionalidades de las pruebas unitarias en Visual
Studio con Python. Para más información sobre las pruebas unitarias en general, vea Hacer una prueba unitaria
del código.
import unittest
class Test_test1(unittest.TestCase):
def test_A(self):
self.fail("Not implemented")
if __name__ == '__main__':
unittest.main()
3. Si es necesario, guarde el archivo y luego abra el Explorador de pruebas con el comando de menú
Prueba > Windows > Explorador de pruebas .
4. El Explorador de pruebas busca las pruebas en el proyecto y las mostrará como se muestra a
continuación. Haga doble clic en una prueba para abrir su archivo de origen.
5. A medida que agrega más pruebas para el proyecto, puede organizar la vista en el Explorador de
pruebas mediante el menú Agrupar por de la barra de herramientas:
6. También puede escribir texto en el campo de búsqueda para filtrar pruebas por nombre.
Para más información sobre el módulo unittest y las pruebas de escritura, vea la documentación de
Python 2.7 o la documentación de Python 3.7 (python.org).
Ejecutar pruebas
En el Explorador de pruebas puede ejecutar pruebas de varias maneras:
Ejecutar todas claramente ejecuta todas las pruebas mostradas (sujeto a filtros).
El menú Ejecutar proporciona comandos para ejecutar pruebas con error, superadas o no ejecutadas como
un grupo.
Puede seleccionar una o varias pruebas, hacer clic con el botón derecho y seleccionar Ejecutar pruebas
seleccionadas .
Las pruebas se ejecutan en segundo plano y el Explorador de pruebas actualiza el estado de todas las
pruebas a medida que se completan:
Las pruebas superadas muestran una marca de verificación verde y el tiempo dedicado a ejecutar la
prueba:
Las pruebas con error muestran una cruz roja con un vínculo Salida que muestra la salida de la consola
y la salida unittest de la serie de pruebas:
Depuración de pruebas
Dado que las pruebas unitarias son fragmentos de código, están sujetas a errores como cualquier otro código y,
en ciertas ocasiones, necesitan ejecutarse en un depurador. En el depurador puede establecer puntos de
interrupción, examinar variables y recorrer el código. Visual Studio también proporciona herramientas de
diagnóstico para las pruebas unitarias.
Para iniciar la depuración, establezca un punto de interrupción inicial en el código y luego haga clic con el botón
derecho en la prueba (o una selección) en el Explorador de pruebas y seleccione Depurar pruebas
seleccionadas . Visual Studio inicia el depurador de Python como lo haría para el código de la aplicación.
También puede usar Analizar cober tura de código para las pruebas seleccionadas . Para obtener más
información, vea Usar cobertura de código para determinar la cantidad de código que se está probando.
Problemas conocidos
Al iniciar la depuración, Visual Studio aparece para iniciar y detener la depuración, y luego la inicia de nuevo.
Este comportamiento es normal.
Al depurar varias pruebas, cada una de ellas se ejecuta de manera independiente, lo que interrumpe la sesión
de depuración.
Visual Studio produce un error de manera intermitente al iniciar una prueba durante la depuración.
Normalmente, si intenta depurar la prueba de nuevo, la operación se realiza correctamente.
Al depurar, es posible que salir de una prueba en la implementación de unittest . Normalmente, el siguiente
paso ejecuta el programa hasta el final y detendrá la depuración.
{
"TestFramework": "unittest",
"UnitTestRootDirectory": "testing",
"UnitTestPattern": "test_*.py"
}
NOTE
En el marco unittest , si los campos UnitTestRootDirector y y UnitTestPattern no están especificados en el
archivo PythonSettings.json, se agregan y se les asignan los valores predeterminados "." y "test*.py"
respectivamente.
5. Si la carpeta contiene un directorio src que es independiente de la carpeta que contiene las pruebas,
especifique la ruta de acceso a la carpeta src mediante el campo SearchPaths del archivo
PythonSettings.json .
{
"TestFramework": "unittest",
"UnitTestRootDirectory": "testing",
"UnitTestPattern": "test_*.py",
"SearchPaths": [ ".\\src"]
}
6. Guarde los cambios en el archivo PythonSettings.json para iniciar la detección de pruebas del marco
especificado.
NOTE
Si la ventana Explorador de pruebas ya está abierta, Ctrl + R,A también desencadena la detección.
NOTE
Si usa el marco pytest, puede especificar la ubicación de las pruebas y los patrones de nombre de archivo
mediante el archivo de configuración estándar pytest.ini. De forma predeterminada, se usa la carpeta del proyecto
o del área de trabajo, con un patrón de test_*py y *_test.py . Vea la documentación de referencia de pytest
para más información.
3. Una vez seleccionado el marco, vuelva a hacer clic con el botón derecho en el proyecto, seleccione
Agregar > Nuevo elemento y, después, seleccione Prueba unitaria de Python seguido de Agregar .
4. Esta acción crea un archivo test_1.py con código que importa el módulo estándar unittest , deriva una
clase de prueba de unittest.TestCase e invoca unittest.main() si ejecuta el script directamente:
import unittest
class Test_test1(unittest.TestCase):
def test_A(self):
self.fail("Not implemented")
if __name__ == '__main__':
unittest.main()
5. Si es necesario, guarde el archivo y luego abra el Explorador de pruebas con el comando de menú
Prueba > Explorador de pruebas .
6. El Explorador de pruebas busca las pruebas en el proyecto y las mostrará como se muestra a
continuación. Haga doble clic en una prueba para abrir su archivo de origen.
7. A medida que agrega más pruebas para el proyecto, puede organizar la vista en el Explorador de
pruebas mediante el menú Agrupar por de la barra de herramientas:
8. También puede escribir texto en el campo de búsqueda para filtrar pruebas por nombre.
Para más información sobre el módulo unittest y las pruebas de escritura, vea la documentación de
Python 2.7 o la documentación de Python 3.7 (python.org).
Ejecutar pruebas
En el Explorador de pruebas puede ejecutar pruebas de varias maneras:
Ejecutar todas claramente ejecuta todas las pruebas mostradas (sujeto a filtros).
El menú Ejecutar proporciona comandos para ejecutar pruebas con error, superadas o no ejecutadas como
un grupo.
Puede seleccionar una o varias pruebas, hacer clic con el botón derecho y seleccionar Ejecutar pruebas
seleccionadas .
Las pruebas se ejecutan en segundo plano y el Explorador de pruebas actualiza el estado de todas las
pruebas a medida que se completan:
Las pruebas superadas muestran una marca de verificación verde y el tiempo dedicado a ejecutar la
prueba:
Las pruebas con error muestran una cruz roja con un vínculo Salida que muestra la salida de la consola
y la salida unittest de la serie de pruebas:
Depuración de pruebas
Dado que las pruebas unitarias son fragmentos de código, están sujetas a errores como cualquier otro código y,
en ciertas ocasiones, necesitan ejecutarse en un depurador. En el depurador puede establecer puntos de
interrupción, examinar variables y recorrer el código. Visual Studio también proporciona herramientas de
diagnóstico para las pruebas unitarias.
NOTE
De forma predeterminada, la depuración de prueba usa el depurador de ptvsd 4 para Visual Studio 2017 (versiones 15.8 y
posteriores) y debugpy para Visual Studio 2019 (versiones 16.5 y posteriores). Si quiere usar ptvsd 3 en su lugar, puede
seleccionar la opción Usar depurador heredado en Herramientas > Opciones > Python > Depuración .
Para iniciar la depuración, establezca un punto de interrupción inicial en el código y luego haga clic con el botón
derecho en la prueba (o una selección) en el Explorador de pruebas y seleccione Depurar pruebas
seleccionadas . Visual Studio inicia el depurador de Python como lo haría para el código de la aplicación.
También puede usar Analizar cober tura de código para las pruebas seleccionadas . Para obtener más
información, vea Usar cobertura de código para determinar la cantidad de código que se está probando.
Uso de la extensión Cookiecutter
13/12/2021 • 9 minutes to read
Cookiecutter proporciona una interfaz gráfica de usuario para descubrir plantillas, opciones de plantilla de
entrada y crear proyectos y archivos. Se incluye con Visual Studio 2017 y versiones posteriores y puede
instalarse por separado en versiones anteriores de Visual Studio.
Cookiecutter requiere Python 3.3 o posterior (32 o 64 bits) o Anaconda 3 4.2 o posterior (32 o 64 bits). Si no se
dispone de un intérprete de Python adecuado, Visual Studio mostrará una advertencia. Si instala un intérprete
de Python mientras se está ejecutando Visual Studio, seleccione el botón de inicio en la barra de herramientas
de Cookiecutter para detectar el intérprete recién instalado. (Vea Entornos de Python para obtener más
información sobre los entornos en general).
Una vez instalado, seleccione View > Cookiecutter Explorer (Ver > Explorador de Cookiecutter) para abrir la
ventana:
Clonación
Al seleccionar una plantilla y luego hacer clic en Next (Siguiente), Cookiecutter hace una copia local con la que
trabaja.
Si selecciona una plantilla de los grupos Recomendado o GitHub , o escribe una URL personalizada en el
cuadro de búsqueda y selecciona esa plantilla, esta se clona e instala en el equipo local. Si esa plantilla se instaló
en una sesión anterior de Visual Studio, se elimina automáticamente y se clona la versión más reciente.
Si selecciona una plantilla del grupo Instalado o escribe una ruta de acceso personalizada a una carpeta en el
cuadro de búsqueda y seleccione esa plantilla, Visual Studio carga esa plantilla sin clonarla.
IMPORTANT
Las plantillas de Cookiecutter se clonan en una sola carpeta ~/.cookiecutters. Cada subcarpeta se nombra después del
nombre del repositorio GIT, que no incluye el nombre de usuario de GitHub. Pueden surgir conflictos si clona distintas
plantillas con el mismo nombre que proceden de diferentes autores. En este caso, Cookiecutter le impide sobrescribir la
plantilla existente con una plantilla diferente del mismo nombre. Para instalar la otra plantilla, primero debe eliminar la
existente.
Opciones de Cookiecutter
Las opciones de Cookiecutter están disponibles en Tools > Options > Cookiecutter (Herramientas >
Opciones > Cookiecutter):
O P C IÓ N DESC RIP T IO N
Recommended Feed URL (URL de fuente recomendada) La ubicación de la fuente de plantillas recomendadas. Puede
ser una dirección URL o una ruta de acceso a un archivo
local. Deje en blanco la dirección URL para usar la fuente
protegida por Microsoft predeterminada. La fuente
proporciona una sencilla lista de ubicaciones de plantillas,
separadas por nuevas líneas. Para solicitar cambios en la
fuente protegida, realice una solicitud de extracción contra el
origen de GitHub.
Ejemplo:
{
"site_name": "web-app",
"python_version": ["3.5.2"],
"use_azure": "y",
"_visual_studio": {
"site_name": {
"label": "Site name",
"description": "E.g. <site-name>.azurewebsites.net (can only contain alphanumeric characters and
`-`)"
},
"python_version": {
"label": "Python version",
"description": "The version of Python to run the site on"
},
"use_azure" : {
"label": "Use Azure",
"description": "Include Azure deployment files",
"selector": "yesno",
"url": "https://azure.microsoft.com"
}
}
}
"_visual_studio_post_cmds": [
{
"name": "File.OpenFile",
"args": "{{cookiecutter._output_folder_path}}\\readme.txt"
},
{
"name": "Cookiecutter.ExternalWebBrowser",
"args": "https://docs.microsoft.com"
},
{
"name": "Python.InstallProjectRequirements",
"args": "{{cookiecutter._output_folder_path}}\\dev-requirements.txt"
}
]
Los comandos se especifican por nombre y deben usar el nombre no localizado (en inglés) para funcionar en
instalaciones localizadas de Visual Studio. Puede probar y detectar nombres de comando en la ventana de
comandos de Visual Studio.
Si desea pasar un solo argumento, puede especifíquelo como una cadena, como en el ejemplo anterior.
Si no necesita pasar un argumento, deje una cadena vacía u omítalo de JSON:
"_visual_studio_post_cmds": [
{
"name": "View.WebBrowser"
}
]
Use una matriz para varios argumentos. Para modificadores, divida el modificador y su valor en argumentos
distintos y use el entrecomillado correcto. Por ejemplo:
"_visual_studio_post_cmds": [
{
"name": "File.OpenFile",
"args": [
"{{cookiecutter._output_folder_path}}\\read me.txt",
"/e:",
"Source Code (text) Editor"
]
}
]
Los argumentos pueden hacer referencia a otros variables de Cookiecutter. En los ejemplos anteriores, la
variable interna _output_folder_path se usa para formar una ruta de acceso absoluta a los archivos generados.
Tenga en cuenta que el comando Python.InstallProjectRequirements funciona solo al agregar archivos a un
proyecto existente. Esta limitación existe porque el comando se procesa mediante el proyecto de Python en el
Explorador de soluciones , y no hay ningún proyecto para recibir el mensaje mientras se está en Explorador
de soluciones - vista de carpetas . Esperamos eliminar la limitación en una versión futura (y proporcionar
mejor compatibilidad con la vista de carpetas en general).
Solución de problemas
Error al cargar la plantilla
Puede que algunas plantillas usen tipos de datos no válidos, como booleanos, en sus archivos cookiecutter.json.
Informe sobre estas instancias al autor de la plantilla haciendo clic en el vínculo Problemas .
Error de script de enlace
Algunas plantillas pueden usar scripts posteriores a la generación que no son compatibles con la interfaz de
usuario de Cookiecutter. Por ejemplo, se producirá un error en los scripts que consultan la entrada del usuario
por no tener una consola de terminal.
Script de enlace no admitido en Windows
Si el script posterior es .sh, puede que no esté asociado con una aplicación del equipo Windows. Es posible que
vea un diálogo de Windows que le pide que busque una aplicación compatible en la Tienda Windows.
Plantillas con problemas conocidos
Errores de clonación:
wildfish/cookiecutter-django-crud (carácter no válido | en nombre de subcarpeta)
cookiecutter-pyvanguard (carácter no válido | en nombre de subcarpeta)
Errores de carga:
chrisdev/wagtail-cookiecutter-foundation (usa un tipo booleano en cookiecutter.json)
quintoandar/cookiecutter-android (ninguna carpeta de plantilla)
Errores de ejecución:
iknite/cookiecutter-ansible-role (script de enlace posterior que requiere entrada de consola)
benregn/cookiecutter-django-ansible (error de Jinja)
Usa bash (no fatal):
openstack-dev/cookiecutter
Plantillas de elementos de Python
13/12/2021 • 3 minutes to read
Las plantillas de elementos están disponibles en proyectos de Python a través del comando de menú Proyecto
> Agregar nuevo elemento o el comando Agregar > Nuevo elemento en el menú contextual del
Explorador de soluciones .
Con el nombre que proporcione para el elemento, una plantilla suele crear uno o varios archivos y carpetas
dentro de la carpeta actualmente seleccionada en el proyecto (al hacer clic con el botón derecho en una carpeta
para que aparezca el menú contextual se selecciona automáticamente esa carpeta). Al agregar un elemento, lo
incluye en el proyecto de Visual Studio y aparecerá en el Explorador de soluciones .
En la tabla siguiente se explica brevemente el efecto de cada plantilla de elemento dentro de un proyecto de
Python:
P L A N T IL L A Q UÉ C REA L A P L A N T IL L A
Clase de Python Un archivo .py que contiene una única definición de clase
vacía de Python.
Prueba unitaria de Python Un archivo .py con una sola prueba unitaria basada en la
plataforma unittest , junto con una llamada a
unittest.main() para ejecutar las pruebas en el archivo.
P L A N T IL L A Q UÉ C REA L A P L A N T IL L A
Página HTML Un archivo .html con una estructura de página sencilla que
consta de un elemento <head> y <body> .
Hoja de estilos Un archivo .css que contiene un estilo vacío para body .
Aplicación Django 1.9 Una carpeta con el nombre de la aplicación, que contiene los
Aplicación Django 1.4 archivos principales de una aplicación de Django como se
explica en Información acerca de Django en Visual Studio,
paso 2.2 para Django 1.9. En el caso de Django 1.4, no se
incluyen la carpeta migrations ni los archivos admin.py y
apps.py.
Ventana de WPF de IronPython Una ventana de WPF que consta de dos archivos paralelos:
un archivo .xaml que define un <Window> con un elemento
<Grid> vacío, y un archivo .py asociado que carga el
archivo XAML mediante la biblioteca wpf . Suele usarse
dentro de un proyecto creado con una de las plantillas de
proyecto de IronPython. Vea Proyectos de Python -
Plantillas de proyecto.
Archivos auxiliares de rol web Una carpeta bin en la raíz del proyecto (independientemente
de la carpeta seleccionada en el proyecto). La carpeta
contiene un script de implementación predeterminado y un
archivo web.config para los roles web del Servicio en la nube
de Azure. La plantilla también incluye un archivo
readme.html donde se explican los detalles.
Archivos de compatibilidad de rol de trabajo Una carpeta bin en la raíz del proyecto (independientemente
de la carpeta seleccionada en el proyecto). La carpeta
contiene el script de implementación e inicio
predeterminado, junto con un archivo web.config, para los
roles de trabajo del servicio en la nube de Azure. La plantilla
también incluye un archivo readme.html donde se explican
los detalles.
web.config de Azure (FastCGI) Un archivo web.config que contiene las entradas para las
aplicaciones con un objeto WSGI para controlar las
conexiones entrantes. Este archivo normalmente se
implementa en la raíz de un servidor web que ejecuta IIS.
Para más información, consulte Configure an app for IIS
(Configurar una aplicación para IIS).
web.config de Azure (HttpPlatformHandler) Un archivo web.config que contiene las entradas para las
aplicaciones que escuchan en un socket para las conexiones
entrantes. Este archivo normalmente se implementa en la
raíz de un servidor web que ejecuta IIS, por ejemplo, Azure
App Service. Para más información, consulte Configure an
app for IIS (Configurar una aplicación para IIS).
P L A N T IL L A Q UÉ C REA L A P L A N T IL L A
web.config de archivos estáticos de Azure Un archivo web.config que normalmente se agrega a una
carpeta static (u otra carpeta que contiene elementos
estáticos) para deshabilitar el control de Python para esa
carpeta. Este archivo de configuración funciona junto con
uno de los archivos de configuración FastCGI o
HttpPlatformHandler anteriores. Para más información,
consulte Configure an app for IIS (Configurar una aplicación
para IIS).
web.config de depuración remota de Azure En desuso (se usaba para depuración remota en Azure App
Service para Windows, que ya no se admite).
Consulte también
Proyectos de Python: plantillas de proyecto
Plantillas de proyecto web de Python
Publicación en Azure App Service
Opciones de Python en Visual Studio
13/12/2021 • 10 minutes to read
Para ver las opciones de Python, use el comando de menú Herramientas > Opciones , asegúrese de que la
opción Mostrar todas las configuraciones está seleccionada y, después, vaya a Python :
También hay opciones adicionales específicas de Python en la pestaña Editor de texto > Python > Opciones
avanzadas y en la pestaña Entorno > Fuentes y colores del grupo Editor de texto .
NOTE
El grupo Experimental contiene opciones de características que están aún en desarrollo y no se documentan aquí. A
menudo, se habla de ellas en entradas del blog de ingeniería de Python en Microsoft.
Opciones generales
(Pestaña Herramientas > Opciones > Python ).
Mostrar adver tencia si no se Activado Desactive esta opción para suprimir las
encuentra el módulo impor tado advertencias cuando sepa que un
módulo importado no está disponible
actualmente pero, de otro modo, no
afecta a la operación de código.
Buscar encuestas o noticias Una vez a la semana Visual Studio 2017 y versiones
anteriores. Establece la frecuencia con
la que permite que Visual Studio pueda
abrir una ventana que contiene una
página web con elementos de noticias
y encuestas relacionados con Python,
si está disponible. Las opciones son
Nunca , Una vez al día , Una vez a
la semana y Una vez al mes .
Ruta de acceso de ejecutable de (en blanco) Especifica una ruta de acceso exacta al
Conda ejecutable conda.exe en lugar de
depender de la instalación
predeterminada de Miniconda que se
incluye con la carga de trabajo de
Python. Si aquí se indica otra ruta de
acceso, tiene prioridad sobre la
instalación predeterminada y sobre
cualquier otro ejecutable conda.exe
que se especifique en el registro.
Puede cambiar esta configuración si
instala manualmente una versión más
reciente de Anaconda o Miniconda o si
quiere usar una distribución de 32 bits
en lugar de la distribución
predeterminada de 64 bits.
Opciones de depuración
(Pestaña Herramientas > Opciones > Python > Depuración ).
Esperar a la entrada cuando el Activado (para ambos) Un programa de Python iniciado desde
proceso termine de forma Visual Studio se ejecuta en su propia
anómala ventana de consola. De manera
predeterminada, la ventana espera a
Esperar a la entrada cuando el que presione una tecla antes de
proceso termine de manera cerrarla independientemente de cómo
correcta finaliza el programa. Para quitar ese
mensaje y cerrar la ventana
automáticamente, desactive una o
ambas opciones.
Mostrar el valor devuelto de la Activado Solo Visual Studio 2019. Muestra los
función valores devueltos de función en la
ventana Locals (Variables locales) y
luego pasa por encima de una llamada
de función en el depurador (F10).
Usar el depurador heredado Desactivado Solo Visual Studio 2019. Indica a Visual
Studio que use el depurador heredado
de manera predeterminada. Para más
información, consulte Depuración: usar
el depurador heredado.
Opciones de diagnóstico
(Pestaña Herramientas > Opciones > Python > Diagnósticos ).
Usar flechas arriba o abajo para Activado Usa las teclas de flecha para navegar
navegar por el historial por el historial en la ventana
interactiva . Desactive esta opción
para usar las teclas de flecha para
navegar dentro del resultado de la
ventana interactiva en su lugar.
O P C IÓ N DEFA ULT DESC RIP C IÓ N
Modo de finalización Solo se evalúan expresiones sin El proceso de determinar los miembros
llamadas de función disponibles en una expresión en la
ventana interactiva puede necesitar
la evaluación de la expresión actual sin
terminar, lo que puede provocar
efectos secundarios o funciones que se
llaman varias veces. La opción
predeterminada, Solo evaluar las
expresiones sin llamadas de
función excluye expresiones que
aparecen para llamar a una función,
pero evalúa otras expresiones. Por
ejemplo, evalúa a.b pero no a().b .
Nunca evaluar expresiones evita
los efectos secundarios usando solo el
motor de IntelliSense normal para las
sugerencias. Evaluar todas las
expresiones evalúa la expresión
completa para obtener sugerencias,
independientemente de los efectos
secundarios.
Ruta de acceso de Typeshed (en blanco) Si se establece, Visual Studio usa los
personalizada archivos de Typeshed en esta ruta de
acceso en lugar de su versión
empaquetada. Omita si la opción
Deshabilitar las finalizaciones
desde Typeshed está establecida.
Filtrar la lista según una cadena Activado Aplica el filtrado de las sugerencias de
de búsqueda finalización a medida que escribe (está
activada de manera predeterminada).
O P C IÓ N DEFA ULT DESC RIP C IÓ N
Otras opciones
O P C IÓ N DEFA ULT DESC RIP C IÓ N
Quitar mensajes de REPL al pegar Activado Quita >>> y ... del texto pegado, lo
que permite una transferencia sencilla
de código de la ventana interactiva al
editor. Desactive esta opción si necesita
conservar esos caracteres al pegar
desde otros orígenes.