使用虚拟Python环境 C++调用Python脚本出现 Py_Initialize : unable to load the file system codec 错误

本文讲述了在虚拟环境中遇到Py_Initialize错误的解决方案,原因在于虚拟环境记录了Python编译器的绝对路径,导致在不同主机上运行时找不到。解决办法是调整VS配置或使用完整Python环境目录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

Fatal Python error : Py_Initialize : unable to load the file system codec
ModuleNotFoundError: No module named ‘encodings’

如果你出现上述错误,且具备以下条件,请往下看:

  1. 使用的是虚拟Python环境,且VS里配置的lib、include 两个文件夹是从虚拟环境中复制过来的,DLLs、libs两个文件夹和 Python.XXdll文件是从虚拟环境依赖的Python目录复制过来的
  2. 在本机编译运行一切正常,在其他主机上报错

提示:如果exe在其他电脑上出现缺少 xxx.dll 的错误,可将 运行库 改为 MDd模式 来解决问题

原因

那么遇到上述问题,原因大概率是:
每个虚拟的Python环境都是根据一个现有的完整Python编译器生成的,虚拟环境的目录下只是包含一些基本的配置文件和虚拟环境独有的开发包,环境中所使用的编译器还是完整目录下的Python编译器,
问题的关键在于,虚拟环境会记录 Python编译器的绝对路径;因此在其他主机上运行Python虚拟环境时,虚拟环境仍然会去这个绝对路径下寻找Python编译器,结果自然是找不到。

其实,对于Python虚拟环境来说,随意改变所依赖编译器的路径,或者虚拟环境本身的路径,都会造成虚拟环境失效,原因和上述问题出现的原因相同

解决方案

  1. 不使用虚拟环境,VS中用到的所有文件夹都来自于完整的Python环境目录下
  2. 如果使用方法1,会打包大量无用的Python包,从而造成C++打包所依赖的文件过大,这时候先执行方式1,让VS中所有的文件夹来源于完整的Python环境目录,然后将 lib文件夹下的 site-packages 文件夹替换成 虚拟环境中 lib 文件夹下的 site-packages 文件,这样就能避免打包无用Python开发包了

c++如何调用python脚本请参考这篇文章->C++通过内嵌解释器调用Python及间接调用Python三方库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

energy_百分百

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值