Usando Python 3 en virtualenv


781

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

Solía brew install python3instalarlo en mi Mac. Ahora, ¿cómo creo un virtualenv que usa la nueva versión?

por ejemplo, sudo virtualenv envPython3

Si lo intento:

virtualenv -p python3 test

Yo 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

1
¿intentó actualizar solo el intérprete en su entorno actual o simplemente decidió comenzar desde cero?
Charlie Parker

¿Es posible instalar solo python3 en un entorno virtual sin actualizar el sistema python (mantener en python2.x) en mac?
junio

Respuestas:


1386

simplemente corre

virtualenv -p python3 envname

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

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

pip install --upgrade virtualenv

17
La actualización virtualenv funcionó, pero por alguna razón también tuve que ser explícito sobre el ejecutable de python3 convirtualenv -p $(which python3) envname
dkamins

2
¿Es posible simplemente cambiar el intérprete de python del entorno actual en lugar de crear un nuevo entorno?
Charlie Parker

En Raspbian Jessie 'virtualenv --no-site-packages python3.4' funcionó. --distribute está en desuso y -p no parece necesario ya que virtualenv usa python3.
alkopop79

¿Por qué después de ejecutarse virtualenv -p python3 my_virtual_env, también python3se puede acceder desde fuera del entorno virtual?
Bishwas Mishra

@CharlieParker Puede realizar las siguientes dos etapas en secuencia: 1. Eliminar los bin, lib, include, localy sharedirectorios en el directorio raíz de su proyecto. 2. En ejecución de terminal: virtualenv -p python3 .que inicializa un nuevo Python3 virtualenv en el directorio actual.
Calleniah

251

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

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

pyvenv /path/to/new/virtual/environment

Actualización para Python 3.6 y más reciente:

Como pawciobiel correctamente comenta , pyvenvestá en desuso a partir de Python 3.6 y la nueva forma es:

python3 -m venv /path/to/new/virtual/environment

2
Espero que estés en lo correcto ya que dejé virtualenv para trabajar con pyenv junto con Python 3.5.2
Jayesh

1
No he encontrado ninguna información que confirme las preocupaciones relacionadas con la ubicación, la opción de reubicación se eliminó ... ¿ahora es innecesario? es su una solución? ¿O es ahora completamente inútil preparar una aplicación?
JM Becker

77
Exactamente, pero también podría ejecutar: python3 -m venv /path/v3dado que el script pyvenv ha quedado en desuso a partir de Python 3.6.
pawciobiel

44
usando la última versión de anaconda python 3.6 en mac y python3 -m venv /path/v3errores aquí. Error: Command '['/path/v3/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit¿Me estoy perdiendo de algo? Con la --without-pipopción, al menos crea el venv con activar / desactivar scripts correctamente.
monkut

3
Alguien sabe cómo activar un python3.6 -m venv <venvname>. No hay Scripts / en el directorio creado, ni "activar" en el bin / subdir.
Shayne

60

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

brew install pyenv

luego instale la versión de Python que desee:

pyenv install 3.5.0

y simplemente cree virtualenv con la ruta a la versión de intérprete necesaria:

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

Eso es todo, verifique la versión:

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

También hay complementos para pyenv pyenv-virtualenv, pero de alguna manera no funcionó para mí.


parece que su método requiere crear un nuevo entorno de Python. ¿Puede pyenv trabajar con virtualenv y simplemente cambiar mi versión de Python cuando quiera?
Charlie Parker

58

Instalar requisitos previos.

sudo apt-get install python3 python3-pip virtualenvwrapper

Cree un entorno virtual basado en Python3. Opcionalmente habilitar --system-site-packagesbandera.

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

Establecer en el entorno virtual.

workon <venv-name>

Instale otros requisitos utilizando el pipadministrador 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 pdbppglobalmente y luego reutilizarlos en virtualenvs.

El uso de esta técnica ahorra mucho tiempo en buscar paquetes e instalarlos, además de consumir un mínimo espacio en disco 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 de Python en todo el sistema, se recomienda no usar --system-site-packagesflag especialmente durante el desarrollo, ya que he notado que ralentiza mucho el inicio de Django. Supongo que la inicialización del entorno Django está escaneando y agregando manualmente todos los paquetes del sitio desde la ruta del sistema, lo que podría ser la razón. Incluso se python manage.py shellvuelve muy lento.

Habiendo dicho ese experimento, qué opción funciona mejor. Puede ser seguro simplemente omitir la --system-site-packagesbandera para proyectos de Django.


1
apt-getbrew
Apliqué

38
virtualenv --python=/usr/bin/python3 <name of env>

trabajó para mi.


Lo intenté pero se dice The executable python3 (from --python=python3) does not exist, ¿qué harías? Quería preparar isntall python3 pero no estaba seguro de si era una buena idea o si mi sistema se confundiría con la versión de python que estoy usando
Charlie Parker

¡Funciona como un encanto en Ubuntu 16.04!
Eric Vieira

20

Puede especificar una versión específica de Python mientras 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

Como -pfunciona

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)

esta es la mejor respuesta aquí
Collier

14

Tenía el mismo ERRORmensaje La solución de tbrisker no funcionó en mi caso. En cambio, esto resolvió el problema:

$ python3 -m venv .env

13

Esto es todo lo que necesita para ejecutar un entorno virtual en python / python3

Primero, si virtualenvno está instalado, ejecute

pip3 install virtualenv 

Ahora corre:

virtualenv -p python3 <env name> 

En algún momento el cmd virtualenvfalla, si es así, use esto:

python3 -m virtualenv <env_name>  # you can specify full path instead <env_name> to install the file in a different location other than the current location

Ahora active el entorno virtual:

source <env_name>/bin/activate

O:

source `pwd`/<env_name>/bin/activate

Ahora corre

which python

Debería ver la ruta completa a su directorio y <env_name>/bin/python sufijo

Para salir de virtualenv, ejecute:

deactivate 

8

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

Citando de venv - docs ,

En desuso desde la versión 3.6: pyvenv era la herramienta recomendada para crear entornos virtuales para Python 3.3 y 3.4, y está en desuso en Python 3.6.

Modificado en la versión 3.5: ahora se recomienda el uso de venv para crear entornos virtuales.

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. Ej: "C: / My Dox / Spaced Directory / Something")

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

Para activar o invocar venv necesita:

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

Puede desactivar un entorno virtual escribiendo "desactivar" en su shell. 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, solo se agrega esto en caso de que alguien use vscode con extensión de python

En caso de que use el código vs con su extensión de python, podría enfrentar un problema con su pylint que apunta a la instalación global. 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í hay un método simple para superar esto.

cd Workspace\Scripts
.\Activate.ps1
code .

Básicamente, estamos activando el entorno primero y luego invocando código vs para que pylint comience dentro del entorno y pueda ver todos los paquetes locales.


Utilizo virtualenvpara el uso diario de entornos virtuales (workon , etc.), pero para la creación confiable de nuevos entornos virtuales en python3.xesta es la única forma en que encontré que funciona.
Bobble

6

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

which virtualenv

Si esto aparece 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 (preparación en el caso de OP). Este fue mi problema.

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

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


6

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


5

En Mac tuve que hacer lo siguiente para que funcione.

mkvirtualenv --python=/usr/bin/python3 YourEnvNameHere

Para saber exactamente donde está su versión pitón deseado es el uso ubicación which python2.7o which python3.5o which python3.6, vuelva a colocar la sobre--python=DIRECTORY
Santhosh

3

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

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


3

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


2

Funciono para mi

virtualenv --no-site-packages --distribute -p /usr/bin/python3 ~/.virtualenvs/py3

2

Para aquellos que tienen problemas al trabajar 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 ventanas

activate name_of_your_virtualenv

1

Intenté todo lo anterior, todavía no funcionó. Entonces, como fuerza bruta, simplemente reinstalé la anaconda, reinstalé 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

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

Encontré 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. Instale python3.x (si no está presente) para su plataforma
  2. Instale python3.x-devel para su plataforma
  3. Cree un entorno virtual en python 3.x (por ejemplo, $ python3.6 -m venv virenv_test_p3 /)
  4. Active el entorno de prueba para python 3.x (por ejemplo, fuente virenv_test_p3 / bin / enable)
  5. Instale los paquetes que desea usar en su nuevo entorno virtual de python 3 y que sean compatibles (por ejemplo, pip install Django == 1.11.2)

1

Los siguientes comandos simples pueden crear un entorno virtual con la versión 3.5

apt-get install python3-venv

python3.5 -m venv <your env name>

si quieres la versión virtual env como 3.6

python3.6 -m venv <your env name>

1

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

pipenv install --python 3.6

0

Obtuve el mismo error debido a que es un conflicto con la instalación de miniconda3, así que cuando escribe "which virtualenv" y si ha instalado miniconda y apunta a esa instalación, puede eliminarlo (si me gusta y no se ha movido todavía) o cambie la variable de entorno para que apunte a la instalación que desea.


0

En la línea de comandos de Windows, lo siguiente funcionó para mí. Primero averigüe dónde se encuentran sus ejecutables de Python:

where python

Esto generará las rutas a los diferentes python.exe en su sistema. Aquí estaban los míos:

C:\Users\carandangc\Anaconda3\python.exe
C:\Python27\python.exe

Entonces, para Python3, esto se ubicó en la primera ruta para mí, así que hice un CD a la carpeta raíz de la aplicación donde quiero crear una carpeta de entorno virtual. Luego ejecuto lo siguiente que incluye la ruta a mi ejecutable Python3, nombrando mi entorno virtual 'venv':

virtualenv --python=/Users/carandangc/Anaconda3/python.exe venv

A continuación, active el entorno virtual:

call venv\Scripts\activate.bat

Finalmente, instale las dependencias para este entorno virtual:

pip install -r requirements.txt

Este require.txt podría rellenarse manualmente si conoce las bibliotecas / módulos necesarios para su aplicación en el entorno virtual. Si tenía la aplicación ejecutándose en otro entorno, puede generar automáticamente las dependencias ejecutando lo siguiente (cd en la carpeta de la aplicación en el entorno donde está funcionando):

pip freeze > requirements.txt

Luego, una vez que tenga los requisitos.txt que haya 'congelado', puede instalar los requisitos en otra máquina o en un entorno limpio con lo siguiente (después del CD en la carpeta de la aplicación):

pip install -r requirements.txt

Para ver su versión de Python en el entorno virtual, ejecute:

python --version

Entonces voila ... tienes tu Python3 ejecutándose en tu entorno virtual. Salida para mi:

Python 3.7.2
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.