151 votes

virtualenv --no-site-packages et pip trouvent-ils encore des packages globaux?

J'étais sous l'impression que virtualenv --no-site-packages serait de créer un complètement séparé et isolé environnement Python, mais il ne semble pas.

Par exemple, j'ai python-django installé à l'échelle mondiale, mais souhaitez créer un virtualenv avec une autre version de Django.

$ virtualenv --no-site-packages foo       
New python executable in foo/bin/python
Installing setuptools............done.
$ pip -E foo install Django
Requirement already satisfied: Django in /usr/share/pyshared
Installing collected packages: Django
Successfully installed Django

À partir de ce que je peux dire, l' pip -E foo install ci-dessus est censé re-installer une nouvelle version de Django. Aussi, si je dis pip au gel de l'environnement, je reçois tout un tas de paquets. Je m'attends à ce que, pour une ambiance fraîche avec l'option --no-site-packages ce serait vide?

$ pip -E foo freeze
4Suite-XML==1.0.2
BeautifulSoup==3.1.0.1
Brlapi==0.5.3
BzrTools==1.17.0
Django==1.1
... and so on ...

Suis-je l'incompréhension comment --no-site-packages est censé fonctionner?

119voto

wobbily_col Points 648

J'avais un problème comme celui-ci, jusqu'à ce que je réalise (bien avant d'avoir découvert virtualenv) que j'étais allé ajouter des répertoires à PYTHONPATH dans mon fichier .bashrc. Comme cela faisait déjà un an, je n'y ai pas pensé tout de suite.

24voto

ianw Points 401

Finalement, j'ai trouvé que, pour une raison quelconque, pip -E ne fonctionnait pas. Cependant, si j'active réellement virtualenv et utilise easy_install fourni par virtualenv pour installer pip, puis utiliser pip directement depuis l'intérieur, il semble fonctionner comme prévu et n'afficher que les packages dans virtualenv.

19voto

finspin Points 971

Je sais que la question est très ancienne, mais pour ceux qui arrivent ici cherchent une solution:

N'oubliez pas d' activer virtualenv ( source bin/activate ) avant d'exécuter pip freeze . Sinon, vous obtiendrez une liste de tous les packages globaux.

16voto

Martin v. Löwis Points 61768

--no-site-packages devrait, comme son nom l'indique, supprimer le répertoire standard site-packages de sys.path. Tout ce qui reste dans le chemin Python standard y restera.

5voto

odie5533 Points 441

Un problème similaire peut se produire sous Windows si vous appelez des scripts directement en tant que script.py qui utilise ensuite l’ouvre-fenêtre par défaut de Windows et ouvre Python en dehors de l’environnement virtuel. L'appeler avec python script.py utilisera Python avec l'environnement virtuel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X