4

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

谢谢你。

4

1 回答 1

12

来自pyinstaller 文档

隐藏进口

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

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

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

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

该文档包含有关所有这些如何工作的更多信息,但希望这提供了更多背景信息。

于 2013-03-10T03:06:47.470 回答