Usando diferentes versiones de python con virtualenvwrapper


Tengo varias versiones de python instaladas en mi Mac usando Macports. Cuando he seleccionado python 2.7 a través de $ port select python python27, virtualenvwrapper funciona perfectamente.

Pero si selecciono otra versión de python, es decir, 2.6, virtualenvwrapper genera un mensaje de error: ImportError: No module named virtualenvwrapper.hook_loader

Revisé mi .profile y está configurando VIRTUALENVWRAPPER_PYTHON a /opt/local/bin/python, por lo que me parece que virtualenvwrapper debería funcionar independientemente del python que haya seleccionado.

Cualquiera idea de lo que causaría virtualenvwrapper para generar un .hook_loader error al cambiar las versiones de python?

Author: 0xC0000022L, 2011-06-19

4 answers

Sé que esto está bastante resuelto en sus comentarios, pero es solo para mac,

Y aún más creo que la forma correcta debería ser establecer VIRTUALENVWRAPPER_PYTHON al python real que está utilizando en la línea de comandos.

Para estar seguro de que puede hacer which python.

En realidad, incluso puedes hacer:

export VIRTUALENVWRAPPER_PYTHON=`which python`

En linux hago esto en mi .bashrc, así que en general, suponiendo que instaló virtualenv y creó su primer "entorno virtual" virtualenv (cómo original)

. virtualenv/bin/activate
export WORKON_HOME=$HOME/.virtualenvs # or whatever else you want
export VIRTUALENVWRAPPER_PYTHON=`which python`
export PROJECT_HOME=SOMETHING
source $HOME/virtualenv/bin/virtualenvwrapper.sh # or wherever else you got that installed

(y por cierto, usted escribió:

Revisé mi.y está configurando VIRTUALENVWRAPPER_PYTHON a / opt / local / bin / python, por lo que me parece que virtualenvwrapper debería funcionar independientemente de qué python he seleccionado

Que es en realidad lo contrario - virtualenv se basa en usar el python correcto (y los paquetes que van con él) por lo que es muy importante establecer la ruta de python en consecuencia.

Incluso ejecutando un archivo py con un "#!/ bin / python " podría traer problemas una vez que virtualenved!

 25
Author: Stefano,
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-03-15 02:45:55

Ninguno de estos funcionó. Instalé Python3 primero al configurar mi máquina osx, y pip y todos por defecto a eso.

Primero, comprueba qué python tienes instalado:

$ `which python` -V

Si esto devuelve "Python 2.7.12", entonces está configurado para ejecutar:

$ mkvirtualenv -p `which python` api_server
Running virtualenv with interpreter /usr/local/bin/python
New python executable in /Users/eric/.virtualenvs/api_server/bin/python2.7
Also creating executable in /Users/eric/.virtualenvs/api_server/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /Users/eric/.virtualenvs/api_server/bin/predeactivate
virtualenvwrapper.user_scripts creating /Users/eric/.virtualenvs/api_server/bin/postdeactivate
virtualenvwrapper.user_scripts creating /Users/eric/.virtualenvs/api_server/bin/preactivate
virtualenvwrapper.user_scripts creating /Users/eric/.virtualenvs/api_server/bin/postactivate
virtualenvwrapper.user_scripts creating /Users/eric/.virtualenvs/api_server/bin/get_env_details

Esto también activará el workon api_server, que cambia tu ejecutable python:

$ which python
/Users/eric/.virtualenvs/api_server/bin/python
$ python -V
Python 2.7.12

¿Qué hace which python realmente? Muestra el directorio de los ejecutables de python que se encuentran en su RUTA:

$ which python
/usr/local/bin/python

Al usar which python, básicamente estás pasando /usr/local/bin/python a la opción -p en el directorio mkvirtualenv.

¿Qué sucede cuando se devuelve más de un ejecutable python en which python? Simplemente encuentra el que quieras y pásalo:

$ mkvirtualenv -p /usr/local/bin/python3 api_server

Y virtualenvwrapper terminará usando ese ejecutable de python en su lugar.

 9
Author: eduncan911,
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-11-10 21:25:42

Confirmó el uso de dos variables de entorno de nombre similar:

VIRTUALENVWRAPPER_PYTHON - qué versión de Python es utilizada por la propia utilidad virtualenvwrapper.

VIRTUALENV_PYTHON - qué versión de Python instalará virtualenv cuando cree un nuevo entorno virtual. Equivalente a la opción -p / --python en la línea de comandos virtualenv.

Y quizás obviamente:) la versión de Python que se ejecuta en un entorno virtual es la versión que instaló para él - no tiene relación con el entorno anterior variables después de crear el env.

Véase https://stackoverflow.com/a/24724360/763269 para saber cómo actualizar Python dentro de un virtualenv.

 6
Author: Chris Johnson,
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:09:56

Usted (el OP) parece haber instalado virtualenv y virtualenvwrapper con python2.7, y no con python2.6. Si se llama a python2.6 en el momento en que su shell carga el virtualenvwrapper.sh guión, es infeliz. Bastante sencillo.

VIRTUALENVWRAPPER_PYTHON está hecho para esas situaciones. Con él, puede asegurarse de que siempre utiliza la versión correcta de python, y no tiene que agregar siempre que -p /path/to/python2.7

Por lo tanto, no estoy de acuerdo con la respuesta de Stefano en ese caso, en la situación de la OP, usted debe han explicado claramente en su .bashrc qué python usar:

...
export VIRTUALENVWRAPPER_PYTHON=/path/to/your/python2.7
source /path/to/bin/virtualenvwrapper.sh

Así debería estar bien todo el tiempo! Virtualenvwrapper se hace para simplificar las cosas.

También, tenga en cuenta que /opt/local/bin/python debe ser un enlace simbólico a la versión de python que seleccione con port python select (verifique eso con ls -l /opt/local/bin/python para estar seguro).

 -1
Author: lajarre,
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
2012-10-11 10:42:49