Проблема PyInstaller с Pymongo - PullRequest
       22

Проблема PyInstaller с Pymongo

0 голосов
/ 23 сентября 2018

Я пытаюсь сделать исполняемый файл Windows, который использует Pymongo и Kivy.Я использую PyInstaller для его создания.Я использую Python 3.6.

Когда я запускаю main.py напрямую, он работает как положено, но когда я пытаюсь запустить main.exe, он открывает окно kivy, но вылетает, когда я пытаюсь получить доступ к удаленной MongoDB с помощьюследующая ошибка

pymongo.errors.ConfigurationError: The "dnspython" module must be installed to use mongodb+srv:// URIs
[11992] Failed to execute script main

Мой файл спецификаций:

from kivy.deps import sdl2, glew

block_cipher = None


a = Analysis(['c:\\mypath\\main.py'],
         pathex=['c:\\mypath\\build'],
         binaries=[],
         datas=[],
         hiddenimports=['dnspython'],
         hookspath=[],
         runtime_hooks=[],
         excludes=[],
         win_no_prefer_redirects=False,
         win_private_assemblies=False,
         cipher=block_cipher,
         noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
         cipher=block_cipher)
exe = EXE(pyz,
      a.scripts,
      [],
      exclude_binaries=True,
      name='main',
      debug=False,
      bootloader_ignore_signals=False,
      strip=False,
      upx=True,
      console=True )
coll = COLLECT(exe,
      Tree('c:\\mypath'),
      a.binaries,
      a.zipfiles,
      a.datas,
      *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
      strip=False,
      upx=True,
      name='main')

Сначала я попробовал его без dnspython, указанного как скрытый импорт.

Я попытался явно импортировать dnspython в main.py, но ошибка модуля не найдена при непосредственном запуске main.py.ModuleNotFoundError: Нет модуля с именем 'dnspython'

Я выполнил python -m pip install --upgrade dnspython, но получил 'Требование уже обновлено: dnspython'

Я не уверен, что еще можно попробовать!

1 Ответ

0 голосов
/ 27 сентября 2018

Проблема в том, что импорт не dnspython (несмотря на то, что это имя, данное в ошибке и используется pip), фактический модуль просто dns.

Как таковой, я смогчтобы решить проблему, изменив файл спецификации так, чтобы hiddenimports было:

hiddenimports=['dns']
...