在setup.py中自动发现Python子包
我有以下项目结构:在setup.py中自动发现Python子包,python,setuptools,setup.py,Python,Setuptools,Setup.py,我有以下项目结构: project_dir ├── my_package │ ├── subpackage │ │ ├── bar.py │ │ └── __init__.py │ ├── foo.py │ └── __init__.py ├── not_wanted_package │ ├── other.py │ └── __init__.py └── setup.py 我想创建包含my_-package(及其所有子包)但不包含not_-wanted\u
project_dir
├── my_package
│ ├── subpackage
│ │ ├── bar.py
│ │ └── __init__.py
│ ├── foo.py
│ └── __init__.py
├── not_wanted_package
│ ├── other.py
│ └── __init__.py
└── setup.py
我想创建包含my_-package
(及其所有子包)但不包含not_-wanted\u-package
的Python包。使用python3 setup.py sdist bdist\u wheel
以下setup.py
工作正常:
from setuptools import setup
setup(
name='my_package',
version='1.0',
packages=['my_package', 'my_package.subpackage']
)
但当我添加/删除/重命名任何子包时,我必须手动更新此文件。我可以使用setuptools
提供的功能,但find_packages()
会发现所有包(包括不需要的_package
)。另一方面,查找包(“我的包”)
只查找子包
是否有任何方法可以使用
find_packages()
或find_namespace_packages()
自动发现my_packages
及其子包?find_packages
支持根据规则排除包。如果这还不够,您仍然可以简单地使用find_packages
,但根据排除包的静态列表过滤输出setup.py
是一个标准的Python文件,这意味着向其中添加您自己的代码不是问题
from setuptools import find_packages
def filter_packages(...):
...
setup(
...
packages=filter_packages(find_packages("src")),
...
)
如果您的问题仅仅在于发现所有包而不是子包,那么请查看werkzeug
使用的文件结构。存储库的组织方式旨在消除查找包的问题。如您所见,存储库中的werkzeug
目录被放置在一个额外的src
目录中,有效地使其成为src/werkzeug
当在find_packages
中使用关键字include
时,仅包括此类包。不列出包括不需要的包在内的所有其他包
或者,您可以使用exclude=[“不需要包”]
from setuptools import setup, find_packages
setup(
…
packages=find_packages(include=['my_package']),
…
)