- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
~/.local/lib/pyt-6ren">
在用户站点中,.pth 文件在解释器启动时处理一次:
$ echo 'import sys; sys.stdout.write("hello world\n")' > ~/.local/lib/python3.8/site-packages/hello.pth
$ python3.8 -c ""
hello world
这与系统站点中的行为相同,例如/usr/local/lib/python3.8/site-packages/
。
但在 venv 中,它们被处理两次:
$ rm ~/.local/lib/python3.8/site-packages/hello.pth
$ /usr/local/bin/python3.8 -m venv .venv
$ source .venv/bin/activate
(.venv) $ echo 'import sys; sys.stdout.write("hello world\n")' > .venv/lib/python3.8/site-packages/hello.pth
(.venv) $ python -c ""
hello world
hello world
为什么路径配置文件在虚拟环境中要处理两次?
最佳答案
看起来这一切都发生在 site
模块中(并不奇怪)。特别是在site.main()
功能。
.pth
文件的加载发生在 site.addsitepackages()
中。或在 site.addusersitepackages()
,具体取决于文件所在的文件夹。更准确地说,这两个函数都调用 site.addpackage()
,它在哪里actually happens .
在第一个示例中,在虚拟环境之外,文件放置在用户站点包的目录中。因此控制台输出发生在 site.main()
calls site.addusersitepackages()
时.
在第二个示例中,在虚拟环境中,文件放置在虚拟环境自己的站点包目录中。因此控制台输出发生在 site.main()
calls site.addsitepackages()
directly 时也可通过site.venv()
前面几行也调用 site.addsitepackages()
如果是detects that the interpreter is running inside a virtual environment ,即如果它 finds a pyvenv.cfg
file .
简而言之:在虚拟环境中 site.addsitepackages()
运行两次。
至于这种行为的意图是什么,有note :
# Doing this here ensures venv takes precedence over user-site
addsitepackages(known_paths, [sys.prefix])
据我所知,如果虚拟环境已配置为允许 system site packages,这一点很重要。 .
也许可以用不同的方式解决这个问题,这样路径配置文件就不会加载两次。
关于python - 为什么 .pth 文件在 Python 虚拟环境中加载两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58807569/
我是一名优秀的程序员,十分优秀!