J'ai différentes versions de python installées sur mon Mac en utilisant Macports. Quand j'ai sélectionné python 2.7 via $ port select python python27
, virtualenvwrapper fonctionne parfaitement.
Mais si je sélectionne une autre version de python, c'est-à-dire 2.6, virtualenvwrapper génère un message d'erreur: ImportError: Aucun module nommé virtualenvwrapper.hook_loader
J'ai vérifié mon .profile et il définit VIRTUALENVWRAPPER_PYTHON
à /opt/local/bin/python
, il me semble donc que virtualenvwrapper devrait fonctionner quel que soit python que j'ai sélectionné.
Une idée de ce qui provoquerait virtualenvwrapper pour générer une erreur .hook_loader lorsque je change de version python?
Je sais que cela est à peu près résolu dans vos commentaires, mais c'est uniquement sur mac,
et plus encore, je pense que la bonne façon devrait être de définir VIRTUALENVWRAPPER_PYTHON
au réel python que vous utilisez sur la ligne de commande.
Pour être sûr que vous pouvez faire which python
.
En fait, vous pouvez même faire:
export VIRTUALENVWRAPPER_PYTHON=`which python`
Sur Linux, je fais cela dans mon .bashrc, donc dans l'ensemble, en supposant que vous avez installé virtualenv et créé votre premier "environnement virtuel" virtualenv
(comment 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
(et au fait, vous avez écrit:
J'ai vérifié mon .profile et il définit VIRTUALENVWRAPPER_PYTHON sur/opt/local/bin/python, donc il me semble que virtualenvwrapper devrait fonctionner quel que soit python que j'ai sélectionné
ce qui est en fait le contraire - virtualenv s'appuie sur l'utilisation du bon python (et les packages qui vont avec)) il est donc très important de définir le chemin python en conséquence .
Même l'exécution d'un fichier py avec un "#!/Bin/python" peut causer des problèmes une fois que vous êtes virtualenved!
Rien de tout cela n'a fonctionné. J'ai installé Python3 d'abord lors de la configuration de ma machine osx, et pip et tous les paramètres par défaut.
Tout d'abord, vérifiez quel python vous avez installé:
$ `which python` -V
Si cela retourne "Python 2.7.12", alors vous êtes prêt à exécuter:
$ 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
Cela activera également le api_server
workon, qui change votre python exécutable:
$ which python
/Users/eric/.virtualenvs/api_server/bin/python
$ python -V
Python 2.7.12
Qu'est-ce que which python
en fait? Il affiche le répertoire des exécutables python trouvés dans votre PATH:
$ which python
/usr/local/bin/python
En utilisant which python
, vous passez essentiellement par /usr/local/bin/python
à la -p
option dans le répertoire mkvirtualenv.
Que se passe-t-il lorsque vous avez plusieurs exécutables python renvoyés dans which python
? Trouvez celui que vous voulez et passez-le:
$ mkvirtualenv -p /usr/local/bin/python3 api_server
Et virtualenvwrapper finira par utiliser cet exécutable python à la place.
Confirmé l'utilisation de deux variables d'environnement portant le même nom:
VIRTUALENVWRAPPER_PYTHON
- dont Python est utilisée par l'utilitaire virtualenvwrapper lui-même. En d'autres termes, quelle version de Python exécute virtualenvwrapper
, comme si cette version Python avait été explicitement nommée dans le #!
ligne du fichier de script virtualenvwrapper.
VIRTUALENV_PYTHON
- dont Python sera installée par virtualenv
lorsque vous créerez un nouvel environnement virtuel. Équivalent à -p / --python
option sur la ligne de commande virtualenv
.
Et peut-être évidemment :) la version de Python exécuté dans un environnement virtuel est la version que vous installez pour cet environnement - n'a aucune relation avec les variables d'environnement ci-dessus après la création de l'env.
Voir https://stackoverflow.com/a/24724360/763269 pour savoir comment mettre à niveau Python dans un virtualenv.
Vous pouvez sélectionner la version python explicitement
mkvirtualenv -p python3 venvname
ou
mkvirtualenv -p python2.7 venvname