我试图将使用嵌入式python 3.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_register和PyCodec_Register应有的状态。只是在代码中没有任何这些函数被调用。
codec_register
PyCodec_Register
我真的不知道这意味着什么,因为我仍然不知道应该在何时何地调用这些函数。我的其他python版本(3.1.3)的源代码中完全缺少引发错误的代码。
编辑2
在下面回答了我自己的问题。
因此,由于某种原因,python dll无法找到编码模块。python.exe可执行文件显然可以找到它,因为它具有预期的相对路径。修改搜索路径有效。
所有这些的原因?不知道,但至少能奏效。我高度怀疑我的某个地方有错字,这通常是看起来奇怪的错误的原因。