我正在尝试使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列为隐藏导入。

我尝试在main.py中显式导入dnspython,但是直接运行main.py时出现未找到模块错误。
    ModuleNotFoundError:没有名为“ dnspython”的模块

我确实运行了python -m pip install --upgrade dnspython,但是收到了“要求已经是最新的:dnspython”

我不确定还有什么尝试!

最佳答案

问题是导入不是dnspython(尽管是错误中给出的名称,并且被pip使用),实际模块只是dns

这样,我能够通过更改规格文件来解决此问题,从而使hiddenimports为:

hiddenimports=['dns']

10-07 13:37