使用virtualenv恢复`--no-site-packages`选项


126

我使用该--no-site-packages选项创建了virtualenv 并安装了许多库。现在,我想还原该--no-site-packages选项并使用全局包。

我可以不重新创建virtualenv来做到吗?

更确切地说:

我不知道究竟创建使用一个的virtualenv发生时,--no-site-packages相对于没有使用该选项的选择。

如果我知道会发生什么,那么我可以弄清楚如何撤消它。


另一个问题被标记为与该问题重复,并且它也收到了一个在这里可能很有趣的答案。
mariotomo 2014年

Answers:


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标志的唯一直接作用。Virtualenv的自定义site.py查找该文件,以决定是否将全局site-packages目录添加到sys.path。
卡尔·迈耶

辉煌!做到了!非常感谢您的回答,也感谢Carl Meyer的其他评论。
Olivier Verdier,2010年

1
那是virtualenv/python2.7/no-global-site-packages.txt在我的Ubuntu的服务器。
caesarsol 2014年

4
Windows版本的virtualenv包含virtualenv/pyenv.cfg文件。网站包有一个选项: include-system-site-packages = false 更改此值并调用Activate.ps1
georgik,2015年

@georgik -这也适用于Linux的版本venv进行Python 3.4
Tomasz Dzieniak '16

13

至少对于Python 3.5.2,pyvenv.cfg在virtualenv目录的根目录中有一个文件。您需要做的就是将include-system-site-packages标志从更改falsetrue

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

12

使用virtualenvwrapper管理virtualenvs时,可以使用shell函数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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.