Python/C API:解释器初始化前获取默认sys.path并修改的方法
在Python 3.11+中初始化解释器前获取默认sys.path并追加自定义路径
问题背景
你提到的原有初始化前修改sys.path的代码在Python 3.11+中失效,原因是PyConfig_Read()不再自动初始化路径相关字段,但你需要在解释器启动前将自定义路径追加到默认搜索列表中,而非初始化后修改。
解决方案
要在初始化前获取默认模块搜索路径,需要调用专门的路径初始化函数来填充PyConfig的路径字段,具体步骤及代码如下:
- 初始化
PyConfig为默认Python配置 - 读取基础配置
- 调用
PyConfig_InitSiteConfig()生成默认路径列表(3.11+版本必需的关键步骤) - 标记使用自定义路径集
- 追加自定义路径
- 用配置初始化解释器
示例代码(省略异常处理):
PyConfig config; PyConfig_InitPythonConfig(&config); PyConfig_Read(&config); // 关键:生成默认的模块搜索路径(3.11+新增步骤) PyConfig_InitSiteConfig(&config); // 标记要使用自定义的搜索路径列表 config.module_search_paths_set = 1; // 追加自定义模块路径 PyWideStringList_Append(&config.module_search_paths, L"/path/to/your/module"); // 初始化Python解释器 Py_InitializeFromConfig(&config); // 清理配置资源 PyConfig_Clear(&config);
补充说明
PyConfig_InitSiteConfig()会根据Python安装目录、系统环境变量等生成标准的默认sys.path对应路径,填充到config.module_search_paths中- 如果需要包含用户级别的路径(如用户目录下的site-packages),可额外调用
PyConfig_InitUserConfig(&config) - 必须设置
module_search_paths_set = 1,否则解释器会忽略你修改的路径列表,仍使用自动生成的默认路径
内容的提问来源于stack exchange,提问作者Hans
相关产品推荐
相关产品推荐

