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

为何setuptools生成的wheel未包含顶级非包模块?

解决方案

1. 让单文件模块pytest_pt.py被包含进wheel

当前[tool.setuptools.packages.find]只会识别目录形式的Python包(带__init__.py的普通包或命名空间包),不会自动拾取单文件模块。要解决这个问题,需要在pyproject.toml中显式指定单文件模块路径:

修改pyproject.toml,添加tool.setuptools.py-modules配置:

[build-system]
requires = ['setuptools']
build-backend = 'setuptools.build_meta'

[tool.setuptools.packages.find]
where = ['psrc']

# 显式声明单文件模块
[tool.setuptools.py-modules]
pytest_pt = "psrc/pytest_pt.py"

这样setuptools在构建wheel时就会将pytest_pt.py作为顶级模块打包进去,同时不影响sdist的已有行为。

2. 将doc/目录文件包含进wheel

MANIFEST.in仅控制**源码分发包(sdist)**的文件集合,wheel默认不会包含非代码类文件。要把doc/目录的内容打包进wheel,需要使用data_files配置指定安装路径:

在pyproject.toml中添加:

# 将doc目录下所有文件安装到site-packages内的r8format/doc路径
[tool.setuptools.data-files]
"r8format/doc" = ["doc/**/*"]

如果需要将文档安装到系统标准文档路径(如Linux的/usr/share/doc/r8format),可以把目标路径改为对应的系统路径,但这种方式可能因平台而异,建议优先安装到包专属路径。

关键原因说明

  • 可编辑安装(pip install -e)时,pip直接将项目根目录加入Python的sys.path,所以能找到psrc/下的所有模块,但wheel构建严格遵循setuptools的包配置规则,未声明的单文件模块会被忽略。
  • MANIFEST.in的作用范围仅限sdist,wheel的非代码文件必须通过package_data(针对包内文件)或data_files(针对独立目录)单独配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:17:26