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

上传Python包到PyPI时data文件夹未被包含该如何解决?

问题原因

默认执行python3 setup.py sdist打包时,仅会自动包含Python包目录下的.py文件,以及根目录的README、LICENSE等默认识别的文件,你放在根目录的data文件夹未在打包配置中声明,因此不会被纳入sdist压缩包,安装后自然找不到对应目录。

修复方案

你可以任选以下两种方案之一配置:

方案1:使用MANIFEST.in声明额外包含文件(适配你当前的目录结构,无需调整文件位置)

  • 在项目根目录(和setup.py同级位置)新建名为MANIFEST.in的文件
  • 在文件中添加规则声明要包含data目录的内容:
    # 包含data目录下所有json文件
    include data/*.json
    # 如果需要包含data目录下所有层级的所有文件,使用下方规则即可
    # recursive-include data *
    
  • 修改setup.py,在setup参数中添加include_package_data=True,示例配置如下:
    from setuptools import setup, find_packages
    
    setup(
        name="AAA",
        version="你的版本号",
        packages=find_packages(),
        include_package_data=True, # 必须添加该参数,才会读取MANIFEST.in的配置规则
        # 其余你原有配置(作者、描述、依赖等)保持不变
    )
    

方案2:将data目录移入包内,使用package_data配置

如果你希望data文件随Python包一起安装到site-packages的包目录下,可以选择该方案:

  • 将根目录的data文件夹移动到内层AAA/包目录下,调整后结构如下:
    AAA
    ├── AAA
    │   ├── data
    │   │   ├── table2.json
    │   │   └── table2.json
    │   ├── AAA.py
    │   ├── BBB.py
    │   ├── CCC.py
    │   ├── __init__.py
    │   └── DDD.py
    ├── LICENSE.txt
    ├── README.md
    └── setup.py
    
  • 在setup.py中添加package_data参数配置即可,无需新建MANIFEST.in:
    setup(
        # 其余你原有配置保持不变
        package_data={
            # 键为包名,值为要包含的文件路径规则
            "AAA": ["data/*.json"]
        }
    )
    
补充注意

安装后读取data文件时,不要使用硬编码的相对路径,建议使用importlib.resources模块读取包内文件,避免不同环境下路径不一致的问题,示例代码:

from importlib.resources import files
import json

# 方案2的读取示例
data_text = files("AAA.data").joinpath("table2.json").read_text()
table_data = json.loads(data_text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:54:06