python - Pyinstaller 和 hiddenimports:如何强制导入 pyinstaller 不会自动导入的包
问题描述
我尝试使用 pyinstaller 生成一个 .exe 文件。
它工作正常,除了一个包没有被 pyinstaller 自动检测和导入。
这样的包,在这个例子中我们称之为“ packageOfInterest ”,没有被导入,因为开发者没有提供钩子。
阅读一些文档后,我了解到可以通过在 .spec 中添加以下行轻松解决此问题:
hiddenimports=["packageOfInterest"]
不幸的是它不起作用,即使使用这样的代码行也没有导入“packageOfInterest” 。
所以我的问题是:.spec 文件中还缺少什么?
在我的.spec 文件下面,我已经成功地使用了许多应用程序,其中包可以被 pyinstaller 自动检测到,因此情况并非如此。
import sys
import os
from kivy_deps import sdl2, glew
from kivymd import hooks_path as kivymd_hooks_path
path = os.path.abspath(".")
a = Analysis(
["MyScript.py"],
# "packageOfInterest" in the "hiddenimports" is the package name
# that pyinstaller could not import automatically
hiddenimports=["kivymd.stiffscroll", "packageOfInterest"],
pathex=[path],
hookspath=[kivymd_hooks_path],
datas = [("media\\", "media\\")],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=None,
noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=None)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
debug=False,
strip=False,
upx=True,
name="MyScript",
console=True,
icon='myicon.ico'
)
“packageOfInterest”的位置在路径:
C:\Users\ASUS\AppData\Local\Programs\Python\Python39\Lib\site-packages
也许这个路径应该在某个地方指定(例如应该在“path”值之后的“pathex”中添加)。
一般来说,确定一个清晰的方法来检查通过“MyScript.py”导入的所有包,这些包不能由 pyinstaller 自动导入,这将强制它们导入。
同时将不胜感激了解如何定制到 .spec 以解决问题。
提前致谢
解决方案
The .exe crashed because one file is not showing. Such file was belonging to the "packageofinterest" (mne)
嗯..您可以尝试使用--collect-data packageofinterest
,因为您似乎缺少一些属于该软件包的文件。
--hidden-import packageofinterest
如果您不想使用规范文件,也可以使用。
推荐阅读
- python - 将复杂代码转换为列表理解失败
- ios - 有没有办法暂停背景音乐(例如Spotify)然后播放声音文件,然后在ios应用程序中再次播放背景音乐?
- excel - VBA不会结束If函数
- node.js - 如何使用 gridfs-stream 将图像上传到 GridFS?
- github - 当我落后 1 和 2 领先时,如何将更改提交到存储库?
- javascript - 使用过滤器从 ajax 响应中获取类
- wpf - 如何在 xaml 中通过 DataTrigger 切换控制?
- .net - 依赖注入自动注册被认为是不好的做法吗?
- c++ - 如何解决此“找不到'双重转换 Groupcctype'文件”问题?
- python - pyqt5 QTimer.singleShot 根本不运行