Как проверить, где C API ищет Python?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как проверить, где C API ищет Python?

Сообщение Anonymous »

Я пытаюсь встроить Python в C++ и попытался скомпилировать и запустить следующее
int main()
{
Py_Initialize();
PyRun_SimpleString("from time import time,ctime\nprint('Today is', ctime(time()))\n");
Py_FinalizeEx();
return(EXIT_SUCCESS);
}

и я получаю сообщение об ошибке
Could not find platform independent libraries
Fatal Python error: Failed to import encodings module
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'

Current thread 0x000057a8 (most recent call first):


Я попробовал решение здесь: правильный ли мой диагноз причины «Не удалось найти независимые от платформы библиотеки » и как я могу это исправить?, но я работаю в Windows и видел некоторые противоречивые ответы о том, следует ли нам устанавливать PYTHONPATH или PYTHONHOME. Я собрал cpython из исходного кода (Python 3.13.9), и он правильно вызывает его из командной строки (а кодировки импорта не выдают никаких ошибок). Я использую Visual Studio 2022 и CMake для обработки пакетов. Ошибок при компиляции нет. Я пробовал использовать официальные примеры на сайте API Python, но все равно выдает ту же ошибку. У меня есть папка Libs и папка amd64 в системном пути. Я не использую виртуальную среду, просто вызываю созданный мной Python.
Я совершенно не знаю, что вообще можно попробовать. Спасибо!
Изменить: это другая реализация, которую я пробовал, которая также выдает ту же ошибку.
#define PY_SSIZE_T_CLEAN
#include
#include

using namespace std;

int main(int argc, char** argv)
{
PyStatus status;

PyConfig config;
PyConfig_InitPythonConfig(&config);
config.isolated = 1;

/* Decode command line arguments.
Implicitly preinitialize Python (in isolated mode). */
status = PyConfig_SetBytesArgv(&config, argc, argv);
if (PyStatus_Exception(status)) {
goto exception;
}

status = Py_InitializeFromConfig(&config);
if (PyStatus_Exception(status)) {
goto exception;
}
PyConfig_Clear(&config);

return Py_RunMain();

exception:
PyConfig_Clear(&config);
if (PyStatus_IsExit(status)) {
return status.exitcode;
}
/* Display the error message and exit the process with
non-zero exit code */
Py_ExitStatusException(status);
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... for-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»