Przywróć opcję `--no-site-packages` za pomocą virtualenv

126

Stworzyłem virtualenv używając tej --no-site-packagesopcji i zainstalowałem wiele bibliotek. Teraz chciałbym cofnąć tę --no-site-packagesopcję i użyć również pakietów globalnych.

Czy mogę to zrobić bez ponownego tworzenia virtualenv?

Dokładniej:

Zastanawiam się, co dokładnie dzieje się podczas tworzenia virtualenv za pomocą --no-site-packagesopcji, w przeciwieństwie do nieużywania tej opcji.

Jeśli wiem, co się dzieje, mogę dowiedzieć się, jak to cofnąć.

Olivier Verdier
źródło
inne pytanie zostało oznaczone jako duplikat tego i otrzymało odpowiedź, która również może być interesująca.
mariotomo

Odpowiedzi:

162

Spróbuj usunąć (lub zmienić nazwę) pliku no-global-site-packages.txtw Libfolderze w środowisku wirtualnym.

Gdzie venv to nazwa twojego środowiska wirtualnego, a python 3.4 odpowiada dowolnej wersji Pythona, na przykład:

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

A jeśli zmienisz zdanie i zechcesz to odłożyć:

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

Uwaga: jeśli nie widzisz powyższego pliku, masz nowszą wersję virtualenv. Będziemy chcieli, aby śledzić tę odpowiedź zamiast

ars
źródło
18
To wystarczy. Istnienie (lub nieistnienie) tego pliku jest jedynym bezpośrednim skutkiem flagi no-site-packages. Dostosowany przez Virtualenv plik site.py szuka tego pliku, aby zdecydować, czy dodać globalne katalogi pakietów witryn do sys.path.
Carl Meyer
Znakomity! Zrobiło to! Bardzo dziękuję za tę odpowiedź i dziękuję Carlowi Meyerowi za dodatkowy komentarz.
Olivier Verdier
1
to jest virtualenv/python2.7/no-global-site-packages.txtna moim serwerze ubuntu.
caesarsol
4
Wersja virtualenv dla systemu Windows zawiera virtualenv/pyenv.cfgplik. Istnieje jedna opcja dla pakietów witryn: include-system-site-packages = false Zmień tę wartość i wywołaj Activate.ps1
georgik
@georgik - który działa również w wersji linuksowej venvna Python 3.4.
Tomasz Dzieniak
13

Przynajmniej dla Pythona 3.5.2 pyvenv.cfgplik znajduje się w katalogu głównym virtualenv. Wszystko, co musisz zrobić, to zmienić include-system-site-packagesflagę z falsena true:

home = /usr/bin
include-system-site-packages = false  # <- change this to "true"
version = 3.5.2
kotrfa
źródło
12

Korzystając z virtualenvwrapper do zarządzania virtualenvami, można użyć funkcji powłoki, toggleglobalsitepackagesaby przełączać się między używaniem i nieużywaniem pakietów witryny.

Adaephon
źródło
2

Spróbuj dodać łącze symboliczne między /virtualenv_root/lib/a/path/to/desired/site-packages/

Tim McNamara
źródło
+1 To działa w moim systemie (openSUSE Linux 12.3, Python 2.7.3, virtualenv 1.8.4); no-global-site-packages.txtNigdzie nie mam .
Aaron Digulla
2

Przejdź do folderu venv i otwórz pyvenv.cfg. (Np. Jeśli wywoływane jest środowisko wirtualne, myenvplik będzie zlokalizowany w myenv\pyvenv.cfg)

Zobaczysz ustawienie boolowskie o nazwie include-system-site-packages

Ustaw to ustawienie, trueaby używać pakietów globalnych

Jeśli chcesz wyłączyć używanie pakietów globalnych, po prostu ustaw to ustawienie na false.

Zain Rizvi
źródło