web-dev-qa-db-fra.com

virtualenv n'inclut pas pip

J'essaie de créer un environnement virtuel à l'aide de virtualenv sur Mac OS X El Capitan. J'ai installé Python 2.7.11 avec brew, qui inclut pip, wheel et setuptools par défaut. 

Cependant, lorsque j'essaie d'installer virtualenv en suivant les instructions de la documentation ou de toute autre ressource, il y a plusieurs problèmes:

  1. L’exécutable virtualenv n’est pas placé dans /usr/local/bin après que pip ait fait son travail; je dois donc le ln -s manuellement (cela peut indiquer qu’il ya un problème d’installation lors de cette étape). 
  2. Après avoir exécuté virtualenv venv, il crée un nouvel environnement, récupère Python 2.7.11 de brew- installation, mais: il n'y a pas de pip dans le dossier bin. Cela signifie que si j'essaie which pip et que venv est activé, la position globale correspondante est pip - /usr/local/bin/pip et non /path/to/venv/bin/pip.

En conséquence, l’installation de packages dans venv utilise global pip et les installe dans un sites-packages global, et non dans venv

Pourriez-vous s'il vous plaît suggérer ce qui peut ne pas être correct et comment y remédier?

EDIT: La chose à mentionner est que j’ai eu d’autres versions de Python installées sur mon ordinateur, que j’ai récemment supprimées comme il est décrit dans cette réponse . Peut-être que cela cause le problème et qu'un nettoyage plus approfondi est nécessaire.

15
mikeonly

Essayez de supprimer ou de renommer le fichier .pydistutils.cfg dans votre répertoire personnel, par exemple. en renommant avec mv ~/.pydistutils.cfg ~/oldpydistutils.cfg

Je mets ici une réponse détaillée pour aider les autres, mais le crédit initial revient à cette réponse . Si vous savez ce qui cause le problème dans .pydistutils.cfg, faites le moi savoir!

J'avais le même problème: mes environnements virtuels ont été créés sans copie locale de pip, bien qu'ils aient une copie locale de python. Cela signifiait que l'utilisation de $ pip à partir de l'environnement virtuel installé à l'emplacement du package global et n'était pas visible pour le python de l'environnement. 

Comment j'ai diagnostiqué cela sur ma machine:

  1. Je crée un environnement virtuel avec $ virtualenv env
  2. Activé l'environnement virtuel avec $ source env/bin/activate
  3. Emplacement python vérifié: exécutez (env)$ which python avec le /Users/<username>/env/bin/python en sortie (comme prévu)
  4. Emplacement du pip vérifié: exécuter (env)$ which pip avec la sortie /usr/local/bin/pip (NON prévu)

Pour vérifier l’orientation de nos packages, nous pouvons essayer d’installer un package dans l’environnement virtuel:

  1. Essayez d'installer un paquet: (env)$ pip install HTTPServer qui réussit
  2. Essayez d’exécuter le package: (env)$ python -m HTTPServer qui échoue avec l’erreur /Users/emunsing/env/bin/python: No module named HTTPServer
  3. Pour vérifier, essayez d'installer à nouveau: (env)$ pip install HTTPServer qui produit Requirement already satisfied (use --upgrade to upgrade): HTTPServer in /usr/local/lib/python2.7/site-packages

En revérifiant, nous constatons qu'il n'y a pas de Pip dans le dossier/bin de l'environnement: 

$ ls env/bin activate activate.fish python python2 activate.csh activate_this.py python-config python2.7

Ainsi, pendant que le système trouve la version python locale, il ne trouve pas de pip local à utiliser et parcourt le chemin $ PATH. Il a fini par utiliser pip de/usr/local/bin, ce qui ne me permet pas d'installer des packages localement dans l'environnement virtuel. 

Voici ce que j'ai essayé: - Réinstallation de python brew uninstall python suivi de brew upgrade et brew install python --build-from-source- Installation de pip à l'aide de la commande get-pip.py comme décrit dans la documentation de Pip

Voici ce que j’ai exclu: - Je n’utilisais pas Sudo pip ...qui posait des problèmes similaires dans cette autre question et ne l’ai jamais fait à cette installation Python/pip - Mon environnement virtuel n’a ne montre pas une installation locale de pip, comme ce fut le cas dans les questions similaires: Celle-ci pour Windows , Celle-ci pour Mac OS X .

En fin de compte, j'ai constaté que l'élimination du fichier ~/.pydistutils.cfg résolvait le problème, permettant ainsi de créer de nouveaux environnements virtuels dotés de leur propre canal local. Le contenu de mon fichier ~/.pydistutils.cfg était le suivant:

[global]
verbose=1

[install]
install-scripts=$HOME/bin

[easy_install]
install-scripts=$HOME/bin

Renommer simplement le fichier ~/.pydistutils.cfg semble résoudre le problème: il semble que bien que ce fichier ait été créé par l’installation homebrew, certains paramètres de ce fichier peuvent être incompatibles avec virtualenv . Bien que la suppression de ce fichier n'ait eu aucun effet négatif sur mon système, vous devrez peut-être utiliser l'indicateur --user lors de l'installation de packages avec pip pour l'environnement global (par exemple, $ pip install --user HTTPServer). Voici plus détails sur .pydistutils.cfg si vous voulez travailler à l’adapter à vos besoins. 

11
emunsing

J'ai eu le problème lors de l'exécution de virtualenv: "ImportError: aucun module nommé pip." J'ai eu 16.2.0 . Pip désinstaller virtualenv Pip installer virtualenv == 15.1.0

1
Nazar
  1. virtualenv l'exécutable n'est pas placé dans /usr/local/bin après que pip ait fait son travail. Je dois donc le ln -s à la main (cela peut indiquer qu'il y a un problème d'installation lors de cette étape).

Ne fais pas ça. Cela ne fera que cacher le bogue et ne pas résoudre le problème. Voici un petit guide sur la façon de déboguer ce type de problèmes:

  • Commencez par which -a python. Le premier chemin que vous voyez devrait être /usr/local/bin/python, sinon vérifiez votre variable PATH.

  • Ensuite, vérifiez which -a pip. Encore une fois, le premier chemin devrait être /usr/local/bin/pip. Sinon, lancez python -m ensurepip et revérifiez. 

  • Maintenant, installez virtualenv en utilisant pip install virtualenv, après cela, vérifiez la sortie de which -a virtualenv. Le premier chemin doit être /usr/local/bin/virtualenv, sinon, vérifiez la sortie de env |grep PYTHON pour connaître les variables d’environnement inattendues.

  • Enfin, vérifiez la sortie de virtualenv --version pour vous assurer que vous avez la dernière version.

0
cel