Ошибка нет модуля с именем ‘pyexpat’ при встраивании Python в C

#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, который отсутствовал.