Python C api PyImport_importmodule fail when the file has an import statement

夙愿已清 提交于 2019-12-24 12:09:29

问题


I tried to use the Python C api to call a function from python in C++, the test was successful.

But if I intend to import a module already importing other module, the Pymodule_findmodule will return Null even though it's there and created a compiled file. Here is my code

Py_Initialize();
PySys_SetPath("C:/Users/Mik/Documents/GitHub/youtube-dl");      
PyObject * pythonFile = PyImport_ImportModule("test2");

Here is the python filed named test2.py at that directory with a file named test_dl.py and a class called TESTDL inside it

from test_dl import TESTDL 
def someFunction(someInput):
    return 12345

As soon as I added the import line my program doesnot recognize it as module anymore

Edit: turns out the test_dl has the first line as:

 from __future__ import unicode_literals

That's the reason I got this ImportError: No module named future

Thanks!


回答1:


A function call to PySys_SetPath() completely overwrites the Python module path. The result is that your Python script test_dl cannot find Python system modules (in this case __future__) and throws an exception.

What you need to do is to append the directory of your module to the system path instead. To do that, first query the existing value of the system path, and then add your path to it:

PyObject *sys_path = PySys_GetObject("path");
PyList_Append(sys_path, PyString_FromString("C:/Users/Mik/Documents/GitHub/youtube-dl"));


来源:https://stackoverflow.com/questions/35137145/python-c-api-pyimport-importmodule-fail-when-the-file-has-an-import-statement

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!