罐头上写的是什么。
我已经解开了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
Run Code Online (Sandbox Code Playgroud)
但是,在下面的示例中(同一台计算机,我的 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
Run Code Online (Sandbox Code Playgroud)
我在某处读到这取决于 Python 的安装方式。这是否意味着sys.base_prefix实际上已编译为二进制文件?如果没有,是否有 Python 在启动时读取的文本文件(config、.py、...)?
额外问题:何时/如何/为什么sys.exec_prefix实际上与sys.prefix(和/或sys.base_exec_prefix与 sys.base_prefix`)不同?
| 归档时间: |
|
| 查看次数: |
280 次 |
| 最近记录: |