Py_初始化失败-无法加载文件系统cod

2024-05-12 20:38:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试组合一个使用Python3.2的简单c++测试项目。项目生成良好,但Py_Initialize引发致命错误:

Fatal Python error: Py_Initialize: unable to load the file system codec
LookupError: no codec search functions registered: can't find encoding

最小代码:

#include <Python.h>

int main (int, char**)
{
  Py_Initialize ();
  Py_Finalize ();
  return 0;
}

操作系统是32位Vista。

使用的Python版本是Python 3.2调试构建,使用VC++ 10从源构建。

来自同一构建的python_d.exe文件运行时没有任何问题。

有人能解释一下这个问题以及如何解决它吗?我自己的google fu让我失望。

编辑1

在浏览了python源代码之后,我发现,正如错误所说,没有注册任何codec搜索函数。codec_registerPyCodec_Register都是应该的。只是代码中没有调用这些函数。

我真的不知道这意味着什么,因为我仍然不知道何时何地应该调用这些函数。引发错误的代码在其他python构建(3.1.3)的源代码中完全丢失。

编辑2

回答了我自己的问题。


Tags: to项目函数代码py编辑源代码错误
3条回答

检查PYTHONPATHPYTHONHOME环境变量,确保它们不指向Python 2.x

http://bugs.python.org/issue11288

前面已经提到了其中的一部分,但是简单地说,这是我的环境中的工作原理,在这里我安装了多个Python,并且我的全局OS环境设置为指向一个不同于遇到问题时我尝试使用的安装。

确保您的(本地或全局)环境完全设置为指向要使用的安装,例如,您有两个(或多个)安装,例如python27和python33(很抱歉,这些是windows路径,但以下对于等效的UNIX样式的路径也应有效,请告诉我这里遗漏了什么(可能是dll路径不同):

C:\python27_x86

C:\python33_x64

现在,如果您打算使用python33安装程序,但您的全局环境指向python27,请确保更新您的环境(而PATHPYTHONHOME可能是可选的(例如,如果您临时在本地shell中工作):

PATH="C:\python33_x64;%PATH%"

PYTHONPATH="C:\python33_x64\DLLs;C:\python33_x64\Lib;C:\python33_x64\Lib\site-packages"

PYTHONHOME=C:\python33_x64

注意,如果开发环境需要,您可能需要/希望将任何其他库路径附加到PYTHONPATH中,但正确设置DLLsLibsite-packages是最重要的。

希望这有帮助。

核心原因很简单:Python找不到它的modules目录,所以它当然也可以不加载encodings

Python doc on embedding说“Py_Initialize()根据其最佳猜测计算模块搜索路径…”特别是,它会查找名为lib/pythonX.Y的目录

然而,如果模块安装在(仅仅)相对于python二进制文件的lib中,那么上述猜测是错误的。

虽然文档中说PYTHONHOMEPYTHONPATH被认为是被考虑的,但我们发现事实并非如此;它们的实际存在或内容完全不相关。

唯一起作用的是调用Py_SetPath(),例如[path-to]\lib作为Py_Initialize()之前的参数。

当然,这只是嵌入场景的一个选项,在嵌入场景中,可以直接访问和控制代码;使用现成的解决方案,可能需要特殊步骤来解决问题。

相关问题 更多 >