Импорт модуля Python из пути во встроенном Python

Я использую встроенный Python в C++. Я могу импортировать такой модуль, если my_module.py — это файл:

PyObject* pName PyUnicode_DecodeFSDefault("my_module");
PyObject* pModule = PyImport_Import(pName);

По большей части это работает хорошо, за исключением того, что я не могу контролировать, куда я могу поместить файлы, содержащие модуль; он должен находиться в том же каталоге, что и исполняемый файл. Это проблема для моего варианта использования. Я хотел бы иметь возможность использовать любой путь к файлу и импортировать модуль оттуда. Тем не менее, я могу найти способ сделать это.


person Lara    schedule 20.05.2021    source источник


Ответы (1)


Предполагая, что вы уже вызывали Py_Initialize в какой-то момент, вы сможете сделать:

PyObject* sysPath = PySys_GetObject((char*)"path");
PyList_Append(sysPath, (PyUnicode_FromString(pathToModuleDirectory)));

Где pathToModuleDirectory — это строка, содержащая путь к каталогу, содержащему модуль, который вы хотите импортировать. Теперь вы сможете импортировать модуль так, как было описано в вопросе.

person Lara    schedule 25.05.2021