撤消 virtualenv 中的 --no-site-packages 选项

129

我使用--no-site-packages选项创建了一个virtualenv并安装了很多库。现在我想撤销--no-site-packages选项并使用全局包。

是否可以在不重新创建virtualenv的情况下完成呢?

更具体地说:

我想知道使用--no-site-packages选项创建virtualenv与不使用该选项时会发生什么,以便我知道如何撤消它。

如果我知道了发生了什么,那么我就能弄清楚如何恢复状态。


另一个问题被标记为此问题的重复,并且它收到了一个在这里也可能有趣的答案。 - mariotomo
6个回答

163

尝试在虚拟环境下的Lib文件夹中删除(或重命名)文件no-global-site-packages.txt

其中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
1
这是在我的Ubuntu服务器上的virtualenv/python2.7/no-global-site-packages.txt文件。 - caesarsol
5
Windows 版本的 virtualenv 包含 virtualenv/pyenv.cfg 文件。其中有一个选项用于 site-packages: include-system-site-packages = false 更改该值并调用 Activate.ps1。 - georgik
@georgik - 这对于 Python 3.4 版本的 Linux 版本的 venv 也适用。 - Tomasz Dzieniak
2
这个文件似乎不再存在。请参见https://dev59.com/F3A75IYBdhLWcg3wS3FA#58513801获取更新的答案。 - Zain Rizvi
显示剩余3条评论

33

至少对于Python 3.5.2版本来说,在虚拟环境目录的根目录下有一个名为pyvenv.cfg的文件。您只需要将include-system-site-packages标志从false改为true即可:

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

这对我帮助很大,我曾经试图做相反的事情(让虚拟环境使用全局包),但似乎默认情况下创建的虚拟环境设置为false。 - BjornW

22

前往您的 venv 文件夹并打开 pyvenv.cfg 文件。(例如,如果您的虚拟环境名为myenv,则该文件将位于myenv\pyvenv.cfg

您会看到一个名为 include-system-site-packages 的布尔设置。

将该设置设置为 true 以使用全局包。

如果要禁用使用全局包,只需将该设置改为 false


为了更高的可见度,点赞这个答案是应该被接受的,因为大多数用户都在运行最新的虚拟环境。 - Murtaza Haji
这基本上与三年前kotrfa的回答相同。 - John Y

12

使用 virtualenvwrapper 管理虚拟环境时,您可以使用 shell 函数 toggleglobalsitepackages 在使用和不使用 site packages 之间切换。


这仅适用于旧版本(不确定何时更改),当virtualenv仍然使用no-global-site-packages.txt的存在作为标志时。新版使用pyvenv.cfg文件中的设置。看起来virtualenv_wrapper尚未更新以适应虚拟环境的此更改。 https://bitbucket.org/virtualenvwrapper/virtualenvwrapper/issues/345/toggleglobalsitepackages-command-seems. - Mads Skjern

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 文件。 - Aaron Digulla

-1

其中'myvenv'是您虚拟环境的名称,而python3.8则是我的示例。在命令行中,您只需要执行以下操作:

$ python3 -m venv --system-site-packages myvenv

这个问题要求提供一种“无需重新创建虚拟环境”的解决方案。 - rdadolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接