Я пытаюсь сделать исполняемый файл 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"
Я не уверен, что еще попробовать!
Проблема в том, что импорт не является dnspython
(несмотря на то, что это имя, указанное в ошибке и используемое pip), фактический модуль просто dns
.
Таким образом, я смог решить проблему, изменив файл спецификации так, чтобы hiddenimports
:
hiddenimports=['dns']