Usando Python 3 en virtualenv


Usando virtualenv, corro mis proyectos con la versión predeterminada de Python (2.7). En un proyecto, necesito usar Python 3.4.

Usé brew install python3 para instalarlo en mi Mac. Ahora, ¿cómo puedo crear un virtualenv que utiliza la nueva versión?

Por ejemplo, sudo virtualenv envPython3

Si lo intento:

virtualenv -p python3 test

Obtengo:

Running virtualenv with interpreter /usr/local/bin/python3
Using base prefix '/usr/local/Cellar/python3/3.4.0_1/Frameworks/Python.framework/Versions/3.4'
New python executable in test/bin/python3.4
Also creating executable in test/bin/python
Failed to import the site module
Traceback (most recent call last):
  File "/Users/user/Documents/workspace/test/test/bin/../lib/python3.4/site.py", line 67, in <module>
    import os
  File "/Users/user/Documents/workspace/test/test/bin/../lib/python3.4/os.py", line 634, in <module>
    from _collections_abc import MutableMapping
ImportError: No module named '_collections_abc'
ERROR: The executable test/bin/python3.4 is not functioning
ERROR: It thinks sys.prefix is '/Users/user/Documents/workspace/test' (should be '/Users/user/Documents/workspace/test/test')
ERROR: virtualenv is not compatible with this system or executable
Author: Alan W. Smith, 2014-05-24

19 answers

Simplemente ejecute

virtualenv -p python3 envname

Actualización después de la edición de OP:

Hubo un error en la versión del OP de virtualenv, como se describe aquí. El problema se solucionó ejecutando:

pip install --upgrade virtualenv
 974
Author: tbrisker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-24 09:39:10

Python 3 tiene un soporte integrado para entornos virtuales-venv. Podría ser mejor usar eso en su lugar. Refiriéndose a los documentos:

La creación de entornos virtuales se realiza ejecutando pyvenv script:

pyvenv /path/to/new/virtual/environment

Actualización para Python 3.6 y posteriores:

Como pawciobiel correctamente comentarios, pyvenv es obsoleto como de Python 3.6 y la nueva forma es:

python3 -m venv /path/to/new/virtual/environment
 160
Author: geckon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:47

Instalar requisitos previos.

sudo apt-get install python3 python3-pip virtualenvwrapper

Cree un entorno virtual basado en Python3. Opcionalmente, habilite el indicador --system-site-packages.

mkvirtualenv -p /usr/bin/python3 <venv-name>

Se establece en el entorno virtual.

workon <venv-name>

Instale otros requisitos usando pip gestor de paquetes.

pip install -r requirements.txt
pip install <package_name>

Cuando se trabaja en múltiples proyectos de python simultáneamente, generalmente se recomienda instalar paquetes comunes como pdbpp globalmente y luego reutilizarlos en virtualenvs.

El uso de esta técnica ahorra una gran cantidad de tiempo dedicado a obtener paquetes e instalarlos, además de consumir un espacio de disco mínimo y ancho de banda de red.

sudo -H pip3 -v install pdbpp
mkvirtualenv -p $(which python3) --system-site-packages <venv-name>

Instrucciones específicas de Django

Si hay muchos paquetes python en todo el sistema, se recomienda no usar --system-site-packages flag especialmente durante el desarrollo, ya que he notado que ralentiza mucho el inicio de Django. Presumo que la inicialización del entorno Django está escaneando manualmente y anexando todos los paquetes del sitio desde la ruta del sistema que podría ser la razón. Incluso python manage.py shell se vuelve muy lento.

Dicho esto, experimente qué opción funciona mejor. Podría ser seguro simplemente saltar --system-site-packages bandera para los proyectos de Django.

 45
Author: Sandeep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-10 09:40:10

He intentado pyenv y es muy útil para cambiar versiones de python (global, local en la carpeta o en el virtualenv):

brew install pyenv

Luego instale la versión de Python que desea:

pyenv install 3.5.0

Y simplemente cree virtualenv con la ruta a la versión del intérprete necesaria:

virtualenv -p /Users/johnny/.pyenv/versions/3.5.0/bin/python3.5 myenv

Eso es todo, comprueba la versión:

. ./myenv/bin/activate && python -V

También Hay plugin para pyenv pyenv-virtualenv pero no funcionó para mí de alguna manera.

 38
Author: Johnner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-19 20:38:09
virtualenv --python=/usr/bin/python3 <name of env>

Funcionó para mí.

 30
Author: bewithaman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-22 14:21:01

Puede especificar específico Versión de Python mientras se crea el entorno.
Se menciona en virtualenv.py

virtualenv --python=python3.5 envname

En algunos casos esta tiene que ser la ruta completa al ejecutable:

virtualenv --python=/Users/username/.pyenv/versions/3.6.0/bin/python3.6 envname

Cómo funciona -p

parser.add_option(
    '-p', '--python',
    dest='python',
    metavar='PYTHON_EXE',
    help='The Python interpreter to use, e.g., --python=python3.5 will use the python3.5 '
    'interpreter to create the new environment.  The default is the interpreter that '
    'virtualenv was installed with (%s)' % sys.executable)
 10
Author: KiranJasvanee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-07 22:50:33

Tenía el mismo ERROR mensaje. la solución de tbrisker no funcionó en mi caso. En su lugar, esto resolvió el problema:

$ python3 -m venv .env
 9
Author: Aziz Alto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-11 01:59:32

Python ahora viene con su propia implementación de entorno virtual, con el nombre de "venv". Yo sugeriría usar eso, en lugar de virtualenv.

Citando de venv-docs ,

Obsoleto desde la versión 3.6: pyvenv fue la herramienta recomendada para crear entornos virtuales para Python 3.3 y 3.4, y es obsoleto en Python 3.6.

Cambiado en la versión 3.5: El uso de venv ahora se recomienda para creación virtual ambiente.

Para windows, para iniciar venv en algún proyecto, abra cmd:

python -m venv "c:\path\to\myenv"

(Sugeriría usar comillas dobles alrededor de la ruta del directorio si contiene espacios. Ex: "C:/My Dox / Directorio espaciado / Algo")

Una vez que venv está configurado, verá algunas carpetas nuevas dentro del directorio de su proyecto. Uno de ellos sería "Guiones".

Para activar o invocar venv necesitas:

C:\> <venv>\Scripts\activate.bat

Puede desactivar un entorno virtual escribiendo "desactivar" en tu caparazón. Con esto, ahora está listo para instalar las bibliotecas específicas de su proyecto, que residirán en la carpeta "Lib".

================================ Editar 1 ==================================== El escenario que se discutirá a continuación no es lo que se preguntó originalmente, simplemente agregando esto en caso de que alguien use vscode con extensión python

En el caso de que use vs code con su extensión python, podría enfrentar un problema con su pylint que apunta a la extensión global instalación. En este caso, pylint no podrá ver los módulos que están instalados en su entorno virtual y, por lo tanto, mostrará errores durante la importación.

Aquí es un método simple para superar esto.

cd Workspace\Scripts
.\Activate.ps1
code .

Básicamente estamos activando el entorno primero y luego invocando vs-code para que pylint se inicie dentro del entorno y pueda ver todos los paquetes locales.

 7
Author: Blaze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-26 13:37:19

En python3. 6 intenté python3 -m venv myenv, según la documentación, pero estaba tardando mucho. Así que el comando muy simple y rápido es python -m venv yourenv Funcionó para mí en python3. 6.

 7
Author: Sujeet Agrahari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-09 02:54:35

Además de las otras respuestas, recomiendo verificar qué instancia de virtualenv está ejecutando:

which virtualenv

Si esto aparece algo en /usr/local/bin, entonces es posible - incluso probable - que haya instalado virtualenv (posiblemente usando una instancia de easy_tools o pip) sin usar el administrador de paquetes de su sistema (brew en el caso de OP). Este era mi problema.

Hace años-cuando yo era aún más ignorante - había instalado virtualenv y estaba enmascarando mi sistema virtualenv proporcionado por el paquete.

Después de quitar este viejo, roto virtualenv, mis problemas desaparecieron.

 6
Author: sage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-21 16:32:52

En Mac tuve que hacer lo siguiente para que funcione.

mkvirtualenv --python=/usr/bin/python3 YourEnvNameHere
 4
Author: Stryker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-07 14:45:39

Si instala python3 (brew install python3) junto con virtualenv burrito , puede hacer mkvirtualenv -p $(which python3) env_name

Por supuesto, sé que virtualenv burrito es solo una envoltura, pero me ha servido bien a lo largo de los años, reduciendo algunas curvas de aprendizaje.

 3
Author: Antony,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-15 03:42:59

virtualenv --python=/usr/local/bin/python3 <VIRTUAL ENV NAME> esto añadirá python3 ruta para su entorno virtual.

 3
Author: Hardik Gajjar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-01 07:21:17

Me funcionó

virtualenv --no-site-packages --distribute -p /usr/bin/python3 ~/.virtualenvs/py3
 2
Author: Dadaso Zanzane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-09 07:11:29

Para aquellos que tienen problemas mientras trabajan con Anaconda3 (Python 3).

Podrías usar

conda create -n name_of_your_virtualenv python=python_version 

Para activar el entorno ( Linux, macOS)

source activate name_of_your_virtualenv

Para Windows

activate name_of_your_virtualenv
 2
Author: 2324,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-20 14:49:30

Probé todas las cosas anteriores, todavía no funcionó. Así que como una fuerza bruta, acabo de reinstalar la anaconda, reinstalar el virtualenv... y funcionó.

Amans-MacBook-Pro:~ amanmadan$ pip install virtualenv
You are using pip version 6.1.1, however version 8.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting virtualenv
  Downloading virtualenv-15.0.3-py2.py3-none-any.whl (3.5MB)
    100% |████████████████████████████████| 3.5MB 114kB/s 
Installing collected packages: virtualenv
Successfully installed virtualenv-15.0.3
Amans-MacBook-Pro:python amanmadan$ virtualenv my_env
New python executable in /Users/amanmadan/Documents/HadoopStuff/python/my_env/bin/python
Installing setuptools, pip, wheel...done.
Amans-MacBook-Pro:python amanmadan$ 
 1
Author: Aman Madan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-30 13:24:18

Quería mantener python 2.7.5 como versión predeterminada en Centos 7, pero tener python 3.6.1 en un entorno virtual que se ejecuta junto con otros entornos virtuales en python 2.x

He encontrado el siguiente enlace la mejor solución para la versión más reciente de python (python 3.6.1) https://www.digitalocean.com/community/tutorial_series/how-to-install-and-set-up-a-local-programming-environment-for-python-3. Muestra los pasos para diferentes plataformas, pero los pasos básicos son

  1. Instala python3.x (si no está presente) para su plataforma
  2. Instala python3.x-devel para su plataforma
  3. Crear entorno virtual en python 3.x (por ejemplo pyth python3. 6-m venv virenv_test_p3/)
  4. Activar el testenvironment para python 3.x (por ejemplo fuente virenv_test_p3/bin/activate)
  5. Instale los paquetes que desea usar en su nuevo entorno virtual python 3 y que son compatibles ( por ejemplo, pip install Django==1.11.2)
 0
Author: Gunnar Sigfusson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-28 10:39:21

Tengo el mismo error debido a que es un conflicto con la instalación de miniconda3, por lo que cuando escriba "qué virtualenv" y si ha instalado miniconda y apunta a esa instalación, puede eliminarla (si me gusta y aún no se ha movido a ella) o cambiar su variable de entorno para que apunte a la instalación que desea.

 0
Author: PrincessPea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-16 23:35:33

Para aquellos de ustedes que están usando pipenv y quieren instalar una versión específica:

pipenv install --python 3.6
 0
Author: Vlad Bezden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-29 15:34:40