jar 头上写的是什么。
我已解开谜底sys.prefix
在使用虚拟环境时设置(Python 查找 pyvenv.cfg
文件 [ 1 ])。
但是,我不明白 Python 是如何找到 sys.base_prefix
的。 .
默认为 /usr/local
(在 Unix 上)[ 2 ]。
但是,这似乎对我的 Mac 无效。
如下面的代码所示,遵循符号链接(symbolic link),在这种情况下是 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
居然编译成二进制?如果没有,是否有 Python 在启动时读取的文本文件(config、.py、...)?奖金问题:何时/如何/为什么是
sys.exec_prefix
实际上不同于sys.prefix
(和/或 sys.base_exec_prefix
来自 sys.base_prefix`)?
最佳答案
documentation解释了如何设置这些值以及虚拟环境如何覆盖它。
这是source code对于 sys 模块,它似乎是在解释器状态初始化时设置的。我没有进一步走这条路。
关于python - Python 如何找到 sys.prefix (resp. sys.base_prefix) 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64247900/