基于setuptools的pyproject.toml如何自动识别项目包?
解决扁平布局下setuptools自动识别顶层包的配置方案
删掉手动维护的
include列表
当where = ["."]时,setuptools默认会自动扫描当前目录下所有带__init__.py的合法Python包。直接删掉冗长的include列表,新增顶层包时就不用手动加配置了,完全自动识别。修复
exclude规则的生效问题
原配置里exclude不生效,是因为这里的规则要写包名称模式,不是文件系统的glob路径。比如要排除测试包、文档包,这么写就行:[tool.setuptools.packages.find] where = ["."] exclude = [ "tests*", # 匹配所有以tests开头的包 "docs*", # 匹配所有以docs开头的包 "example*" # 匹配所有以example开头的包 ]不用写路径,直接用包名前缀匹配就好。
额外:全局排除非包文件/目录
如果要忽略临时文件、构建目录这类非包内容,在pyproject.toml根节点加个exclude字段(和tool.setuptools同级):exclude = [ "*.pyc", "__pycache__/", "build/", "dist/", ".venv/" ]这样构建时这些内容就不会被打包进去。
验证配置是否正确
跑下面的命令就能看到setuptools自动发现的包列表,确认是不是你要的:python -m setuptools discover
内容的提问来源于stack exchange,提问作者Klaas van Schelven
相关产品推荐
相关产品推荐

