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

使用python setup.py bdist_wheel构建Python包时,默认包含哪些文件?哪些需通过package_data定义?

关于python setup.py bdist_wheel打包的文件包含规则

好问题!我来帮你理清楚用python setup.py bdist_wheel创建Python包时,默认会包含哪些文件,以及哪些需要通过package_data关键字来指定——这个细节确实容易让人混淆。

默认会包含的文件

  • Python源码文件(.py):只要它们位于setup.py中packages参数指定的包目录下,或是通过py_modules参数声明的独立模块文件,都会被默认打包。
  • 包目录下的__init__.py:这是Python识别“包”的核心标志,所有被声明的包目录里的这个文件都会被自动包含。
  • 元数据与配置文件:setup.py、setup.cfg、pyproject.toml(如果项目使用了的话)这类构建配置文件会被默认包含。
  • 常见命名的许可证文件:比如LICENSE、LICENSE.txt、LICENSE.md这类符合常规命名的许可证文件,确实会被默认打包进wheel里,你注意到的这点没错。
  • 若项目存在MANIFEST.in文件:里面指定的文件也会被参考纳入打包范围(不过bdist_wheel对MANIFEST.in的处理会优先满足包的结构规范,不是完全照搬)。

需要通过package_data定义的文件

这些都是非Python源码类的运行时资源文件,因为bdist_wheel默认只会关注可执行的Python代码,不会自动识别这些资源:

  • 配置类文件:比如包内的.json、.yaml、.ini配置文件。
  • 静态资源:图片(.png、.jpg)、字体文件、音频片段这类静态资源。
  • 数据文件:.csv、.txt格式的数据集,或是供程序读取的文本资源。
  • 模板文件:.html、.jinja2这类用于渲染的模板文件。
  • 非源码类二进制文件:比如一些辅助功能的.so、.pyd文件(如果不是通过ext_modules编译生成的)。

举个简单的例子,假设你的包名为mytool,包内有resources/config.yaml和icons/logo.png两个资源文件,你需要在setup.py里这样配置:

from setuptools import setup, find_packages

setup(
    name="mytool",
    packages=find_packages(),
    package_data={
        "mytool": ["resources/*.yaml", "icons/*.png"]
    },
    # 其他参数...
)

另外要注意:如果资源文件不在包目录内部,而是在项目根目录的独立文件夹(比如assets/),那应该使用data_files参数来声明,而不是package_data——后者专门用于包内部的资源文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:41:20