首页 > 解决方案 > 在 setup.py 中自动发现 Python 子包

问题描述

我有以下项目结构:

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 及其子包?

标签: pythonsetuptoolssetup.py

解决方案


from setuptools import setup, find_packages

setup(
    …
    packages=find_packages(include=['my_package']),
    …
)

仅在此类包中include使用关键字时。find_packages其他所有软件包,包括not_wanted_package未列出。

或者你可以排除它exclude=['not_wanted_package']


推荐阅读