Je travaille pour mettre en place un projet Django sur Amazon EC2 avec une instance Ubuntu 14.04 LTS. Je veux écrire mon code en utilisant Python 3. J'ai a été informé que la meilleure façon de le faire est d'utiliser virtualenvwrapper
. J'ai installé virtualenvwrapper
avec succès et mis
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.4
export PROJECT_HOME=$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh
dans mon .bashrc
fichier. Maintenant, je vois:
/usr/bin/python3.4: Error while finding spec for 'virtualenvwrapper.hook_loader' (<class 'ImportErro
r'>: No module named 'virtualenvwrapper')
virtualenvwrapper.sh: There was a problem running the initialization hooks.
If Python could not import the module virtualenvwrapper.hook_loader,
check that virtualenvwrapper has been installed for
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.4 and that PATH is
set properly.
Comment puis-je réparer cela?
Au lieu de spécifier un interpréteur différent python avec -p
flag, vous pouvez également configurer votre interprète souhaité par défaut.
Selon virtualenvwrapper
documentation , virtualenvwrapper.sh
trouve les premiers programmes python
et virtualenv
sur le $PATH
et se souvient de les utiliser plus tard.
Si votre virtualenvwrapper
n'est pas installé sur l'interpréteur par défaut de votre système d'exploitation python (/usr/bin/python
), assurez-vous de remplacer les variables d'environnement comme ci-dessous:
VIRTUALENVWRAPPER_PYTHON
vers le chemin complet de votre python interprèteVIRTUALENVWRAPPER_VIRTUALENV
vers le chemin complet de virtualenvPar exemple, sur mon .bash_profile
(Mac):
#virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/Library/Frameworks/Python.framework/Versions/3.5/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV=/Library/Frameworks/Python.framework/Versions/3.5/bin/virtualenv
source /Library/Frameworks/Python.framework/Versions/3.5/bin/virtualenvwrapper.sh
Rechargez vos nouvelles variables en exécutant source ~/.bash_profile
J'ai eu le même problème après les récentes mises à jour de Homebrew.
Dans le passé, la plupart des gens auraient exécuté pip install virtualenvwrapper
dans les packages du site système et cela aurait fonctionné.
Homebrew a interrompu ce flux de travail par 1) ne plus observer le python système et 2) ne plus créer de lien symbolique entre pip et pip2/pip3
.
La plupart des utilisateurs s'en rendront compte lorsqu'ils ne trouveront pas pip
, puis essaieront d'utiliser pip2/pip3
. Cependant, en utilisant pip2/pip3
créera un problème car virtualenvwrapper
est maintenant installé pour python2/python3
, mais pas pour python
. Ainsi, lorsque virtualenvwrapper
s'exécute et appelle python, il ne trouve pas le virtualenvwrapper/virtualenv
python packages dans les packages de site du système python.
Définition explicite de VIRTUALENVWRAPPER_PYTHON
est la solution la plus propre et non un hack. Voici comment je l'ai fait dans mes fichiers dot
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3
Si vous utilisez brew pour installer python, vous voudrez vous assurer que vous définissez cette variable d'environnement:
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python
dans votre bash_profile (ou tout autre Shell que vous utilisez).
Suivant les conseils de Jon, j'ai couru:
ubuntu@ip-172-31-22-65:~$ mkvirtualenv -p /usr/bin/python3.4 env1
Running virtualenv with interpreter /usr/bin/python3.4
Using base prefix '/usr'
New python executable in env1/bin/python3.4
Also creating executable in env1/bin/python
Installing setuptools, pip...done.
(env1)ubuntu@ip-172-31-22-65:~$ deactivate
ubuntu@ip-172-31-22-65:~$ ls
ubuntu@ip-172-31-22-65:~$ ls -a
. .. .bash_history .bash_logout .bashrc .cache .pip .profile .ssh .virtualenvs
ubuntu@ip-172-31-22-65:~$ workon
env1
ubuntu@ip-172-31-22-65:~$ workon env1
(env1)ubuntu@ip-172-31-22-65:~$ which python
/home/ubuntu/.virtualenvs/env1/bin/python
(env1)ubuntu@ip-172-31-22-65:~$ python -V
Python 3.4.0
J'ai laissé le .bashrc comme indiqué ci-dessus. Comme Jon l'a indiqué ci-dessus, l'installation de virtualenvwrapper s'installe sur le python par défaut et utilise le python par défaut dans tout virtualenv que vous créez, sauf si l'indicateur -p est utilisé pour spécifier un interpréteur python différent.
Merci Jon!