Поверніть опцію `--no-site-пакети` за допомогою virtualenv


126

Я створив virtualenv за допомогою --no-site-packagesопції та встановив безліч бібліотек. Тепер я хотів би відновити цю --no-site-packagesопцію і використовувати також глобальні пакети.

Чи можу я це зробити, не відтворюючи virtualenv?

Точніше:

Мені цікаво, що саме відбувається при створенні virtualenv з використанням --no-site-packagesопції, на відміну від використання цього параметра.

Якщо я знаю, що станеться, то я можу зрозуміти, як це скасувати.


інше питання було позначене як дублікат цього, і воно отримало відповідь, яка може бути цікавою і тут.
mariotomo

Відповіді:


162

Спробуйте видалити (або перейменувати) файл no-global-site-packages.txtу своїй Libпапці під віртуальним середовищем.

Якщо venv - це ім'я вашого віртуального середовища, а python3.4 відповідає будь-якій версії python, наприклад:

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

І якщо ви передумали і хочете повернути це:

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

Примітка: Якщо ви не бачите вищезазначеного файлу, тоді у вас є новіша версія virtualenv. Ви хочете , щоб слідувати цій відповіді замість


18
Це зробить це. Наявність (або відсутність) цього файлу є єдиним прямим ефектом прапора без пакунків-сайтів. Налаштований site.py Virtualenv шукає цей файл, щоб вирішити, чи додавати глобальні каталоги пакунків для сайтів у sys.path.
Карл Мейєр

Блискуче! Це зробили! Дякую за цю відповідь і дякую Карлу Мейєру за додатковий коментар.
Олів'є Верд'є,

1
це virtualenv/python2.7/no-global-site-packages.txtна моєму сервері ubuntu.
цезарсол

4
Версія Windows virtualenv містить virtualenv/pyenv.cfgфайл. Є один варіант для сайтів-пакетів: include-system-site-packages = false Змініть це значення та зателефонуйте на Activate.ps1
georgik

@georgik - це також працює для Linux версії venvдля Python 3.4.
Tomasz Dzieniak

13

Принаймні для Python 3.5.2 є pyvenv.cfgфайл у корені каталогу virtualenv. Все, що вам потрібно зробити - це змінити include-system-site-packagesпрапор з falseна true:

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

12

Використовуючи virtualenvwrapper для управління virtualenvs, ви можете використовувати функцію оболонки toggleglobalsitepackagesдля перемикання між використанням та не використанням пакетів сайтів.


2

Спробуйте додати символьне посилання між /virtualenv_root/lib/та/path/to/desired/site-packages/


+1 Це працює в моїй системі (openSUSE Linux 12.3, Python 2.7.3, virtualenv 1.8.4); У мене no-global-site-packages.txtніде немає.
Аарон Дігулла

2

Перейдіть у свою папку venv і відкрийте pyvenv.cfg. (Наприклад, якщо ваше віртуальне середовище викликається, myenvфайл буде розташований у myenv\pyvenv.cfg)

Ви побачите булева настройка під назвою include-system-site-packages

Встановіть це налаштування trueдля використання глобальних пакетів

Якщо ви хочете відключити використання глобальних пакетів, просто встановіть це налаштування falseзамість.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.