Rétablissez l'option `--no-site-packages` avec virtualenv

126

J'ai créé un virtualenv en utilisant l' --no-site-packagesoption et installé de nombreuses bibliothèques. Maintenant, je voudrais revenir sur l' --no-site-packagesoption et utiliser également les packages globaux.

Puis-je faire cela sans recréer le virtualenv?

Plus précisément:

Je me demande ce qui se passe exactement lors de la création d'un virtualenv en utilisant l' --no-site-packagesoption plutôt que de ne pas utiliser cette option.

Si je sais ce qui se passe, je peux trouver comment l'annuler.

Olivier Verdier
la source
une autre question a été marquée comme duplicata de celle-ci, et elle a reçu une réponse qui pourrait être intéressante ici aussi.
mariotomo

Réponses:

162

Essayez de supprimer (ou de renommer) le fichier no-global-site-packages.txtdans votre Libdossier sous votre environnement virtuel.

venv est le nom de votre environnement virtuel et python3.4 correspond à la version de python impliquée, par exemple:

$ rm venv/lib/python3.4/no-global-site-packages.txt

Et si vous changez d'avis et souhaitez le remettre:

$ touch venv/lib/python3.4/no-global-site-packages.txt

Remarque: Si vous ne voyez pas le fichier ci-dessus, vous disposez d'une version plus récente de virtualenv. Vous voudrez plutôt suivre cette réponse

ars
la source
18
Cela le fera. L'existence (ou l'inexistence) de ce fichier est le seul effet direct de l'indicateur no-site-packages. Le site.py personnalisé de Virtualenv recherche ce fichier pour décider d'ajouter ou non des répertoires globaux de packages de sites à sys.path.
Carl Meyer
Brillant! Cela l'a fait! Merci beaucoup pour cette réponse et merci à Carl Meyer pour le commentaire supplémentaire.
Olivier Verdier
1
c'est virtualenv/python2.7/no-global-site-packages.txtdans mon serveur ubuntu.
caesarsol
4
La version Windows de virtualenv contient un virtualenv/pyenv.cfgfichier. Il existe une option pour les packages de site: include-system-site-packages = false modifiez cette valeur et appelez Activate.ps1
georgik
@georgik - qui fonctionne également pour la version Linux de venvfor Python 3.4.
Tomasz Dzieniak
13

Au moins pour Python 3.5.2, il y a un pyvenv.cfgfichier à la racine du répertoire virtualenv. Tout ce que vous avez à faire est de changer le include-system-site-packagesdrapeau de falseen true:

home = /usr/bin
include-system-site-packages = false  # <- change this to "true"
version = 3.5.2
kotrfa
la source
12

Lorsque vous utilisez virtualenvwrapper pour gérer virtualenvs, vous pouvez utiliser la fonction shell toggleglobalsitepackagespour basculer entre l'utilisation et la non utilisation des packages de site.

Adaephon
la source
2

Essayez d'ajouter un lien symbolique entre /virtualenv_root/lib/et/path/to/desired/site-packages/

Tim McNamara
la source
+1 Cela fonctionne sur mon système (openSUSE Linux 12.3, Python 2.7.3, virtualenv 1.8.4); Je n'ai no-global-site-packages.txtnulle part.
Aaron Digulla
2

Allez dans votre dossier venv et ouvrez pyvenv.cfg. (Par exemple, si votre environnement virtuel est appelé, myenvle fichier sera situé à myenv\pyvenv.cfg)

Vous verrez un paramètre booléen appelé include-system-site-packages

Définissez ce paramètre sur truepour utiliser des packages globaux

Si vous souhaitez désactiver l'utilisation de packages globaux, définissez simplement ce paramètre sur false.

Zain Rizvi
la source