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的哪里开始寻找,将做一些更多的挖掘现在似乎不那么令人畏惧!