首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在pyinstaller中使用hydra

在pyinstaller中使用hydra
EN

Stack Overflow用户
提问于 2020-12-01 02:03:57
回答 3查看 177关注 0票数 1

我一直在尝试在PyInstaller中使用九头蛇,但失败了。我已经创建了一个与here中的示例非常类似的配置示例。

我注意到PyInstaller没有找到hydra包,所以我用下面的代码创建了一个简单的钩子文件hook -hel.py:

代码语言:javascript
复制
from PyInstaller.utils.hooks import collect_data_files, collect_submodules

datas = collect_data_files('hydra')
hiddenimports = collect_submodules('hydra')

这似乎解决了模块导入失败的问题,但是当我尝试在命令行中运行可执行文件时,我得到了以下错误:

代码语言:javascript
复制
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

EN

回答 3

Stack Overflow用户

发布于 2020-12-01 03:25:23

在看了一下PyInstaller之后,它看起来像是在试图发现所需的软件包,但不知何故,它未能为九头蛇做好工作。Hydra有一些在运行时发现的内置插件,包括配置源。该错误表明配置源不是PyInstaller提供的包。

如果PyInstaller试图变得聪明,只包含一些它认为直接依赖它的东西,那么九头蛇很可能会失败。尝试将所有的hydra模块显式添加到您的PyInstaller配置文件中。

作为应用程序的另一种打包方法,请看一下应用程序打包示例here。它向您展示了安装Hydra应用程序所支持的方法(带有工作示例)。

票数 2
EN

Stack Overflow用户

发布于 2021-03-16 01:50:31

Hydra不能很好地使用PyInstaller,因为它使用pkgutil.walk_packages动态读取插件包。

点击此处查看问题和答案:Pyinstaller - include programmatically imported modules

因为您不是从库开发人员的角度来解决这个问题,所以使用.spec文件中的data字段复制包可以解决您的问题,尽管这有点老生常谈。在我看来,这或者改用OmegaConf都是一个很好的解决方案。

票数 1
EN

Stack Overflow用户

发布于 2022-02-04 13:52:45

我遇到了类似的问题,最终不得不创建一个名为hook -hy.py的pyinstaller钩子,并将其放入pyinstaller钩子文件夹中。它可能会减少到较低级别的hydra名称空间。利用其他钩子,我执行了以下操作:

我面临的唯一问题是内联使用compose overrides=f"environment.root_path={set_root_path}",抱怨EOF....等等,但是有解决方法。日志记录和获取配置的工作方式就像一个护身符。

代码语言:javascript
复制
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')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65078806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档