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ąć.


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


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

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.


2

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


+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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.