Python 3.8 не загружает C dll

Мой рабочий код сломался после обновления до Python 3.8.1. Следующая строка раньше работала, но теперь возвращает сообщение об ошибке:

cdll.LoadLibrary('mydllpath/mydll.dll')
==> Could not find module 'mydll.dll'. Try using the full path with constructor syntax.

Кто-то предложил добавить папку dll в путь поиска dll. Поэтому я изменил код на:

    os.chdir('mydllpath')
    print(os.listdir())  # Proof of success
    os.add_dll_directory('mydllpath')
    cdll.LoadLibrary('my.dll')
    # cdll.LoadLibrary('mydllpath/my.dll')  # Also unsuccessful

Что ж, print() во второй строке кода указывает mydll.dll как один из файлов в каталоге, но Python/cdll по-прежнему возвращает точно такое же сообщение об ошибке: "Не удалось найти..."
Ищем идеи /предложения. Спасибо ...


person BabarBaig    schedule 03.03.2020    source источник
comment
Трудно сказать, что не так, но я предполагаю, что некоторые зависимости отсутствуют после обновления. Возможно, вам придется перекомпилировать. Если это не сработает, извлеките и предоставьте минимальный воспроизводимый пример и предоставьте полное (!) сообщение об ошибке, включая след.   -  person Ulrich Eckhardt    schedule 03.03.2020


Ответы (1)


Хорошо, я понял проблему: Python вернул сообщение об ошибке: «Не удалось найти модуль 'mydll.dll'», независимо от того, возникла ли проблема с поиском mydll, или другой dll, от которой зависит mydll. Python 3.8.2 также делает сообщение об ошибке немного более описательным.
В моем случае mydll.dll зависит от широко используемой dll, расположенной на один уровень вверх по дереву каталогов. Как только я добавил эту папку в путь поиска с помощью os.add_dll_directory(), программа снова заработала.

person BabarBaig    schedule 22.03.2020
comment
Были ли у вас проблемы, когда Python выдавал вам ошибку AttributeError: модуль 'os' не имеет атрибута 'add_dll_directory'? Это то, что я получаю, когда делаю os.add_dll_directory(dllpath) - dllpath, конечно же, является основной папкой, в которой находятся все библиотеки DLL моего драйвера. - person Isquare1; 04.11.2020
comment
Извините, это новое для меня. Идея: загляните в модуль os, чтобы убедиться, что сообщение об ошибке правильное. - person BabarBaig; 07.11.2020