Python如何找到sys.prefix(resp.sys.base_prefix)的值?
罐头上写着什么 我已经解开了使用虚拟环境时如何设置Python如何找到sys.prefix(resp.sys.base_prefix)的值?,python,unix,Python,Unix,罐头上写着什么 我已经解开了使用虚拟环境时如何设置sys.prefix的谜团(Python查找pyvenv.cfg文件[]) 但是,我不太明白Python是如何找到sys.base\u前缀的 默认值为/usr/local(在Unix上)[]。 然而,实干家似乎并没有在我的Mac电脑上生效 如下面的代码所示,后面是符号链接,在本例中,sys.base\u前缀只是实际Python二进制文件上方的目录: # Following symlinks to determinw where the actua
sys.prefix
的谜团(Python查找pyvenv.cfg
文件[])
但是,我不太明白Python是如何找到sys.base\u前缀的
默认值为/usr/local
(在Unix上)[]。
然而,实干家似乎并没有在我的Mac电脑上生效
如下面的代码所示,后面是符号链接,在本例中,sys.base\u前缀
只是实际Python二进制文件上方的目录:
# Following symlinks to determinw where the actual hard link is
➜ tmp ls -l /usr/local/bin/python3
lrwxr-xr-x 1 jeffhemmen admin 38 23 Jul 12:23 /usr/local/bin/python3 -> ../Cellar/python@3.8/3.8.5/bin/python3
➜ tmp ls -l /usr/local/Cellar/python@3.8/3.8.5/bin/python3
lrwxr-xr-x 1 jeffhemmen staff 55 20 Jul 14:26 /usr/local/Cellar/python@3.8/3.8.5/bin/python3 -> ../Frameworks/Python.framework/Versions/3.8/bin/python3
➜ tmp ls -l /usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/bin/python3
lrwxr-xr-x 1 jeffhemmen staff 9 20 Jul 14:26 /usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/bin/python3 -> python3.8
➜ tmp ls -l /usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/bin/python3.8
-rwxr-xr-x 1 jeffhemmen staff 17704 23 Jul 12:23 /usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/bin/python3.8
# Printing sys.base_prefix for all these links
➜ tmp /usr/local/bin/python3 -c "import sys; print(sys.base_prefix)"
/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8
➜ tmp /usr/local/Cellar/python@3.8/3.8.5/bin/python3 -c "import sys; print(sys.base_prefix)"
/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8
➜ tmp /usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/bin/python3 -c "import sys; print(sys.base_prefix)"
/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8
➜ tmp /usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/bin/python3.8 -c "import sys; print(sys.base_prefix)"
/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8
但是,在下面的示例(同一台计算机,我的Mac电脑)中,sys.base\u前缀
完全不同:
➜ tmp ls -l /usr/bin/python3
-rwxr-xr-x 1 root wheel 31488 10 Aug 21:56 /usr/bin/python3
➜ tmp /usr/bin/python3 -c "import sys; print(sys.base_prefix)"
/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7
我在某个地方读到,这取决于Python的安装方式。这是否意味着sys.base\u前缀
实际上已编译成二进制?如果没有,Python在启动时是否会读取某个文本文件(config、.py、…)
附加问题:何时/如何/为什么sys.exec\u prefix
与sys.prefix
(和/或sys.base\u exec\u prefix
与sys.base\u prefix`)不同?解释了如何设置值以及虚拟环境如何覆盖它
下面是sys模块的参数,它似乎是在解释器状态的初始化时设置的。我没有进一步遵循该路径。我想您忘记了文档的链接。谢谢。固定的。它在那里,但我一定是不小心把它删除了。谢谢!我看了那个文档,但我能找到的只有:sys.base\u prefix:在Python启动期间,在site.py运行之前,设置为与prefix相同的值。
和sys.prefix:。。。默认情况下,这是字符串“/usr/local”。这可以在构建时使用configure脚本的--prefix参数进行设置。
因此,一旦构建完成,我的Pyhon二进制文件如何知道该值?那么它被编译成二进制了吗?更新了我的答案,提供了更多的信息。谢谢你,到目前为止;不知道在SC的哪里开始寻找,将做一些更多的挖掘现在似乎不那么令人畏惧!