从脚本中使用Python venv

时间:2018-04-04 19:59:00

标签: python virtualenv

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

的shell脚本
/home/user/venv/python3 <scriptname>

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

2 个答案:

答案 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.prefixsys.exec_prefix设置为该目录。已实施here

答案 1 :(得分:3)

Python查看sys.path中站点包的值,并在python3包执行pythonsite时自动设置这些值。其中,在初始化期间导入(除非通过-S标志抑制)

您可以参考site软件包文档,了解有关完成此操作的更多详细信息。