创建虚拟环境后,如果您有一个 shell 脚本调用:
/home/user/venv/python3 <scriptname>
Run Code Online (Sandbox Code Playgroud)
它如何知道 virtualenv 的 site-packages 文件夹在没有源激活到 virtualenv 的情况下(从而更改路径)?
这种魔法发生在sys.prefix.
注意:如果虚拟环境有效,该值将被更改
site.py为指向虚拟环境。Python 安装的值仍然可用,通过base_prefix.
该site模块在翻译的启动进口(从系统路径!),以及站点包迪尔斯被附加到sys.path用sys.prefix。
您可以通过执行带有-S禁用导入站点模块的标志的 python REPL 来验证这一点。您会发现安装在 virtualenv 中的包不再通过 import 语句可见(假设它们尚未安装在系统站点包中)。
您的下一个问题可能是“但是网站本身如何知道我们是否在 venv 中?” 答案是启发式的:
虚拟环境是一个目录树,其中包含 Python 可执行文件和其他表明它是虚拟环境的文件。
如果上面一个目录中存在名为“pyvenv.cfg”的文件sys.executable,
sys.prefix并sys.exec_prefix设置为该目录。在这里实施。
| 归档时间: |
|
| 查看次数: |
438 次 |
| 最近记录: |