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:
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). 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.
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:
$ virtualenv env
$ source env/bin/activate
(env)$ which python
avec le /Users/<username>/env/bin/python
en sortie (comme prévu)(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:
(env)$ pip install HTTPServer
qui réussit(env)$ python -m HTTPServer
qui échoue avec l’erreur /Users/emunsing/env/bin/python: No module named HTTPServer
(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.
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
virtualenv
l'exécutable n'est pas placé dans/usr/local/bin
après quepip
ait fait son travail. Je dois donc leln -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.