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

在MSYS2中嵌入Python遇“No module named encodings”错误求解决

解决MSYS2 MinGW64环境下C++嵌入Python启动时的编码模块缺失问题

问题背景

在Windows 10环境中,通过MSYS2的MinGW64套件(GCC+CMake+Ninja)构建嵌入Python 3.10的C++程序,编译成功但运行时抛出以下错误:

Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
...
Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
ModuleNotFoundError: No module named 'encodings'

且错误设置PYTHONHOME为C:\msys64\mingw64\bin后,系统中原本正常的python命令也失效。

核心原因

  1. PYTHONHOME路径设置错误:应指向Python的根安装目录(C:\msys64\mingw64),而非bin子目录
  2. Windows系统环境与MSYS2 MinGW64环境的路径识别差异,导致Python无法正确定位核心模块

解决步骤

1. 修正系统环境变量

  • 打开Windows系统环境变量设置:
    • 删除错误的PYTHONHOME值,重新设置为:C:\msys64\mingw64
    • 确保C:\msys64\mingw64\bin位于Path环境变量的最前端(避免与其他潜在的Python版本冲突)
  • 重启CLion、命令提示符等所有相关程序,使环境变量生效

2. 优化CMake配置(可选,提升可靠性)

修改CMakeLists.txt,显式指定Python根目录,避免CMake自动检测时出现误判:

cmake_minimum_required(VERSION 3.26)
project(python_test)

set(CMAKE_CXX_STANDARD 17)

# 显式指定Python 3.10的根目录
set(Python_ROOT_DIR "C:/msys64/mingw64")
find_package(Python 3.10 REQUIRED Development)

add_executable(python_test main.cpp)
target_link_libraries(python_test PRIVATE Python::Python)

# 可选:通过编译定义强制指定PYTHONHOME
target_compile_definitions(python_test PRIVATE PYTHONHOME="C:/msys64/mingw64")

3. 代码中手动指定路径(备用方案)

若环境变量仍未生效,可在Py_Initialize()前手动设置Python的环境变量:

#include <Python.h>
#include <cstdlib>

int main() {
    // 设置PYTHONHOME为Python根目录
    setenv("PYTHONHOME", "C:/msys64/mingw64", 1);
    // 添加Python核心模块及第三方库路径
    setenv("PYTHONPATH", "C:/msys64/mingw64/lib/python3.10;C:/msys64/mingw64/lib/python3.10/site-packages", 1);
    
    Py_Initialize();
    PyRun_SimpleString("from time import time,ctime\n"
                       "import numpy as np\n"
                       "print('Today is', ctime(time()))\n");
    if (Py_FinalizeEx() < 0)
        exit(120);
    return 0;
}

4. 确保运行环境一致性

优先在MSYS2 MinGW64控制台中运行编译后的程序,该环境会自动加载MSYS2的原生环境变量,避免Windows系统环境的路径干扰。

验证

运行程序后,若能正常输出当前时间且numpy模块导入成功,同时在命令提示符中执行python --version能正常返回版本信息,则问题已解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:21:05