使用脚本中的 Python venv

Bac*_*ics 1 python virtualenv

创建虚拟环境后,如果您有一个 shell 脚本调用:

/home/user/venv/python3 <scriptname>
Run Code Online (Sandbox Code Playgroud)

它如何知道 virtualenv 的 site-packages 文件夹在没有源激活到 virtualenv 的情况下(从而更改路径)?

wim*_*wim 5

这种魔法发生在sys.prefix.

注意:如果虚拟环境有效,该值将被更改site.py为指向虚拟环境。Python 安装的值仍然可用,通过base_prefix.

site模块在翻译的启动进口(从系统路径!),以及站点包迪尔斯被附加到sys.pathsys.prefix

您可以通过执行带有-S禁用导入站点模块的标志的 python REPL 来验证这一点。您会发现安装在 virtualenv 中的包不再通过 import 语句可见(假设它们尚未安装在系统站点包中)。

您的下一个问题可能是“但是网站本身如何知道我们是否在 venv 中?” 答案是启发式的

虚拟环境是一个目录树,其中包含 Python 可执行文件和其他表明它是虚拟环境的文件。

如果上面一个目录中存在名为“pyvenv.cfg”的文件sys.executablesys.prefixsys.exec_prefix设置为该目录。在这里实施。