#python #c
#python #c
Вопрос:
Я динамически связал Python 3.8.7 с консольным приложением Visual Studio C TestPython.exe со следующим кодом, чтобы попробовать библиотеку plistlib (которая необходима в моем реальном приложении):
#include <iostream>
#include "Python.h"
int main()
{
std::string name;
std::cout << "Write name: ";
std::cin >> name;
std::cout << "name: " << name << "n";
Py_Initialize();
PyObject* moduleMainString = PyUnicode_FromString("__main__");
PyObject* moduleMain = PyImport_Import(moduleMainString);
PyRun_SimpleString(
"import plistlibn"
"def testDict(a):n"
" pl = dict(aString = a)n"
);
PyObject* func = PyObject_GetAttrString(moduleMain, "testDict");
PyObject* args = PyTuple_Pack(1, PyUnicode_FromString(name.c_str()));
PyObject* result = PyObject_CallObject(func, args);
Py_Finalize();
system("pause");
}
На моем компьютере разработчика (где у меня установлен Python) исполняемый файл работает хорошо. Когда я запускаю его на другом компьютере без установленного Python, приложение показывает следующую ошибку:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "<frozen zipimport>", line 259, in load_module
File "plistlib.py", line 65, in <module>
File "<frozen zipimport>", line 259, in load_module
File "xmlparserexpat.py", line 4, in <module>
ModuleNotFoundError: No module named 'pyexpat'
Когда я запускаю его на другом компьютере, я позаботился о включении в тот же каталог:
- Приложение TestPython.exe .
- python38.dll и python38.zip которые находятся в https://www.python.org/downloads/windows / Python 3.8.7 встраиваемый пакет Windows (64-разрядный).
Файлы Python в комплекте с TestPython.exe правильно сопоставьте версию Python на компьютере разработчика (обычно это было решением в связанных вопросах pyexpat, но не для этого).
Комментарии:
1. спасибо, что не публикуете только изображение сообщения об ошибке
Ответ №1:
Решение: поместите ВСЕ файлы, найденные в встраиваемом пакете Python 3.8.7 для Windows, в один и тот же каталог (не только .dll и .zip). В частности, отсутствует файл pyexpat.pyd, который отсутствовал.