#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