Отмените параметр --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
kotrfa
источник
12

При использовании virtualenvwrapper для управления virtualenvs вы можете использовать функцию оболочки toggleglobalsitepackagesдля переключения между использованием и неиспользованием пакетов сайта.

Adaephon
источник
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.

Заин Ризви
источник