Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c中加载自定义python模块_Python_C_Embed - Fatal编程技术网

如何在c中加载自定义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的子目录中

到目前为止,我只是想在python文档中给出在C语言中嵌入python模块的方法。我的问题是我不知道把python脚本放在哪里。我的最终目标是通过执行
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
我会检查。