Python初始化时的嵌入错误

2 投票
2 回答
2469 浏览
提问于 2025-04-17 06:52

我在运行C代码来调用Python函数时,遇到了一个错误,错误信息是Py_Initialize()出错,提示没有名为site的模块。我尝试过使用Py_SetProgramName(argv[0]),但还是不管用。命令行调用是cInterfacePython Test.py multiply 3 2(可执行文件是cInterfacePython)。

2 个回答

1

我之前也遇到过同样的问题(在Windows上,用的是Visual Studio和MinGW/g++),我通过把site.py的路径加到PYTHONPATH里解决了这个问题。奇怪的是,即使没有这个设置,启动python.exe还是可以的,而且sys.path里也包含了那个路径(即使PYTHONPATH没有),我可以“导入site”,但是Py_Initialize却无法做到和python.exe一样的事情。

3

我需要稍微调整一下PATH环境变量和PYTHONPATH,才能让嵌入的功能更好用。

Py_SetProgramName这个函数不太重要,主要是为了内部参考之类的。

所以,我建议你先找到本地安装的Python位置(在Windows电脑上可以在注册表里找到),然后使用setenv来设置PATH和PYTHONPATH,设置成合适的值。PATH应该指向python.exe所在的文件夹(就像你上面提到的),而PYTHONPATH则应该指向你自己写的Python代码和相关库所在的文件夹,这些是你从嵌入的程序中运行的。

接着运行Py_Initialize,看看是否能正常工作。如果在初始化之后需要修改PYTHONPATH,可以用PySys_SetPath()来修改sys.path。

撰写回答