PyInstaller什么是hiddenimports和hooks?

时间:2013-03-05 16:56:28

标签: python exe pyinstaller

我最近尝试过pyInstaller,有一些我不太了解的东西。我一直在尝试创建一些可执行文件(注意:所有这些都使用numpy,scipy,OpenCV,BLAS等),但我一直在失败。总有一些东西缺失。所以我的问题是,有人可以更好地向我解释什么是hiddenimports和hooks,我怎样才能告诉pyInstaller我的代码中所有依赖项的目录,以便它可以打包到最终的可执行文件中。

谢谢。

1 个答案:

答案 0 :(得分:11)

来自pyinstaller documentation

  

hiddenimports

A list of modules names (relative or absolute) the module imports in some untrackable way.

在程序的静态分析过程中,某些Python导入无法进行。例如,您的代码可能会创建要使用Python代码导入的模块的名称,然后导入该模块。在这种情况下,pyinstaller在代码分析期间将无法解决,导入模块的名称是什么。如果您提前知道,那么您可以告诉pyinstaller无条件地包含这些模块。

Hooks是一种捆绑一组隐藏导入和其他参数以查找模块的方法。挂钩名为hook-<module>.py,其中module是完全限定的模块名称。例如hook-xml.dom.py。如果您的代码为import xml.dom,则会读取钩子脚本的内容以包含特定于xml.dom的任何隐藏导入。

如果您创建自己的模块并且需要隐藏导入,则可以使用相应的隐藏导入设置创建一个钩子脚本并存储在PyInstaller钩子目录中。下次使用PyInstaller来冻结导入模块的程序时,它会自动找到你的钩子文件并引入所需的隐藏导入,而不必记住每次隐藏的导入对你的模块的影响。

该文档提供了有关所有这些工作原理的更多信息,但希望这可以提供更多背景信息。