PyImport_Import не удается найти модуль

#python #c

#python #c

Вопрос:

Я пытаюсь вызвать функцию python внутри моего c

Когда я импортирую свой модуль python, он выдает эту ошибку:

ModuleNotFoundError: No module named 'test'

Вот как я импортирую модуль:

 #define PY_SSIZE_T_CLEAN
#include <Python.h>

int main()
{
    Py_Initialize();

    PyObject *pName = PyUnicode_FromString("test");
    PyObject *pModule = PyImport_Import(pName);

    if (pModule == nullptr)
    {
        PyErr_Print();
        std::exit(1);
    }

    Py_Finalize();

    return 0;
}
  

Я чувствую, что это должно быть связано со структурой моего проекта. В настоящее время это выглядит следующим образом:

 project
|-- main.cpp
|-- test.py
  

Я не уверен, стоит ли об этом упоминать, но исполняемый файл находится в том же каталоге, и он также запускается из этого каталога.

Как я могу это исправить?

Комментарии:

1. Можете ли вы проверить, находится ли «.» в пути поиска модулей? Вы можете вывести содержимое sys.path в инструкции PyEval, чтобы выяснить.

2. вы можете выполнить импорт с помощью одной строки PyImport_ImportModule("test")

Ответ №1:

Используйте Py_SetPath перед Py_Initialize() , чтобы установить sys.path .

Вот более длинный список того, что можно сделать перед инициализацией интерпретатора: безопасность перед инициализацией

Изолируйте встроенный интерпретатор Python и правильно задайте путь, чтобы избежать проблем с частичным использованием модулей установленной версии Python.

Ответ №2:

Это было решено путем установки переменной окружения «PYTHONPATH»:

 setenv("PYTHONPATH", ".", 1);
  

Спасибо @Botje

Ответ №3:

Как упоминалось в dwib, я смог устранить ошибку, установив переменную PYTHONPATH в моем файле zshrc (для вас может быть bashrc).

 export PYTHONPATH=$PATH:/home/jk/jk/c
  

где /home/jk / jk / c — это папка, в которой находился мой файл.

Также получил его

 . ~/.zshrc