Python 项目的 Maven/Gradle 子模块等效

问题描述 投票:0回答:1

动机: 我正在开发一些具有以下依赖关系树的 python 包库:

bootstrap_library
├── library_a
│   └── library_utils
├── library_b
│   └── library_utils
└── library_utils

每个库都有一个单独的项目和单独的

pyproject.toml
配置(以及诗歌)。快速开发的结果是,如果我必须在较低的依赖项中进行更改,我必须在其他库中重新安装该库的较新版本,在那里也进行更改,然后重复该过程。这加上诗歌和私人存储库缓慢的依赖解析时间非常乏味且耗时。

Maven/Gradle 项目遵循类似的结构:

project
├── module_client
│   ├── src
│   └── [pom.xml|build.gradle]
├── module_server
│   ├── src
│   └── [pom.xml|build.gradle]
├── module_core
│   ├── src
│   └── [pom.xml|build.gradle]
└── [pom.xml|build.gradle]

在项目内使用此结构模块可充当较小的子项目,并且可以依赖于同级模块。 版本也可以分享我的模块 像

mvn package
这样的构建命令将立即将所有子模块构建到单独的 jars/artifacts 中

我需要满足这些目标:

  • 一个提供子项目的Python项目
  • 一种依赖项目中存在的同级子项目的方法。
  • 构建项目,以便所有子项目轮子/发行版都构建在一起

是否有类似的方法使用

pyproject.toml
setup.cfg
设置 python 项目来实现这些目标? 如果没有,是否有任何工具可以支持/支撑此类项目?

python maven gradle pyproject.toml
1个回答
0
投票

考虑到您的要求,我认为这种替代方案可以满足所有要求:

  • Pantsbuild (https://www.pantsbuild.org/):在Python生态系统中提供了与maven/gradle类似的框架。它将允许您拥有一个多包存储库,并通过执行“pants package ::”来定义其中每个包以同时(构建阶段)生成相应的轮子。如果您的“monorepo”位于边缘,它还使您能够透明地依赖兄弟代码。它仅提供 linux/mac 支持,因此该工具本身无法使用 Windows 运行。
  • Poetry (https://python-poetry.org/):它允许通过 pyproject.toml 引用包之间的本地代码来实现 monorepo 结构(多个包)。它确实提供对 windows/macOs/Linux 的支持。 另一种较新的替代方案如下,它们非常相似并且具有不同的功能集,但都满足您的要求:
  • PDMhttps://pdm-project.org/en/latest/
  • 孵化https://hatch.pypa.io/latest/
  • 黑麦https://rye.astral.sh/
  • uvhttps://github.com/astral-sh/uv

根据您的喜好提供广泛支持的一个工具是 Polylith for python https://github.com/DavidVujic/python-polylith,它提供了一个满足您所有需求的框架,使用上面已经列出的底层工具。

© www.soinside.com 2019 - 2024. All rights reserved.