首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python如何找到sys.prefix的值(resp )。sys.base_prefix)?

Python如何找到sys.prefix的值(resp )。sys.base_prefix)?
EN

Stack Overflow用户
提问于 2020-10-07 16:00:22
回答 1查看 1.1K关注 0票数 5

罐头上写着什么。

我已经解决了在使用虚拟环境时如何设置sys.prefix的谜团(Python寻找一个pyvenv.cfg文件[1])。

但是,我不明白Python是如何找到sys.base_prefix的。

默认情况是/usr/local (在Unix上) [2]。

然而,在我的Mac电脑上,这些实干家似乎并不有效。

如下面的代码所示,遵循符号链接,在本例中,sys.base_prefix只是实际Python二进制文件之上的目录:

代码语言:javascript
复制
# 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完全不同:

代码语言:javascript
复制
➜  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`)不同?

EN

回答 1

Stack Overflow用户

发布于 2020-10-07 16:06:15

文档解释了如何设置值以及虚拟环境如何覆盖它。

下面是sys模块的源代码,它似乎是在从解释器状态初始化时设置的。我没有走那条路。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64247900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档