Импорт модулей Python из файлов относительно прост с использованием API Python C с помощью pyImport_Import()
, однако мне нужно будет использовать функции, хранящиеся в строках. Есть ли способ импортировать модули python из строк (чтобы уточнить: нет файла, код в строке) или мне нужно сохранить строки как временные файлы?Импорт модуля из строки в API Python C
2
A
ответ
1
Если мое понимание верное, вы можете использовать PyImport_ImportModule
, который принимает const char* name
, чтобы указать модуль для импорта.
Поскольку мое понимание было неправильным:
Это, как правило, лучше, чтобы сбросить содержимое в .py
файл, а затем выполнять их с PyRun_File
, но, если у вас есть строки и хотите работать с теми я думаю вы можете использовать Py_CompileString
для компиляции его в объект кода, а затем подать его на PyEval_EvalCode
для оценки.
1
Не нужно использовать временные файлы. Используйте этот код:
const char *MyModuleName = "blah";
const char *MyModuleCode = "print 'Hello world!'";
PyObject *pyModule = PyModule_New(MyModuleName);
// Set properties on the new module object
PyModule_AddStringConstant(pyModule, "__file__", "");
PyObject *localDict = PyModule_GetDict(pyModule); // Returns a borrowed reference: no need to Py_DECREF() it once we are done
PyObject *builtins = PyEval_GetBuiltins(); // Returns a borrowed reference: no need to Py_DECREF() it once we are done
PyDict_SetItemString(localDict, "__builtins__", builtins);
// Define code in the newly created module
PyObject *pyValue = PyRun_String(MyModuleCode, Py_file_input, localDict, localDict);
if (pyValue == NULL) {
// Handle error
}
else
Py_DECREF(pyValue);
Это код взят из реального коммерческого применения (я слегка измененная ее, удалив обработку ошибок и другие не нужные детали). Просто установите желаемое имя модуля в MyModuleName
и код Python в MyModuleCode
, и все готово!
Нет файла; содержимое модуля сохраняется в строке. – Hullu2000
Хм, вы не можете сбросить содержимое в файл и затем импортировать его? Я уверен, что есть функции для выполнения действительного кода python, можете ли вы добавить несколько примеров? –
Мое приложение содержит область редактирования текста, в которой пользователь может ввести код Python и выполнить его. Для выполнения кода программа помещает в функцию и вызывает ее. – Hullu2000