web-dev-qa-db-fra.com

Aucun module nommé 'virtualenvwrapper'

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?

27
user61629

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 virtualenvwrapperdocumentation , 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ète
  • VIRTUALENVWRAPPER_VIRTUALENV vers le chemin complet de virtualenv

Par 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

24
tropicalfish

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
7
Ninad P

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).

4
enderland

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!

2
user61629