Отмените параметр --no-site-packages с помощью 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
Это сработает. Существование (или отсутствие) этого файла является единственным прямым следствием флага no-site-packages. Настроенный site.py Virtualenv ищет этот файл, чтобы решить, добавлять ли глобальные каталоги пакетов сайтов в sys.path.
Carl Meyer

Brilliant! Вот и все! Большое спасибо за этот ответ и спасибо Карлу Мейеру за дополнительный комментарий.
Olivier Verdier

1
это на virtualenv/python2.7/no-global-site-packages.txtмоем сервере ubuntu.
caesarsol

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

@georgik - это также работает для Linux-версии venvfor 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.