创建虚拟环境后,如果您有一个调用:
的shell脚本/home/user/venv/python3 <scriptname>
如何知道virtualenv的site-packages文件夹在没有源激活到virtualenv(从而改变路径)的位置?
答案 0 :(得分:4)
这种魔法发生在sys.prefix
。
注意:如果虚拟环境生效,则此值将在
获得site.py
中更改为指向虚拟环境。 Python安装的价值仍然可以通过base_prefix
。
在解释器启动时导入site
模块(从系统路径!)和site-packages dirs are appended to sys.path
with the sys.prefix
。
您可以通过执行带有-S
标志的python REPL来自行验证,以禁用导入站点模块。您会发现virtualenv中安装的软件包不再被import语句看到(假设它们尚未安装在系统站点软件包中)。
你的下一个问题可能是“但网站本身如何知道我们是否在一个venv?”答案是heuristic:
虚拟环境是一个目录树,其中包含Python可执行文件和其他表明它是虚拟环境的文件。
如果名为“pyvenv.cfg”的文件存在sys.executable
上方的一个目录,
sys.prefix
和sys.exec_prefix
设置为该目录。已实施here。
答案 1 :(得分:3)
Python查看sys.path
中站点包的值,并在python3
包执行python
或site
时自动设置这些值。其中,在初始化期间导入(除非通过-S
标志抑制)
您可以参考site
软件包文档,了解有关完成此操作的更多详细信息。