python - 在 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
及其子包?
解决方案
from setuptools import setup, find_packages
setup(
…
packages=find_packages(include=['my_package']),
…
)
仅在此类包中include
使用关键字时。find_packages
其他所有软件包,包括not_wanted_package
未列出。
或者你可以排除它exclude=['not_wanted_package']
推荐阅读
- dataweave - Mule 4/DW 2.0:在数组对象内迭代数组
- git - 带有代理的 git clone ssh
- python - 如何随机选择位置以生成受限于范围的唯一数字列表
- python - 正则表达式正确分组但 python 错误地插入值?
- azure - 如何在 Azure 上部署 Vue(前端)和 Spring Boot(后端)应用程序(首选通过 Azure Pipelines)?
- rotation - 如何使用 SwiftUI 更新不同的视图?
- amazon-s3 - LocalStack 使用 terraform 在本地创建 S3 存储桶没有名称
- java - Angular *NgFor 将数组中的字符串迭代到表 TD 标记
- angular - Angular 为什么使用 HttpInterceptor 与自定义基本请求服务
- c++ - 将 opencv 从 2.4.13 转换到 3.3.1 时 cv::resize() 导致的运行错误