我具有以下项目结构:
project_dir
├── my_package
│ ├── subpackage
│ │ ├── bar.py
│ │ └── __init__.py
│ ├── foo.py
│ └── __init__.py
├── not_wanted_package
│ ├── other.py
│ └── __init__.py
└── setup.py
我想创建包含my_package
(及其所有子包)的Python包,但不 not_wanted_package
。使用python3 setup.py sdist bdist_wheel
。
以下setup.py
正常工作:
from setuptools import setup
setup(
name='my_package',
version='1.0',
packages=['my_package', 'my_package.subpackage']
)
但是当我将添加/删除/重命名任何子包时,我将不得不手动更新此文件。我可以使用setuptools
提供的功能,但是find_packages()
发现所有软件包(包括not_wanted_package
)。另一方面,find_packages('my_package')
仅发现subpackage
。
有什么方法可以使用find_packages()
或find_namespace_packages()
自动发现my_package
及其子包吗?
答案 0 :(得分:1)
;
在}
中使用关键字from setuptools import setup, find_packages
setup(
…
packages=find_packages(include=['my_package']),
…
)
时,仅包含此类软件包。未列出其他所有软件包,包括include
。
或者您可以使用find_packages
答案 1 :(得分:0)
find_packages
支持根据documentation排除软件包。如果那还不够的话,您仍然可以简单地使用find_packages
,但是根据排除的软件包的静态列表过滤输出。 setup.py
是标准的Python文件,这意味着向其添加自己的代码不会有问题。
from setuptools import find_packages
def filter_packages(...):
...
setup(
...
packages=filter_packages(find_packages("src")),
...
)
如果您的问题仅在于发现所有软件包,而不仅仅是子软件包,那么请查看werkzeug
使用的文件结构是什么样。存储库的组织方式旨在消除find_packages
的问题。如您所见,存储库中的werkzeug
目录位于一个额外的src
目录中,有效地使其成为src/werkzeug
。
https://github.com/pallets/werkzeug/blob/c6dfc4880328fe9c4558d2b2e2325761f4e17f58/setup.py#L51