如何在c中加载自定义python模块
到目前为止,我只是想在python文档中给出在C语言中嵌入python模块的方法。我的问题是我不知道把python脚本放在哪里。我的最终目标是通过执行如何在c中加载自定义python模块,python,c,embed,Python,C,Embed,到目前为止,我只是想在python文档中给出在C语言中嵌入python模块的方法。我的问题是我不知道把python脚本放在哪里。我的最终目标是通过执行PyImport\u Import(…)在C中加载一个完整的python包(包含\uu init\uuuuuupy.py和各种模块的文件夹)。但是现在,请让我知道在哪里放置显示的脚本(文件名、路径等),这样给定的C程序就可以运行了 编辑 我应该指出我所做的努力。我尝试将multiply.py文件放入本地目录,并将其放入名为multiply的子目录中
PyImport\u Import(…)
在C中加载一个完整的python包(包含\uu init\uuuuuupy.py和各种模块的文件夹)。但是现在,请让我知道在哪里放置显示的脚本(文件名、路径等),这样给定的C程序就可以运行了
编辑
我应该指出我所做的努力。我尝试将multiply.py
文件放入本地目录,并将其放入名为multiply
的子目录中的\uuuu init\uuuuuu.py
文件中。在所有这些情况下,我都会得到导入错误:没有名为multiply的模块我认为它应该在同一个目录中,或者在sys.path中。当它按名称加载模块时,这应该起作用:
./call multiply multiply 5 6
更新:如果我将当前目录显式添加到sys.path
中,它会工作:
Py_Initialize();
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append(\".\")");
Py_Initialize();
PySys_SetArgv(argc, argv);
这张照片是:
./call multiply multiply 5 6
('Will compute', 5, 'times', 6)
Result of call: 30
更新:我问了一个相关的问题,如果您只添加PySys\u SetArgv
,它似乎可以工作:
Py_Initialize();
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append(\".\")");
Py_Initialize();
PySys_SetArgv(argc, argv);
原因如下:
否则(即,如果argc为0或argv[0]未指向
现有文件名),sys.path前面有一个空字符串,
与在当前工作目录(“.”)前加前缀相同
这是一个问题,你也可以在那里查看答案:
PyImport\u Import(…)
需要一个模块名。@ewok如何运行该程序?@mux正如文档中所述:调用乘法3 2
@mux明白了!这条路就是那条路problem@ewok是的,但是python应该查看模块的当前目录,我认为问题出在PyImport\u Import
我会检查。