我一直在尝试在PyInstaller中使用九头蛇,但失败了。我已经创建了一个与here中的示例非常类似的配置示例。
我注意到PyInstaller没有找到hydra包,所以我用下面的代码创建了一个简单的钩子文件hook -hel.py:
from PyInstaller.utils.hooks import collect_data_files, collect_submodules
datas = collect_data_files('hydra')
hiddenimports = collect_submodules('hydra')这似乎解决了模块导入失败的问题,但是当我尝试在命令行中运行可执行文件时,我得到了以下错误:
Traceback (most recent call last):
File "lib\site-packages\hydra\_internal\utils.py", line 198, in run_and_report
File "lib\site-packages\hydra\_internal\utils.py", line 321, in <lambda>
File "lib\site-packages\hydra\_internal\hydra.py", line 74, in create_main_hydra2
File "lib\site-packages\hydra\_internal\config_loader_impl.py", line 80, in __init__
File "lib\site-packages\hydra\_internal\config_repository.py", line 22, in __init__
File "lib\site-packages\hydra\_internal\sources_registry.py", line 30, in resolve
ValueError: No config source registered for schema pkg, supported types : []我好像想不出来,有什么想法吗?
我使用的是PyInstaller 3.6和Hydra1.0.4
发布于 2020-12-01 03:25:23
在看了一下PyInstaller之后,它看起来像是在试图发现所需的软件包,但不知何故,它未能为九头蛇做好工作。Hydra有一些在运行时发现的内置插件,包括配置源。该错误表明配置源不是PyInstaller提供的包。
如果PyInstaller试图变得聪明,只包含一些它认为直接依赖它的东西,那么九头蛇很可能会失败。尝试将所有的hydra模块显式添加到您的PyInstaller配置文件中。
作为应用程序的另一种打包方法,请看一下应用程序打包示例here。它向您展示了安装Hydra应用程序所支持的方法(带有工作示例)。
发布于 2021-03-16 01:50:31
Hydra不能很好地使用PyInstaller,因为它使用pkgutil.walk_packages动态读取插件包。
点击此处查看问题和答案:Pyinstaller - include programmatically imported modules
因为您不是从库开发人员的角度来解决这个问题,所以使用.spec文件中的data字段复制包可以解决您的问题,尽管这有点老生常谈。在我看来,这或者改用OmegaConf都是一个很好的解决方案。
发布于 2022-02-04 13:52:45
我遇到了类似的问题,最终不得不创建一个名为hook -hy.py的pyinstaller钩子,并将其放入pyinstaller钩子文件夹中。它可能会减少到较低级别的hydra名称空间。利用其他钩子,我执行了以下操作:
我面临的唯一问题是内联使用compose overrides=f"environment.root_path={set_root_path}",抱怨EOF....等等,但是有解决方法。日志记录和获取配置的工作方式就像一个护身符。
from PyInstaller.utils.hooks import collect_submodules
# Use this to get hydra internals
# "hydra._internal.core_plugins"
# "hydra.plugins"
# 'hydra._internal.core_plugins','hydra.grammar.gen.OverrideParser'
hiddenimports = collect_submodules('hydra')https://stackoverflow.com/questions/65078806
复制相似问题