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

在pyproject.toml指定路径后如何访问Python包数据?

修复setuptools打包后无法加载mypkg.models子包的问题

问题根源

ModuleNotFoundError: No module named 'mypkg.models' 表明mypkg.models子包未被正确纳入打包产物。尽管已为子包添加__init__.py,但默认的包发现规则可能未递归识别到该子包,导致打包时遗漏。


修复方案

1. 修正pyproject.toml的包发现配置

修改包查找规则,确保递归包含所有mypkg相关子包:

[tool.setuptools.packages.find]
where = ["."]
include = ["mypkg*"]
  • where = ["."] 指定从项目根目录开始扫描包
  • include = ["mypkg*"] 匹配mypkg及其所有层级的子包

2. 优化运行时加载逻辑

改用importlib.resources.files API(比path更适配打包后的wheel/egg场景),同时通过相对导入避免字符串包名出错:

import joblib
from importlib.resources import files
from . import models

def load_model(filename):
    model_path = files(models).joinpath(filename)
    return joblib.load(model_path)

saved_model = load_model("model1.pkl")

若需保留原函数的字符串包名形式,需显式导入子包确保其被识别:

import importlib.resources
import joblib
import mypkg.models  # 显式导入子包,触发模块注册

def load_model(package, filename):
    with importlib.resources.path(package, filename) as file_path:
        return joblib.load(file_path)

saved_model = load_model('mypkg.models', 'model1.pkl')

3. 重新打包安装

先清理旧安装版本:

pip uninstall -y mypkg

再重新打包并安装(推荐生成wheel包模拟正式环境):

python -m build
pip install dist/*.whl

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 15:12:37