You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PyInstaller打包MLflow项目并解决ml-package-versions.yml缺失问题

解决PyInstaller打包MLflow项目时缺失ml-package-versions.yml的问题

问题背景

我用Typer构建了一个依赖MLflow做实验追踪的项目,用PyInstaller打包成exe后,运行时总是提示ml-package-versions.yml文件缺失,错误指向PyInstaller解压的临时目录。直接运行Python脚本一切正常,但打包时这个文件没被包含进去。MLflow读取该文件的逻辑位于versioning.py的第62行附近,试过在干净的conda/虚拟环境中打包,问题依旧。

可行解决方案

方法1:通过PyInstaller的.spec文件强制包含资源文件

  • 找到MLflow安装目录下的ml-package-versions.yml,虚拟环境中的路径通常是Lib\site-packages\mlflow\ml-package-versions.yml
  • 生成PyInstaller的spec文件:pyi-makespec main.py
  • 编辑生成的main.spec文件,在datas列表中添加文件路径映射:
    datas=[
        # 替换为你实际的yml文件路径
        ("path/to/ml-package-versions.yml", "mlflow"),
    ]
    
  • 用spec文件重新打包:pyinstaller main.spec

方法2:修改MLflow读取文件的逻辑(临时补丁)

在项目导入MLflow之前,添加代码手动指定yml文件路径:

import os
import mlflow.utils.autologging_utils.versioning

# 假设yml文件放在exe同目录下
def patched_load_version_file():
    yml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "ml-package-versions.yml")
    with open(yml_path, "r") as f:
        import yaml
        return yaml.safe_load(f)

# 替换原读取函数
mlflow.utils.autologging_utils.versioning._load_version_file_as_dict = patched_load_version_file

# 之后再导入MLflow
import mlflow

打包后需将ml-package-versions.yml放在exe同一目录下。

方法3:使用PyInstaller的--add-data参数直接打包

无需生成spec文件,直接在打包命令中指定:

# Windows系统用分号分隔路径
pyinstaller --add-data "path/to/ml-package-versions.yml;mlflow" main.py

# Linux/macOS系统用冒号分隔路径
pyinstaller --add-data "path/to/ml-package-versions.yml:mlflow" main.py

报错栈信息

Traceback (most recent call last):
  File "main.py", line 2, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 385, in exec_module
  File "app.py", line 14, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 385, in exec_module
  File "database_manager.py", line 9, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 385, in exec_module
  File "dni\modeling\active_learning\predict_single.py", line 9, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 385, in exec_module
  File "mlflow\__init__.py", line 32, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 385, in exec_module
  File "mlflow\tracking\__init__.py", line 20, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 385, in exec_module
  File "mlflow\tracking\fluent.py", line 27, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 385, in exec_module
  File "mlflow\utils\autologging_utils\__init__.py", line 27, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 385, in exec_module
  File "mlflow\utils\autologging_utils\versioning.py", line 67, in <module>
  File "mlflow\utils\autologging_utils\versioning.py", line 63, in _load_version_file_as_dict
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\[USERNAME]\\AppData\\Local\\Temp\\_MEI92042\\mlflow\\ml-package-versions.yml'
[24704] Failed to execute script 'main' due to unhandled exception!

内容的提问来源于stack exchange,提问作者eetuko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 16:17:01