从单体库安装Python包

7
我们有一个私有的git monorepo,其中托管了许多Python包。最初为该项目选择了Poetry作为依赖项管理工具。然而,由于this Poetry issue,涉及创建新的setup.py文件的解决方案将不被接受。
一个简化版本的结构:
git-monorepo
├── pkg-1
│   ├── pkg
│   │   └── mod1.py
│   └── pyproject.toml
├── pkg-2
│   ├── pkg
│   │   └── mod2.py
│   └── pyproject.toml
└── lib
    ├── pkg
    │   └── lib.py
    └── pyproject.toml

库分发包lib是独立于任何其他包的。然而,pkg-1依赖于libpkg-2依赖于pkg-1lib

因此,问题是:

如何使用pip从这个单体库安装包?

让我们以安装pkg-1为例,其中pkg-1/pyproject.toml包括以下行:

...

[tool.poetry.dependencies]
lib = {path = "../lib/"}

...

版本控制系统支持文档中所解释的,运行pip的结果如下:
$ pip install -e git+https://gitlab.com/my-account/git-monorepo#"egg=pkg-1&subdirectory=pkg-1"

Traceback (most recent call last):
  File "/home/hblanco/.local/lib/python3.8/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3101, in __init__
    super(Requirement, self).__init__(requirement_string)
  File "/home/hblanco/.local/lib/python3.8/site-packages/pip/_vendor/packaging/requirements.py", line 115, in __init__
    raise InvalidRequirement("Invalid URL: {0}".format(req.url))
pip._vendor.packaging.requirements.InvalidRequirement: Invalid URL: ../lib
1个回答

0
在上述设置中的问题是依赖项被指定为路径依赖项。在安装时,它使用该路径依赖项。我在一个Python monorepo中遇到了同样的问题,我想将这些包也分享给其他项目。我发现有两种方法适合我:
  1. 在CI/CD构建流水线中,在创建轮子之前编辑pyproject.toml(发布到pypi repo)
  2. 首先创建轮子(或.tar.gz)工件,然后在之后进行修改(通过提取它,替换路径依赖项,然后再次压缩它)。
我在这里解释了完整的方法。
但是,它不能与git+https://..一起使用。
您需要在某个地方拥有(私有)pypi repo。Gitlab为每个项目提供了一个,我在演示项目这里中利用了它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接