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

如何在c中加载自定义python模块,第1张

概述到目前为止,我只是试图在 python文档中获得 this example,以便在C语言中嵌入python模块.我的问题是我无法弄清楚放置python脚本的位置.我的最终目标是通过执行PyImport_Import(…)将一个完整的python包(带有__init__.py和各种模块的文件夹)加载到C中.但是现在,请让我知道在哪里放置显示的脚本(文件名,路径等),以便运行给出的C程序. 编辑 我应 到目前为止,我只是试图在 python文档中获得 this example,以便在C语言中嵌入python模块.我的问题是我无法弄清楚放置python脚本的位置.我的最终目标是通过执行Pyimport_import(…)将一个完整的python包(带有__init__.py和各种模块的文件夹)加载到C中.但是现在,请让我知道在哪里放置显示的脚本(文件名,路径等),以便运行给出的C程序.

编辑

我应该指出我尝试过的东西.我尝试将multiply.py文件放在本地目录中,并将其放在__init__.py文件中名为multiply的子目录中.在所有这些情况下,我得到importError:没有名为multiply的模块

解决方法 我认为它应该在同一目录或sys.path中,因为它按名称加载模块,这应该工作:
./call multiply multiply 5 6

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

Py_Initialize();PyRun_SimpleString("import sys");PyRun_SimpleString("sys.path.append(\".\")");

这打印:

./call multiply multiply 5 6('Will compute',5,'times',6)Result of call: 30

更新:我已经问了一个相关的问题,看起来如果你只是添加PySys_SetArgv而不是它有效:

Py_Initialize();PySys_SetArgv(argc,argv);

这里提到的原因是:

Otherwise (that is,if argc is 0 or argv[0] doesn’t point to an
existing file name),an empty string is prepended to sys.path,which
is the same as prepending the current working directory (“.”)

这也是你可以在那里检查答案的问题:

Why does PyImport_Import fail to load a module from the current directory?

总结

以上是内存溢出为你收集整理的如何在c中加载自定义python模块全部内容,希望文章能够帮你解决如何在c中加载自定义python模块所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1244183.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存