在setuptools的pyproject.toml中,py_modules参数应放置在何处?
pyproject.toml中py_modules的正确配置位置
核心结论
py_modules是setuptools专属配置项,必须放在[tool.setuptools]区块下。你之前遇到的报错,要么是放错了区块(比如[project]),要么是setuptools版本不兼容导致的。
针对你的项目的解决方案
你的项目根目录存在独立的__init__.py,同时有baseclasses和elements两个子包,以下是两种可行的配置方式:
方式1:直接配置py_modules(需升级setuptools)
修改pyproject.toml的[tool.setuptools]区块,同时升级setuptools版本以支持该配置:
[tool.setuptools] packages = ["baseclasses", "elements"] py_modules = ["__init__"] [build-system] requires = ["setuptools>=61.0.0", "wheel"] # 升级到支持pyproject.toml配置的版本 build-backend = "setuptools.build_meta"
旧版本的setuptools(比如你当前指定的>=43.0.0)还未完全支持在pyproject.toml中配置py_modules,升级到61.0.0及以上版本即可解决报错。
方式2:调整项目结构(更规范的包管理方式)
如果根目录的__init__.py是项目主模块,建议将其整合到与项目同名的elements包中,调整后的项目结构如下:
. ├── .gitignore ├── LICENSE ├── README.md ├── elements │ ├── __init__.py # 迁移原根目录__init__.py的内容到这里 │ ├── baseclasses │ │ ├── __init__.py │ │ ├── bunch_of_py_files.py │ ├── bunch_of_py_files.py ├── pyproject.toml
然后修改pyproject.toml的包配置,使用自动发现更便捷:
[tool.setuptools] packages = {find = {}}
报错原因说明
- 放在
[project]区块报错:py_modules不属于PEP 621定义的标准项目配置属性,该区块仅接受PEP规范明确列出的字段。 - 放在
[tool.setuptools]区块报错:旧版本setuptools未支持在pyproject.toml中配置py_modules,升级版本即可解决。
内容的提问来源于stack exchange,提问作者JasonGrace2282
相关产品推荐
相关产品推荐

