如何在c中加载自定义python模块

ewo*_*wok 5 c python embed

到目前为止,我只是试图在python文档中给出这个示例,以便在C中嵌入python模块.我的问题是我无法弄清楚放置python脚本的位置.我的最终目标是__init__.py通过执行可以在C中加载完整的python包(具有各种模块的文件夹)PyImport_Import(...).但是现在,请让我知道在哪里放置显示的脚本(文件名,路径等),以便运行给出的C程序.

编辑

我应该指出我尝试过的东西.我已经尝试将multiply.py文件放在本地目录中,并将其放在文件中调用的子目录multiply__init__.py.在所有这些情况下,我得到了ImportError: No module named multiply

iab*_*der 3

我认为它应该位于同一目录中,或者在sys.path按名称加载模块时,这应该可以工作:

\n\n
./call multiply multiply 5 6\n
Run Code Online (Sandbox Code Playgroud)\n\n

更新:如果我显式地将当前目录添加到sys.path它的工作中:

\n\n
Py_Initialize();\nPyRun_SimpleString("import sys");\nPyRun_SimpleString("sys.path.append(\\".\\")");\n
Run Code Online (Sandbox Code Playgroud)\n\n

这打印:

\n\n
./call multiply multiply 5 6\n(\'Will compute\', 5, \'times\', 6)\nResult of call: 30\n
Run Code Online (Sandbox Code Playgroud)\n\n

更新:我已经问了一个相关的问题,看来如果你只是添加PySys_SetArgv它就可以了:

\n\n
Py_Initialize();\nPySys_SetArgv(argc, argv);\n
Run Code Online (Sandbox Code Playgroud)\n\n

原因在这里提到:

\n\n
\n

否则(即,如果 argc 为 0 或 argv[0]\xe2\x80\x99t 不指向\n 现有文件名),则会在 sys.path 前面添加一个空字符串,这与在前面添加\n 相同当前工作目录(“.”)

\n
\n\n

您也可以在那里查看答案:

\n\n

为什么 PyImport_Import 无法从当前目录加载模块?

\n