我有一个Python脚本(3.9.8),它在cli (在Win11上)中工作得很好。现在,我想使用我的python脚本并生成一个.exe
。我用过一次水龙头,没有任何问题。现在,在转换之后,我确实从Hydra (1.2.0)获得了这个错误消息。
Traceback (most recent call last):
File "src\main.py", line 19, in <module>
File "hydra\main.py", line 90, in decorated_main
File "hydra\_internal\utils.py", line 332, in _run_hydra
File "hydra\_internal\utils.py", line 183, in create_automatic_config_search_path
File "hydra\_internal\utils.py", line 196, in create_config_search_path
File "hydra\core\plugins.py", line 46, in instance
File "hydra\core\singleton.py", line 17, in instance
File "hydra\core\singleton.py", line 13, in __call__
File "hydra\core\plugins.py", line 54, in __init__
File "hydra\core\plugins.py", line 58, in _initialize
File "importlib\__init__.py", line 127, in import_module
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'hydra._internal.core_plugins'
这是我的项目结构
src
│ main.py
│
├───conf
│ │ config.yaml
│ │ __init__.py
│ └───hydra
│ └───job_logging
│ logging.yaml
│
└───logs
我正在使用auto-py-to-exe
模块。模块在一个env中,我包括到站点包的路径。我正在使用2.23.1版本的pyinstaller --noconfirm --onefile --console --paths "D:/Programmieren/Python/StorageRoom/.venv/Lib/site-packages" "D:/Programmieren/Python/StorageRoom/src/main.py"
这是我正在使用的代码,它会给我带来错误。
from omegaconf import DictConfig
import traceback
import sys
import hydra
import logging
@hydra.main(version_base=None, config_path="../conf", config_name="config")
def main(cfg: DictConfig) -> None:
log = logging.getLogger(__file__)
log.info("This is a very nice print from the exe")
if __name__ == "__main__":
try:
main()
except Exception:
print(traceback.format_exc())
sys.exit(-1)
config.yaml
defaults:
- override hydra/job_logging: logging
- _self_
hydra:
output_subdir: null
run:
dir: .
logging.yaml
version: 1
formatters:
simple:
format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
logFormatter:
format: '%(asctime)s | %(name)s | %(module)s-%(lineno)4s | %(levelname)-8s | %(message)s'
handlers:
console:
class: logging.StreamHandler
formatter: simple
stream: ext://sys.stdout
file:
class: logging.FileHandler
formatter: logFormatter
filename: logs/${hydra.job.name}.log
root:
handlers: [console, file]
level: INFO
disable_existing_loggers: false
这是我的输出文件夹结构,这是我的项目结构
output
│ main.exe
│
├───conf
│ │ config.yaml
│ │ __init__.py
│ └───hydra
│ └───job_logging
│ logging.yaml
│
└───logs
发布于 2022-11-05 03:44:44
我怀疑auto-py-to-exe
中存在一个与Python的importlib.import_module
函数不兼容的bug。
看看你发布的堆栈跟踪,我看到了File "hydra\core\plugins.py", line 58, in _initialize
。看看line 58 hydra/core/plugins.py
in the Hydra source repo,我看到有人打电话给importlib.import_module
。
auto-py-to-exe
回购(https://github.com/brentvollebregt/auto-py-to-exe/issues/325)中似乎有一个悬而未决的问题,还有几个未解决的问题(如https://github.com/brentvollebregt/auto-py-to-exe/issues/177),这些问题都提到了importlib.import_module
的问题。
https://stackoverflow.com/questions/74306775
复制相似问题