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

如何不调整目录结构为Python hello包打包my_data数据?

解决单模块Python包数据文件安装问题

你的问题核心在于:使用py-modules声明单模块时,package-data配置仅适用于包目录(含__init__.py的文件夹),而你的hello是单个.py文件,并非包目录,因此无法匹配到my_data资源。以下是可行的解决方案:

方案1:修改pyproject.toml使用data-files配置

替换原[tool.setuptools.package-data]部分,改用data-files指定全局数据文件的安装路径:

[project]
name = "hello"
version = "0.1"

[tool.setuptools]
py-modules = ['hello']

# 将my_data目录及其内容安装到site-packages下的hello关联路径
[tool.setuptools.data-files]
"hello" = ["my_data/**/*"]
  • 这里的"hello"是目标路径(相对于site-packages),会将my_data目录安装到site-packages/hello/下;
  • 如果希望直接将my_data安装到site-packages根目录,可改为:
    [tool.setuptools.data-files]
    "my_data" = ["my_data/**/*"]
    

方案2:补充MANIFEST.in确保源码分发包含数据文件

如果通过源码包(sdist)安装,需要创建MANIFEST.in文件,让setuptools在生成源码包时纳入数据文件:

include my_data/**/*

这个文件会避免pip安装时因源码包缺失数据文件导致的安装失败。

验证安装效果

执行安装命令后,可通过以下命令确认数据文件是否存在:

# 查看hello包的安装路径
pip show hello | grep Location
# 进入该路径查看my_data目录
ls $(pip show hello | grep -oP 'Location: \K.*')/hello/my_data

代码中读取数据文件的正确方式

安装完成后,在hello.py中可通过importlib.resources读取数据文件(以安装到site-packages/hello/my_data为例):

from importlib.resources import files

def hello():
    print('Hello, world!')
    # 获取数据文件路径
    data_path = files("hello").joinpath("my_data", "my_data.csv")
    print(f"数据文件路径:{data_path}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:22:22