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

如何将项目根目录的配置与密钥文件加入wheel构建的package data?

解决根目录文件无法纳入wheel打包的问题

你的问题出在**package_data仅针对包含__init__.py的Python包目录生效**,根目录的文件不属于任何包,所以当前配置无法识别。以下是两种可行解决方案:

方案1:保留根目录文件,使用data_files参数

修改setup.py,添加data_files配置来指定文件及其安装路径:

from setuptools import find_packages, setup

setup(
    name="dbx_test",
    packages=find_packages(exclude=["tests", "tests.*"]),
    include_package_data=True,
    # 新增data_files配置
    data_files=[
        ("", ["config.yaml", "secrets.txt"])  # 空字符串表示安装到Python环境的根目录
        # 若想让文件和包放在同一目录,可指定路径如("dbx_test", ["config.yaml", "secrets.txt"])
    ],
    setup_requires=["wheel"],
    entry_points={
        "console_scripts": [
            "main = src.main:main",
        ],
    },
    version="0.0.1",
    description="",
    author="",
)

注意:这种方式会将文件安装到系统级路径(如Python的site-packages根目录),并非最佳实践,更推荐方案2。

方案2:将文件移至Python包目录(推荐)

  1. 把config.yaml和secrets.txt移动到src目录下(你的主包目录,需包含__init__.py)
  2. 修改setup.py的package_data配置,明确指定对应包:
from setuptools import find_packages, setup

setup(
    name="dbx_test",
    packages=find_packages(exclude=["tests", "tests.*"]),
    include_package_data=True,
    package_data={
        "src": ["config.yaml", "secrets.txt"]  # 指定包名"src"下的目标文件
    },
    setup_requires=["wheel"],
    entry_points={
        "console_scripts": [
            "main = src.main:main",
        ],
    },
    version="0.0.1",
    description="",
    author="",
)
  1. (可选)在项目根目录创建MANIFEST.in文件,确保源码包包含这些文件:
include src/config.yaml
include src/secrets.txt

这样构建wheel时,两个文件会被正确打包到src包目录下,后续代码可通过pkg_resources或importlib.resources读取这些文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:52:24