Python 如何正确创建pyinstaller钩子,或者隐藏导入?

Python 如何正确创建pyinstaller钩子,或者隐藏导入?,python,pyinstaller,Python,Pyinstaller,我有两个包(比如,dataread和datainspector),PyInstaller没有检测到它们。因此,当运行的应用程序到达需要从这些包导入模块的点时,应用程序终止 最简单的解决方案是将dataread和datainspector复制到打包的应用程序中。但这将打破打包应用程序二进制版本的意图 我读过hidded imports和hook,我认为两者都可以解决问题,但我不确定使用哪一种 有什么建议吗? PS:这两个包都可能包含嵌套目录。钩子是指定PyInstaller查找导入语句时的其他操作

我有两个包(比如,
dataread
datainspector
),PyInstaller没有检测到它们。因此,当运行的应用程序到达需要从这些包导入模块的点时,应用程序终止

最简单的解决方案是将
dataread
datainspector
复制到打包的应用程序中。但这将打破打包应用程序二进制版本的意图

我读过hidded imports和hook,我认为两者都可以解决问题,但我不确定使用哪一种

有什么建议吗?
PS:这两个包都可能包含嵌套目录。

钩子是指定PyInstaller查找导入语句时的其他操作的文件

如果您添加一个
hook data.py
文件,该文件包含一行
hiddenimports=['''u proxy','utils','defs']
,PyInstaller将在看到
导入数据时检查该文件以查找其他导入

您必须通过
--additional hooks dir
指定钩子目录的路径(如果您不想将源代码与仅编译的文件混合使用,而是将它们保存在单独的目录中,这将非常有用)

更简单的解决方案是将
--hidden import=modulename
与PyInstaller脚本一起使用。它将添加
modulename
作为import语句

如果您想指定哪个导入需要哪些附加模块,那么挂钩会更好<代码>--隐藏导入
作为一次性导入或调试更简单


更多信息-

使用自动复制到exe添加Hinden库。 在其他文件中添加光栅文件夹(C:/users/Admin/anaconda3/envs/name/Lib/site packages/Rasterio),然后转换为exe

这对我有用。
如果它说缺少一些其他库,那么也可以添加该库的文件夹。

好的,这实际上是您的决定。你应该根据自己的经验来选择。我认为其他人对他们有用的想法可能对你无效。为了获得最好的结果,你自己测试一下。目前,我对这两方面的经验都非常有限。但目前正在进行这项工作;)我认为PyInstaller文档需要为那些刚接触他们技术的人奠定一个合适的基础概念。例如,我不确定我的软件包去了哪里。。。。是否在*.exe中。。还是怎样我很想得到一个很好的总结答案……)呸。。这是迄今为止最有用的答案。我会先用它来解决我的问题。我先试试再问另一个问题。谢谢您应该将此文件放在哪里?文件可以放在任何地方,但最好将其保存在与源文件不同的文件夹中,如果您只是在试验,则可以将
(点)传递到--additional hooks dir。我使用了特殊的
pyinstaller\u hooks
文件夹。欢迎来到SO Nikhil!你能在你的答案上再解释一下吗?什么是自动复制到exe?你能给我们一个链接吗?“附加文件”在哪里?如何访问它?非常感谢。