Python中如何获取与C API `Py_GetPythonHome`相同的值?
Py_GetPythonHome对应的Python内部值说明
核心对应关系
Py_GetPythonHome这个C API返回的Python运行时"home"目录,在Python内部最直接的映射是**sys._home**——你看到它是None属于正常情况:只有当通过PYTHONHOME环境变量启动Python,或者调用Py_SetPythonHome API手动设置过home目录后,sys._home才会被赋值;如果没有手动设置,这个变量就会保持None。
和sys.prefix、sys.base_prefix的区别
- 未设置
PYTHONHOME时,Py_GetPythonHome会返回和sys.prefix完全相同的值:- 非虚拟环境下,
sys.prefix和sys.base_prefix一致,都是系统Python的安装目录; - 虚拟环境下,
sys.prefix是虚拟环境的根目录,sys.base_prefix是系统级Python的目录,此时Py_GetPythonHome返回的是sys.prefix。
- 非虚拟环境下,
sys.exec_prefix是平台相关二进制文件的存放目录,和Py_GetPythonHome返回的主home目录无关,无需混淆。
在Python内部获取和Py_GetPythonHome一致的值
可以通过以下代码实现,完全匹配C API的逻辑:
import sys def get_python_home(): return sys._home if sys._home is not None else sys.prefix
内容的提问来源于stack exchange,提问作者Albert
相关产品推荐
相关产品推荐

