我有两个包(例如,dataread
和 datainspector
),PyInstaller 未检测到它们。因此,当运行的应用程序到达需要从这些包中导入模块的位置时,应用程序将终止。
最简单的解决方案是将 dataread
和 datainspector
复制到打包的应用程序中。但这将打破打包应用程序二进制版本的意图。
我看过 highded imports 和 hook,我认为两者都可以解决问题,但我不确定该使用哪个。
有什么建议吗? PS:这两个包都可能包含嵌套目录。
最佳答案
Hook 是在 PyInstaller 找到导入语句时指定额外操作的文件。
如果您添加一个 hook-data.py
文件,其中包含一行 hiddenimports = ['_proxy', 'utils', 'defs']
,PyInstaller 将检查它会在看到 import data
时查找其他导入。
您必须通过 --additional-hooks-dir
指定 Hook 目录的路径(如果您不想将源代码与仅编译文件混合,这很有用,并且而不是将它们放在单独的目录中)。
更简单的解决方案是使用 --hidden-import=modulename
和 PyInstaller 脚本。它会以静默方式添加 modulename
作为 import 语句。
如果您想指定哪个导入需要哪些附加模块,则 Hook 会更好。 --hidden-import
作为一次性或用于调试更简单。
更多信息 - https://pyinstaller.readthedocs.io/en/stable/hooks.html
关于python - 如何正确创建 pyinstaller Hook ,或者隐藏导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27947639/