Skip to main content
 首页 » 编程设计

python之从脚本中使用 Python venv

2025年05月04日14小虾米

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

/home/user/venv/python3 <scriptname> 

它如何知道 virtualenv 的 site-packages 文件夹在哪里,而没有源激活到 virtualenv(从而改变路径)?

请您参考如下方法:

这种魔法发生在 sys.prefix 上.

Note: If a virtual environment is in effect, this value will be changed in site.py to point to the virtual environment. The value for the Python installation will still be available, via base_prefix.

site 模块在解释器启动时被导入(从系统路径!),site-packages dirs are appended to sys.path with the sys.prefix .

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

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

A virtual environment is a directory tree which contains Python executable files and other files which indicate that it is a virtual environment.

如果名为“pyvenv.cfg”的文件存在于 sys.executable 之上的一个目录中, sys.prefix 和 sys.exec_prefix 设置为该目录。已实现 here .