2012-02-10 5 views
4

Après avoir utilisé virtualenv avec pip off-on-on pendant quelques jours, j'ai trouvé que la version de PIP qui est utilisée après l'activation de virtualenv est le PIP global au lieu du PIP relatif à cet environnement; Si vous ne définissez pas la variable d'environnement du shell export PIP_RESPECT_VIRTUALENV=true, pip installera le nouveau package (par exemple, pip install argparse) dans la portée globale au lieu de virtualenv uniquement.PIP système à la place de virtualenv PIP par défaut?

Je m'attendrais à ce que PIP s'installe dans virtualenv par défaut, si ce programme virtualenv est activé.

Y at-il un raisonnement derrière cela pas fonctionnant de cette façon par défaut?

Voir l'explication here pour savoir comment fonctionne PIP_RESPECT_VIRTUALENV.

+0

FWIW: Les virtualenvs que j'utilise ont leur propre copie de PiP installe dans ce virtualenv. – delnan

+0

@delnan Comment ont-ils leur propre copie de pip? – bitcycle

+1

Les versions récentes (à partir de la version 1.4) de virtualenv doivent automatiquement installer une copie par exemple de pip. Quelle version de virtualenv utilisez-vous? – philofinfinitejest

Répondre

3

Ce n'est pas la première fois que je vois quelqu'un signaler le même problème. Je ne sais pas ce qui se passe, mais certaines personnes déconseillent l'utilisation de source /path/to/venv/bin/activate car il peut gâcher votre $PATH.

Il ya un moyen que pip respecte toujours votre virtualenv: ne comptez pas sur $PATH. Utilisation:

/path/to/venv/bin/pip install MYPACKAGE 

Il serait bon de savoir ce qui vous arrive et de partager votre solution avec d'autres. Pendant ce temps, il peut être correct d'utiliser le chemin absolu de pip.

3

Lorsque vous créez un virtualenv, le fichier activate la variable hardcodes VIRTUAL_ENV à l'emplacement dans lequel vous avez créé le répertoire racine. Cette variable est ensuite exportée lorsque vous source <your-venv>/bin/activate. Par conséquent, si vous déplacez le répertoire virtualenv après sa création, le chemin du fichier codé en dur sera incorrect.

Il suffit d'ouvrir <your-venv>/bin/activate dans un éditeur de texte et assurez-vous VIRTUAL_ENV est réglé sur le nouveau chemin de votre répertoire virtualenv:

VIRTUAL_ENV="/Full/path/to/<your-venv>" 
export VIRTUAL_ENV 

avant d'exécuter source <your-venv>/bin/activate à nouveau.

Ensuite, vous pouvez bien sûr tester la version de pip avec which pip qui devrait produire:

/Full/path/to/<your-venv>/bin/pip 

plutôt que /usr/bin/pip ou /bin/pip etc.

Questions connexes