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

如何在setup.py中用package_data包含无__init__.py的非Python文件?

解决Python包打包时配置文件未被包含的问题

问题分析

你的目录结构中,logging.yml是foo包下config子目录的文件,但当前setup.py的package_data配置有误,导致文件未被打包进安装包,也未出现在SOURCES.txt中。同时,跨版本(Python2.7到3.12)和跨平台兼容需要更可靠的配置方式。

修正方案

1. 调整setup.py的package_data配置

package_data的键需要对应Python包名,这里config是foo包的子目录,而非独立包,因此键应设为foo,值为相对于foo包的文件路径:

from os import path
from setuptools import find_packages, setup

package_name = "foo"

if __name__ == "__main__":
    setup(
        name=package_name,
        packages=find_packages(),
        # 配置foo包下的config子目录中的logging.yml
        package_data={
            package_name: ["config/logging.yml"]
        },
        include_package_data=True,
    )

2. 添加MANIFEST.in文件(关键兼容项)

为了兼容旧版本setuptools和Python2.7,在项目根目录(与setup.py同目录)创建MANIFEST.in文件,明确指定要包含的文件:

include foo/config/logging.yml

这个文件会告诉setuptools在生成源码分发包时包含指定文件,确保跨版本、跨平台的兼容性。

验证方法

  1. 执行python setup.py sdist生成源码包,解压dist/foo-*.tar.gz后检查是否包含foo/config/logging.yml
  2. 查看foo.egg-info/SOURCES.txt,确认文件已被列入其中
  3. 重新执行安装命令python -m pip install .,之后在虚拟环境中查找文件:fd -HIFuuueyml logging应该能找到对应的路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:07:36