Muchos de nosotros trabajamos en varios proyectos de Python al mismo tiempo. Múltiples proyectos pueden depender de diferentes versiones de la misma biblioteca. Esto es un problema. Incluso si trabaja con un solo proyecto y lo implementa en producción, puede tener problemas, ya que el sistema Python en su servidor de producción podría cambiar debido a la actualización del sistema operativo o al parche de seguridad, y su aplicación podría fallar como resultado. En general, desea un control total sobre el entorno Python de sus proyectos. Entrar en entornos virtuales ...
La idea básica de un entorno virtual es tener un intérprete de Python y sus paquetes de sitio separados del sistema. Además, puedes tener muchos de ellos. Eso resuelve ambos problemas. Puede asignar un entorno virtual separado con sus propias dependencias para cada proyecto y olvidarse de los conflictos con otros proyectos y el sistema Python..
En este tutorial, aprenderá los conceptos detrás de los entornos virtuales y cómo crearlos y usarlos, y descubrirá varias alternativas para situaciones especiales..
El paquete virtualenv soporta este concepto. Puedes instalar virtualenv usando pip instalar virtualenv
.
Una vez que se instala virtualenv, puede comenzar a crear entornos virtuales. Vamos a crear dos entornos llamados "venv_1" y "venv_2".
~> virtualenv ~ / venv_1 Usando el prefijo real '/usr/local/Cellar/python/2.7.10/Frameworks/Python.framework/Versions/2.7' Nuevo ejecutable de python en /Users/gigi/venv_1/bin/python2.7 También creando ejecutables en / Users / gigi / venv_1 / bin / python Instalando setuptools, pip, wheel ... listo. ~> virtualenv ~ / venv_2 Usando el prefijo real '/usr/local/Cellar/python/2.7.10/Frameworks/Python.framework/Versions/2.7' Nuevo ejecutable de python en /Users/gigi/venv_2/bin/python2.7 También creando ejecutables en / Users / gigi / venv_2 / bin / python Instalando setuptools, pip, wheel ... hecho.
Vamos a ver que pasó.
~> ls -la ~ / venv_1 total 16 personal de drwxr-xr-x 7 gigi 238 29 de marzo 23:12. drwxr-xr-x + 254 gigi staff 8636 Mar 29 23: 12… lrwxr-xr-x 1 gigi staff 79 Mar 29 23:12 .Python -> /usr/local/Cellar/python/2.7.10/Frameworks/Python. framework / Versions / 2.7 / Python drwxr-xr-x 16 gigi staff 544 Mar 29 23:12 bin drwxr-xr-x gigi staff 102 Mar 29 23:12 incluye drwxr-xr-x 3 gigi staff 102 Mar 29 29 23: 12 lib -rw-r - r-- 1 gigi staff 60 Mar 29 23:12 pip-selfcheck.json
Dentro del subdirectorio "bin", encontrará algunos ejecutables y enlaces simbólicos. Entre ellos se incluyen el intérprete de Python, pip, easy_install y, lo más importante, algunos scripts de activación..
~> ls -la ~ / venv_1 / bin total 136 drwxr-xr-x 16 gigi staff 544 Mar 29 23:12. drwxr-xr-x 7 personal de gigi 238 29 de marzo 23: 12… -rw-r - r-- 1 personal de gigi 2077 mar 29 23:12 activar -rw-r - r-- 1 personal de gigi 1019 de marzo 29 23 : 12 enable.csh -rw-r - r-- 1 staff de gigi 2217 Mar 29 23:12 enable.fish -rw-r - r-- 1 gigi staff 1137 Mar 29 23:12 enable_this.py -rwxr- xr-x 1 personal de gigi 249 29 de marzo 23:12 easy_install -rwxr-xr-x 1 gigi staff 249 de marzo 29 23:12 easy_install-2.7 -rwxr-xr-x 1 gigi staff 221 mar 29 23:12 pip -rwxr- xr-x 1 staff de gigi 221 mar 29 23:12 pip2 -rwxr-xr-x 1 gigi staff 221 mar 29 23:12 pip2.7 lrwxr-xr-1 gigi staff 9 mar 29 23:12 python -> python2. 7 -rwxr-xr-x 1 staff de gigi 2336 mar 29 23:12 python-config lrwxr-xr-x 1 gigi staff 9 de marzo 29 23:12 python2 -> python2.7 -rwxr-xr-x 1 gigi staff 12744 marzo 29 23:12 python2.7 -rwxr-xr-x 1 gigi staff 228 mar 29 23:12 rueda
El script de activación es la clave. Para activar un entorno virtual específico, usted obtiene el script de activación, como en: fuente ~ / venv_1 / bin_activate
. El efecto es establecer un grupo de variables de entorno y cambiar la solicitud al nombre del entorno virtual activado. También agrega un desactivar()
Función de shell que restablecerá todo. Una vez que se activa un entorno virtual, escribiendo pitón
Lanzará su Python con sus dependencias..
~> source ~ / venv_1 / bin / enable (venv_1) ~> which python / Users / gigi / venv_1 / bin / python (venv_1) ~>
Vamos a desactivar:
(venv_1) ~> desactivar ~> cuales python / usr / local / bin / python
Si tiene varios intérpretes de Python instalados en sus sistemas, puede especificar cuál usar para su entorno virtual usando el -pag
opción. Aquí hay un entorno virtual de Python 3:
~> virtualenv ~ / venv_3 -p / usr / local / bin / python3 Ejecutando virtualenv con el intérprete / usr / local / bin / python3 Usando el prefijo base '/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework /Versions/3.5 'Nuevo ejecutable de python en /Users/gigi/venv_3/bin/python3.5 También creando ejecutables en / Users / gigi / venv_3 / bin / python Instalando setuptools, pip… listo. ~> source ~ / venv_3 / bin /ctiv (venv_3) ~> python Python 3.5.1 (por defecto, 9 de enero de 2016, 19:28:52) [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.1.76 )] en darwin Escriba "ayuda", "derechos de autor", "créditos" o "licencia" para obtener más información. >>>
Virtualenv funciona incluso en pypy.
~> virtualenv ~ / venv_pypy -p 'which pypy' Ejecutando virtualenv con el intérprete / usr / local / bin / pypy Nuevo ejecutable pypy en / Users / gigi / venv_pypy / bin / pypy Instalando setuptools, pip… listo. ~> source ~ / venv_pypy / bin /ctiv (venv_pypy) ~> python Python 2.7.10 (5f8302b8bf9f53056e40426f10c72151564e5b19, Feb 11 2016, 20:39:39) [PyPy 4.0.1 con GCC 4.2.1 Compatible Apple LLVMM.2.2 clang-700.1.81)] en darwin Escriba "ayuda", "derechos de autor", "créditos" o "licencia" para obtener más información. >>>>
Puede cambiar directamente de un entorno a otro sin desactivar primero:
(venv_3) ~> source ~ / venv_2 / bin / enable (venv_2) ~> which python / Users / gigi / venv_2 / bin / python
DE ACUERDO. Veamos cómo usar dos versiones diferentes del mismo paquete en dos entornos virtuales diferentes. Esto es tan simple como activar cada entorno e instalar la versión deseada. Los entornos son totalmente independientes, por lo que el hecho de que exista una versión diferente en otro entorno no es un problema.
Instalemos la versión 1.0.0 del paquete sh en "venv_1".
(venv_1) ~> pip install sh == 1.0 Recopilando sh == 1.0.0 Descargando sh-1.0.tar.gz Ruedas de construcción para paquetes recolectados: sh Ejecutando setup.py bdist_wheel for sh ... hecho Almacenado en el directorio: / Users / gigi / Library / Caches / pip / wheels / f9 / fb / a1 / 383f6dc2834b319a788a006d3ab7cc014ee852485f00b9e8c3 Construido exitosamente Instalando los paquetes recolectados: sh Con éxito instalado sh-1.0 (venv_1) ~> pip freeze | grep sh sh == 1.0
Cambiemos a "venv_2" e instalemos la versión 1.11.
(venv_1) ~> source ~ / venv_2 / bin /ctiv (venv_2) ~> pip install sh == 1.11 Recopilación sh == 1.11 Descargando sh-1.11.tar.gz Ruedas de construcción para los paquetes recolectados: sh Running setup.py bdist_wheel para sh ... hecho Almacenado en el directorio: / Users / gigi / Library / Caches / pip / wheels / ba / 4f / a5 / ec77d662c3bf38f564b5ab16f1f3dbb9575922826fe810961c Con éxito construido sh Instalación de paquetes recolectados: sh Con éxito instalado sh-1.11 (venv_2) ~ grep sh sh == 1.11
Ahora, volvamos a "venv_1" y verifiquemos que su versión del paquete sh todavía es 1.0.
(venv_2) ~> fuente ~ / venv_1 / bin / activar (venv_1) ~> congelar pip | grep sh sh == 1.0 (venv_1) ~>
Toda esa activación, desactivación y cambio pueden envejecer después de un tiempo. Si administra muchos entornos virtuales, puede salirse de control. Ahí es donde entra en juego virtualenvwrapper. Virtualenvwrapper le permite listar, crear, eliminar y copiar entornos virtuales. También te permite cambiar de ambiente fácilmente..
Aquí están todos los comandos:
~> virtualenvwrapper virtualenvwrapper es un conjunto de extensiones para la herramienta virtualenv de Ian Bicking. Las extensiones incluyen envoltorios para crear y eliminar entornos virtuales y, de lo contrario, administrar su flujo de trabajo de desarrollo, lo que facilita el trabajo en más de un proyecto a la vez sin introducir conflictos en sus dependencias. Para obtener más información, consulte la documentación: http://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html Comandos disponibles: add2virtualenv: agregue el directorio a la ruta de importación allvirtualenv: ejecute un comando en all virtualvs cdproject: cambie el directorio a el proyecto activo cdsitepackages: cambie al directorio site-packages cdvirtualenv: cambie al directorio $ VIRTUAL_ENV cpvirtualenv: duplique el virtualenv nombrado para hacer uno nuevo lssitepackages: cree el contenido del directorio site-packages lsvirtualenv: liste virtualenvs mkproject: cree un nuevo project directory y su virtualenv asociado mktmpenv: cree un virtualenv temporal mkvirtualenv: cree un nuevo virtualenv en $ WORKON_HOME rmvirtualenv: elimine un virtualenv setvirtualenvprojectvggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg / show show show -paquetes on / off virtualenvwrapper: muestra este mensaje de ayuda wipeenv: eliminar todos los paquetes instalados en el trabajo virtualenv actual: enumere o cambie los virtualenvs que funcionan
Yo uso casi dos comandos: mkvirtualenv
y trabajar en
. Todos los entornos virtuales son creados bajo ~ / .virtualenvironments
.
Aquí es cómo crear un nuevo entorno virtual:
~> mkvirtualenv venv Nuevo ejecutable de python en venv / bin / python2.7 También creando ejecutables en venv / bin / python Instalando setuptools, pip ... hecho. (venv) ~>
Esto es similar a virtualenv, pero no especifica un directorio, solo un nombre. Tu nuevo entorno está aquí:
(venv) ~> árbol -L 2 ~ / .virtualenvs / venv / /Users/gigi/.virtualenvs/venv/ ├── bin │ activar │ ├── activar.csh │ ├── activar.fish │ ├── active_this.py │ ├── easy_install │ ├── easy_install-2.7 ├── get_env_details │ ├── pip │ ├── pip2 │ 2 pip2.7 │ postactivate ├── postdeactivate ├── ├── preactivate ├── preactivate │ ├── python -> python2.7 python2 -> python2.7 │ └── python2.7 ├── incluye │ └── python2.7 -> /usr/local/Cellar/python/2.7.10/Frameworks/Python.framework/Versions/2.7/include/python2.7 └── lib └── python2.7
Para cambiar entre entornos, utiliza la trabajar en
comando, que sin argumentos solo enumera todos los entornos virtuales. Tengo unos cuantos
(venv) ~> workon acme_server conman curr-gen nupic over-achiever pandas prime_hunter pypy servicio de cotizaciones venv work (venv) ~> workon conman (conman) ~>
Virtualenv-Burrito es un proyecto para instalar virtualenv y virtualenvwrapper en un comando.
El módulo venv se agregó a Python 3.3 y proporciona la creación y administración de entornos virtuales incorporados al igual que virtualenv. El comando para crear entornos virtuales es pyenv
. De lo contrario es bastante similar a virtualenv.
Los entornos virtuales son muy útiles para aislar dependencias entre diferentes proyectos. Pero eso no se extiende a las bibliotecas nativas. Muchas extensiones de C dependen de versiones particulares de bibliotecas nativas, y esas no pueden ser específicas del entorno virtual.
Conda puede abordar este problema. Es un sistema de administración de paquetes que maneja todas las dependencias, no solo las dependencias de Python. Incluso se puede utilizar para empaquetar software que no sea Python.
¿Tienes que usar entornos virtuales? Realmente no. Si por alguna razón no te gusta la magia de los entornos virtuales, existen otras opciones..
La funcionalidad de un entorno virtual es bastante simple. Si necesita un control total, puede hacerlo usted mismo y copiar exactamente el subconjunto de herramientas y paquetes que desee en una estructura de directorio de destino, configurar algunas variables de entorno y listo..
Si convierte sus aplicaciones en un contenedor docker o en una imagen en la nube, entonces solo habrá un proyecto y es posible que no necesite un entorno virtual en el medio. Simplemente puedes construir sobre el sistema Python, asegurándote de que no se cambiará.
Si todo lo que le importa es probar su código en diferentes intérpretes y entornos, entonces Tox puede hacer todo el trabajo por usted. Aún utilizará entornos virtuales debajo de las cubiertas, pero no tiene que lidiar con ellos.
Existen algunas prácticas recomendadas de empaquetado y entorno virtual que han surgido a lo largo del tiempo para sistemas Python robustos..
Fijar significa especificar con precisión las versiones de sus dependencias. Si sale una nueva versión y usted instala su aplicación en un nuevo servidor, seguirá usando la versión con la que probó y funciona, y no la más reciente ni la mejor. Hay un inconveniente aquí: tendrá que actualizar explícitamente las versiones si desea mantenerse al día con el progreso realizado por sus dependencias, pero por lo general vale la pena..
Confiar en la versión del sistema es una mala práctica, ya que existen otras herramientas que dependen de ella, y si comienza a actualizar los paquetes del sistema, puede romperlos. También puede verse afectado por las actualizaciones de seguridad que modifican los paquetes del sistema o, en general, si desea actualizar su sistema operativo, puede encontrar que el sistema Python ahora es diferente..
PyPI puede estar abajo. Si necesita hornear una nueva imagen y no puede acceder a PyPI, está en problemas. Devpi es una buena opción para evitar la frustración..
Hay muchas opciones para administrar múltiples proyectos de Python en la misma máquina sin conflictos. Averigua qué opción es mejor para ti y úsala. Es rápido y fácil crear entornos virtuales. No dudes en aprovechar esta útil herramienta. Si tiene requisitos especiales, también hay muchas soluciones..