罐头上写着什么。
我已经解决了在使用虚拟环境时如何设置sys.prefix的谜团(Python寻找一个pyvenv.cfg文件[1])。
但是,我不明白Python是如何找到sys.base_prefix的。
默认情况是/usr/local (在Unix上) [2]。
然而,在我的Mac电脑上,这些实干家似乎并不有效。
如下面的代码所示,遵循符号链接,在本例中,sys.base_prefix只是实际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_prefix完全不同:
➜ 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_prefix实际上被编译成二进制文件?如果没有,是否有文本文件(config,.py,.)Python在启动时读取的地方?
的额外问题:何时/如何/为什么sys.exec_prefix实际上与sys.prefix不同(和/或sys.base_exec_prefix与sys.base_prefix`)不同?
https://stackoverflow.com/questions/64247900
复制相似问题