如何将项目根目录的配置与密钥文件加入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包目录(推荐)
- 把
config.yaml和secrets.txt移动到src目录下(你的主包目录,需包含__init__.py) - 修改
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="", )
- (可选)在项目根目录创建
MANIFEST.in文件,确保源码包包含这些文件:
include src/config.yaml include src/secrets.txt
这样构建wheel时,两个文件会被正确打包到src包目录下,后续代码可通过pkg_resources或importlib.resources读取这些文件。
内容的提问来源于stack exchange,提问作者Tarique
相关产品推荐
相关产品推荐

