以不同的方式解决了这个问题:问题是__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);