gpt4 book ai didi

python c api无法将任何模块导入新创建的模块

转载 作者:太空宇宙 更新时间:2023-11-04 04:49:38 25 4
gpt4 key购买 nike

代码如下:

python_script[] = "try:\n\timport sys\nexcept:\n\tprint\"cannot import sys\"";
pNewMod = PyModule_New("mymod");
Py_Initialize();
pGlobal = PyDict_New();
pLocal = PyModule_GetDict(pNewMod);
PyRun_String(python_script, Py_file_input, pGlobal, pLocal);

我一直在 import sys 遇到异常,并打印消息 cannot import sys

还有:

PyRun_SimpleString("import sys");
PyRun_SimpleString("print sys.path");

工作正常。我无法将任何模块导入到新创建的模块中。

为什么我无法导入任何模块?我在这里错过了什么?

最佳答案

以不同的方式解决了这个问题:问题是模块的 __dict__ 属性是只读的。

我正在为 2.7.5 使用 python/c api。在使用 PyModule_New 之后,没有提供将任何代码执行到 __dict__ 中以在 api 中导入。所以我使用了不同的方法。

我使用 python 代码而不是 python/c api 创建了一个模块。其中规定将一些代码执行到模块字典中 exec 'import sys' in mymod.__dict__

sys 导入提供新创建的模块以访问包含所有可用模块的 sys.modules。因此,当我进行另一次导入时,程序知道在哪里查找导入路径。这是代码。

PyRun_SimpleString("import types,sys");

//create the new module in python
PyRun_SimpleString("mymod = types.ModuleType(\"mymod\")");

//add it to the sys modules so that it can be imported by other modules
PyRun_SimpleString("sys.modules[\"mymod\"] = mymod");

//import sys so that path will be available in mymod so that other/newly created modules can be imported
PyRun_SimpleString("exec 'import sys' in mymod.__dict__");

//import it to the current python interpreter
pNewMod=PyImport_Import(PyString_FromString("mymod"));

//get the dict of the new module
pLocal = PyModule_GetDict(pNewMod);

//run the code that you want to be available in the newly created module.
//python_script has the code that must be injected into the new module.
//all your imports will work fine from now on.
//Provided that you have created them before importing sys in to the new module
PyRun_String(python_script, Py_file_input, pGlobal, pLocal);

关于python c api无法将任何模块导入新创建的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17001153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com