Python包中np.load加载本地npy文件路径错误问题求助
解决Python包内npy文件加载路径问题
问题核心
包安装后,资源文件的路径逻辑和源码开发环境完全不同,仅靠Path(__file__)和sdist的include配置,无法覆盖wheel安装等场景,导致文件找不到。
解决方案
1. 修正pyproject.toml的资源配置
Flit的sdist.include仅控制源码包(tar.gz)包含的文件,wheel包需要额外配置package-data才能把资源文件打包进去。修改你的配置:
[tool.flit.sdist] include = [ "my_file.npy", ] # 新增配置:替换成你的实际包名(比如你的包叫mypackage就写mypackage) [tool.flit.package-data] mypackage = ["my_file.npy"]
2. 使用官方推荐的资源加载方式
放弃Path(__file__)的方式,改用Python标准库的importlib.resources加载包内资源,这种方式兼容所有安装场景(源码、wheel、zip包等):
from importlib.resources import files import numpy as np # 替换成你的包名,比如你的包名为`mypackage` resource_path = files("mypackage").joinpath("my_file.npy") data = np.load(resource_path)
如果需要兼容Python 3.8及以下版本,先安装importlib_resources包(pip install importlib-resources),代码改成:
from importlib_resources import files import numpy as np resource_path = files("mypackage").joinpath("my_file.npy") data = np.load(resource_path)
3. 检查文件位置
确保my_file.npy放在你的包根目录下,和包的__init__.py文件同级,这样配置才能正确识别并打包该文件。
验证步骤
- 重新构建包:
flit build - 安装新构建的包:
pip install dist/your-package-file.whl - 运行代码测试资源加载是否正常
内容的提问来源于stack exchange,提问作者A.A
相关产品推荐
相关产品推荐

