You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt Creator调用Python.h执行Python文件遇编码初始化致命错误

问题描述

在Qt Creator的C++项目中调用Python 3.11脚本时出现崩溃,错误提示为:

init_fs_encoding: failed to get the Python codec of the filesystem encoding
找不到'encodings'模块

调试发现PYTHONHOME被指向Qt MinGW安装包自带的Python路径,而非手动安装的Python 3.11路径。已在.pro文件中添加以下配置:

INCLUDEPATH += "C:\Users\(name)\AppData\Local\Programs\Python\Python311\include"

LIBS += -L"C:\Users\(name)\AppData\Local\Programs\Python\Python311\libs" -l"python311"

并在mainwindow.cpp中编写调用代码:

FILE* fp;
const char* file = "C:/(absolute path)/(filename).py";
Py_Initialize();
fp = fopen(file, "r");
PyRun_SimpleFile(fp, file);
Py_Finalize();

尝试调整系统环境变量PYTHONPATH和PYTHONHOME后问题仍未解决。

解决方案

以下是几种直接有效的解决方法,按优先级尝试:

1. 在代码中显式设置Python路径

在调用Py_Initialize()之前,手动指定PYTHONHOME和PYTHONPATH,强制覆盖Qt自带的路径:

#include <cstdlib> // 用于setenv函数

// 设置PYTHONHOME为Python 3.11的安装根目录
setenv("PYTHONHOME", "C:\\Users\\(name)\\AppData\\Local\\Programs\\Python\\Python311", 1);
// 设置PYTHONPATH,包含Python的核心库和第三方包目录
setenv("PYTHONPATH", "C:\\Users\\(name)\\AppData\\Local\\Programs\\Python\\Python311\\Lib;C:\\Users\\(name)\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages", 1);

Py_Initialize();
// 后续调用Python脚本的代码...

注意:路径中的反斜杠需转义为\\,最后一个参数1表示覆盖已存在的环境变量。

2. 在Qt Creator项目运行配置中设置环境变量

无需修改代码,直接为当前项目单独配置环境变量:

  • 打开项目的运行设置(左侧面板「Projects」→「Run」)
  • 在「Environment」区域点击「Add」,添加两个变量:
    • 变量名:PYTHONHOME,值:C:\Users\(name)\AppData\Local\Programs\Python\Python311
    • 变量名:PYTHONPATH,值:C:\Users\(name)\AppData\Local\Programs\Python\Python311\Lib;C:\Users\(name)\AppData\Local\Programs\Python\Python311\Lib\site-packages
  • 保存配置后重新运行项目

3. 解决Qt MinGW环境的库冲突

如果前两种方法无效,可能是Qt的MinGW环境自带的Python库被优先加载:

  • 确认项目构建时链接的是Python 3.11的python311.lib(调试版本用python311_d.lib)
  • 复制Python 3.11安装目录下的python311.dll到C++项目的输出目录(比如debug或release文件夹),确保程序运行时加载正确的DLL

4. 修正代码中的潜在错误

原代码未检查fopen的返回值,建议添加错误处理避免崩溃:

FILE* fp = fopen(file, "r");
if (!fp) {
    qDebug() << "无法打开Python文件:" << file;
    Py_Finalize();
    return;
}

内容的提问来源于stack exchange,提问作者Ryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 12:15:17