PyInstaller ImportError DLL не найден при тестировании EXE на другом компьютере - PullRequest
0 голосов
/ 31 августа 2018

Я создал файл EXE из скрипта Python, используя PyInstaller, используя

pyinstaller --onefile myscript.py

Пакеты, которые я использовал:

pandas, numpy, imutils, opencv, logging, os, random, json, string, csv, datetime, uuid

EXE отлично работает на моем ПК. Однако, когда я пробую это на другом ПК, я получаю ошибку, показанную на этом скриншоте: https://www.screencast.com/t/msZrURL4v

Есть идеи, в чем проблема?

1 Ответ

0 голосов
/ 06 октября 2018

Ошибка, которую вы публикуете, просто говорит: «Я искал одну конкретную DLL и не нашел ее».

Вместо того, чтобы устанавливать другие пакеты и расширения, которые могут или не могут содержать или как-то содержать нужную DLL, теперь вам необходимо точно определить, что именно не должно быть найдено.

Я могу предложить три взаимодополняющих метода, ни один из которых не является абсолютно точным для точного определения точной проблемы (конечно, метод voodoo «установить какой-либо пакет случайным образом и посмотреть, исправляет ли он его») также может работать, и часто работает - но это волшебство , а не информатика):

  • самое быстрое: проверьте файл pyimod03_importers.py в строке 714, посмотрите, что он делал, когда создавалось исключение. Из-за стратегии загрузки библиотек Windows вам может быть передана красная сельдь с файлом, который, как сообщается, не будет там, где он есть на самом деле, поскольку он опирается на второй отсутствующий файл, имя которого вам не сообщат.
  • самое простое: использовать такой инструмент, как SysInternals 'DEPENDS.EXE, чтобы проверить файл OMR.EXE. Это почти гарантированно не сработает в этом случае, потому что необходимый импорт может быть указан в формате Python, а не в любой форме, которую распознает DEPENDS.EXE.
  • самый полный, но наименее простой: используйте инструмент, подобный PROCMON от SysInternals, настройте фильтры для исключения фонового шума в состоянии ожидания Windows - их будет очень много - и затем фальшивый запуск OMR.EXE ; исключить дополнительный шум, создаваемый этим. Вам понадобится около сорока фильтров. Наконец запустите OMR.EXE. Ближе к концу вы увидите серию попыток загрузки SOMETHING.DLL, все не удалось; Во-первых, это место, где должна находиться DLL (либо Python, либо OMR), а остальные - подходящие альтернативы.

Тогда:

  • если DLL - одна из ваших, узнайте, как упаковать их в комплект EXE.
  • Если это не так, вам необходимо надежно оценить, где его можно найти.
    • Вполне возможно, что предложение, которое вам было дано - установить распространяемый MSVC для этой версии или другой - было абсолютно верным. Библиотеки с такими именами, как MSVCnn ... принадлежат этому пакету. MSO ... файлы обычно принадлежат распространяемым файлам Microsoft Office. Файлы MSJET ... находятся в нескольких пакетах Microsoft, например, распространяемых .NET.
    • в противном случае Google и, возможно, MSDN Search Engine - ваши друзья.

Из прошлого опыта я предлагаю настроить виртуальную машину для тестирования, а затем посмотреть, какие пакеты нужны. Это связано с тем, что при первом сбое DLL будут скрыты все последующие, и вам может потребоваться повторить вышеописанные действия несколько раз. Тот факт, что первая необходимая библиотека поставляется пакетом NETFX64, а вторая - средой выполнения Microsoft Office, может быть верным, но когда вы обнаружите, что вторая библиотека необходима, вы также можете обнаружить, что среда выполнения MSO первый также; поэтому в этот момент, а не раньше, вы обнаружите, что пакет NETFX64 на самом деле не нужен, и может упростить ваши требования к установке только для среды выполнения MSO.

Сброс требований к короткому списку может быть длительной задачей, и вы захотите перезагрузить компьютер с нуля более одного раза. С виртуальной машиной это легко сделать.

(Я продолжал ссылаться на среду выполнения MSO, потому что я полагаю, что ваша программа обработает модуль ответов чекбокса и, возможно, ей понадобятся или будут полагать, что ей нужны некоторые функции распознавания сканера, которые предоставляет среда выполнения MSO. Если это так, они, вероятно, придут последними). ​​

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...