Como siempre, se trata de una compensación y me equivoco por el lado de los estándares y la previsibilidad.Soy muy consciente de que, especialmente con contenedores Python de propósito único comopitón:.*â es popular lograr compilaciones de varias etapas instalando todo globalmente yCOPIAR

encimapaquetes de sitiodesde las entrañas de la instalación de Python, o configurar elBASE DE USUARIOS DE PYTHONvariable de entornoa algo como/aplicacióny utilizarinstalación de pip --usuarioen lugar deinstalación de pipas, y luegoCOPIARencimaeso.Todo bajo la premisa de que de alguna manera es más simple y que una capa de aislamiento es suficiente.No cuestiono la suficiencia de una capa de aislamiento, pero a lo largo de los años he descubierto que en la producción hay más de un aspecto a tener en cuenta cuando se habla de simplicidad.Como tema general, mi objetivo esno

seguir sin pensar algunas ~mejores prácticas~ que añaden complejidad para obtener beneficios cuestionables porque un gran defensor de los desarrolladores de tecnología lo dijo en una conferencia.


Pero paso mucho tiempo pensando en elefectos secundariosde lo que hago.Para mí, la complejidad no se trata de cuántas teclas tengo que presionar, sino de lo difícil que es razonar sobre las consecuencias de lo que estoy haciendo.Entonces, aquí está mi lista incompleta de razones por las que sigo usando entornos virtuales y planeo hacerlo en el futuro:

Previsibilidad y familiaridad

Su estructura está bien definida y diseñada para contener una única aplicación Python.

Me encanta cómo son una jerarquía de directorios que incluye

papelera,biblioteca, ycompartirdirectorios, lo que lo convierte en un excelente “contenedor” para aplicaciones autónomas de forma predeterminada.Invita al almacenamiento de archivos auxiliares, incluido algún archivo de configuración en un archivo adicional.etc.directorio.Todo eso los hace ideales para algo que poner en/optar/aplicacióno/aplicación.

Sí,a diferencia de hace diez años, ya no tienes que aislar tus aplicaciones de tu sistema Python.pero manteniendosuEl código en una ubicación y estructura aislada y bien definida tiene valor en sí mismo.Soy responsable de docenas de servicios, por lo que agradezco el

consistenciade saber que todo lo que estoy implementando está en/aplicación, y si es una aplicación Python, sé que es un entorno virtual, y si ejecuto/aplicación/bin/python, obtengo el Python del entorno virtual con mi aplicación lista para ser importada y ejecutada.Estándares y comunicación

Toda esta consistencia hace

comunicación dentro y entre equiposmás fácil.Todo el mundo sabe lo que significa si digo/documento que un artefacto de implementación es un entorno virtual.Y si no lo hacen, Internet está lleno de documentación, incluida laoficial.Es como cuandoNegronos hizo dejar de pensar y discutir sobre el estilo del código y liberó esos recursos mentales para cosas más importantes1.Ése es el valor fundamental de las normas, incluso si a uno no le gusta todo lo relacionado con ellas.

Y los entornos virtuales han sidouna característica central de Pythondurante 12 añosy un concepto central en la comunidad Python desde mediados de la década de 2000.Es lo más parecido que tenemos a unArtefacto de creación de aplicaciones adjunto, estandarizado y bien comprendido en Python.Es una analogía amplia, pero los considero el resultado de vincular un binario dinámico en lenguajes compilados.

Puedes usarlosen la zona, puedes implementarlos usandoun paquete de distribución, y tu puedesimplementarlos usando un contenedor Docker.esbienutilizar las mismas herramientas y primitivas en el desarrollo y en la producción.Significa que conoce sus herramientas y tiene menos cosas que tener en cuenta.Por lo tanto, utilizar un método diferente para implementar su aplicación debería tener ventajas tangibles.

Colapso de la complejidad de las importaciones

Una ventaja general de los entornos virtuales, tanto localmente como en Docker, es que puedeslimitar las rutas de búsqueda relevantesdonde Python buscará su código para importar2.Ejecutando Python enmodo aislado pasando-I reducirá esto aún más.

Entonces,siusted a) nunca instale nada globalmente3,ytu b) usas elpitónbinario del entorno virtualmientraspasándolo-I, túsabertodo lo que no está en la biblioteca estándardebeestar en el entorno virtual.Eso hace que el comportamiento de importación de Python sea mucho másprevisibley la depuración de problemas de importación es menos un misterio de asesinato.

Lo que nos lleva a...

Un punto extra que puedo ignorar con seguridad pero que necesito desahogarme.

El infierno no tiene furia como la que siento porinstalación de pip --usuario.Es una molestia atractiva que ha causado gran parte del daño a la mala reputación de empaquetado de Python.

Se utiliza principalmente para ocultar los efectos aún peores de la manipulación del sistema.paquetes de sitiodirectorio: la causa más común de instalaciones fallidas de Python.Todo para habilitar instalaciones locales de usuario.4, que para empezar son una mala idea.En ese sentido, elmpnEl ecosistema con su empaque de directorio de proyecto local primero estaba muy por delante de nosotros, atrapado en nuestras viejas y perezosas costumbres.

Al final, complicó aún más el razonamiento sobre las instalaciones de Python al agregarotroparte móvil.Si tuviera un centavo por cada vez que alguien me grita en un rastreador de errores causado por cosas raras en sus paquetes de Python locales de usuario, no tendría quepedir patrocinios.Por mucho que amoPDM, agradezco a Cthulhu todos los días quePEP 582 /__pypaquetes__fue rechazado porque habría añadidootrovector de confusión.Estandarización en proyecto local.venvfue la decisión inequívocamente correcta, incluso siIPreferí almacenar mis entornos virtuales en un lugar central.

Finalmente: Como,... ¿por qué?

¿Qué problema estás tratando de resolver exactamente aquí?No es una herramienta adicional ni un concepto adicional: o está ahí mismo, en elbiblioteca estándar, o estás usandoultravioletaya.Convenv ultravioleta, crear un entorno virtual no lleva mucho más tiempo que unmkdir.podrían serlevementemás grandes, pero ¿son de una manera que realmente importa?No simplificará nada al evitar la única forma estándar de aislar proyectos de Python con todas sus dependencias en un directorio fácil de manejar.

Me pregunto hasta qué punto la resistencia contra los entornos virtuales no tiene razones técnicas sino que tiene sus raíces enHomebrew los rompe con cada actualización de Pythony Debian hace que su uso sea complicado con su molesta separación de instalaciones de Python.

EsperoultravioletaLa conveniencia y la velocidad cambiarán la percepción pública.

Epílogo

Los atajos que describí al principio del artículo se basan en suposiciones sobrepaquetes de sitioUbicación y portabilidad.Introducen complicaciones como el usoinstalación de pip --usuario(lo cual es semánticamente extraño en Docker y nunca estuvo destinado a usarse para algo como esto) y puede requerir herramientas y paradigmas desconocidos en comparación con los que estás usando en el desarrollo.ââââââââââââââââ

PeroNo estoy tratando de convencerte de que hagas nada.Me doy cuenta de que algunas de mis razones están en el lado de las ~vibraciones~ intangibles.Eres libre de hacer lo que quieras si estás dentro de los parámetros de esos atajos y estás satisfecho con las compensaciones.Pero espero haberte mostrado que definitivamentehacetiene sentido utilizar entornos virtuales en Docker en general, si tiene sentido para, es parapara decidir.Estoy harto de defenderme cada vez, así que expongo mi caso aquí, de una vez por todas.

Si después de todo esto estásaúninteresado en lo que tengo que decir sobre Python y Docker, recomiendo comenzar conContenedores Docker listos para producción conultravioleta, que es un documento vivo sobre cómo construyo contenedores Docker para aplicaciones Python, lo más rápido posible.


PDNo puedo creer que esté publicando esto casi el día del décimo aniversario de mi venerableâ¡Vidas virtuales!!Muchas cosas han cambiado para mejor, pero los entornos virtuales siguen dando resultados.

Esta publicación fue posible gracias a ladonacionesde personas y corporaciones que aprecian mi trabajo público.

¿Quieres más contenido como este?Aquí está mi video gratuito, de bajo volumen y no espeluznante.Hynek hizo algohoja informativa!Me permite compartir mi contenido directamente contigo y agregar contexto adicional: