Pymongo 的 PyInstaller 问题
PyInstaller issue with Pymongo
我正在尝试制作一个使用 Pymongo 和 Kivy 的 windows 可执行文件。我正在使用 PyInstaller 来创建它。我正在使用 Python 3.6.
当我 运行 main.py 直接按预期工作但是当我尝试 运行 main.exe 它会打开 kivy window 但是崩溃时我尝试访问远程 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
,但直接 运行ning main.py 时出现模块未找到错误。
ModuleNotFoundError:没有名为 'dnspython'
的模块
我做了 运行 python -m pip install --upgrade dnspython
但收到了 'Requirement already up-to-date: dnspython '
我不确定还能尝试什么!
问题是导入不是 dnspython
(尽管它是错误中给出的名称并被 pip 使用),实际模块只是 dns
.
因此,我能够通过更改规范文件来解决问题,使 hiddenimports
为:
hiddenimports=['dns']
我正在尝试制作一个使用 Pymongo 和 Kivy 的 windows 可执行文件。我正在使用 PyInstaller 来创建它。我正在使用 Python 3.6.
当我 运行 main.py 直接按预期工作但是当我尝试 运行 main.exe 它会打开 kivy window 但是崩溃时我尝试访问远程 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
,但直接 运行ning main.py 时出现模块未找到错误。
ModuleNotFoundError:没有名为 'dnspython'
我做了 运行 python -m pip install --upgrade dnspython
但收到了 'Requirement already up-to-date: dnspython '
我不确定还能尝试什么!
问题是导入不是 dnspython
(尽管它是错误中给出的名称并被 pip 使用),实际模块只是 dns
.
因此,我能够通过更改规范文件来解决问题,使 hiddenimports
为:
hiddenimports=['dns']