从 GitLab 的包注册表中列出一个包作为包元数据中的依赖项

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

上下文

我目前有 2 个私有存储库,每个存储库都包含一个 python 包。例如:pkg_a, pkg_b

pkg_b 需要 pkg_a 在他的 requirements.txt 和 setup.py 文件中才能工作。

环境
  • Windows 10
  • 蟒蛇 3.9.0
  • 点子 23.0.1

我的问题

我无法将 pkg_b 与私有包 pkg_a 打包为依赖项,因为 pkg_b 的 setup.py 中的 install_requires 不喜欢我的 requirements.txt 格式:

requirements.txt (pkg_b)

matplotlib==3.5.2
numpy==1.21.6
--extra-index-url https://__token__:<token>@gitlab.com/api/v4/projects/<project>/packages/pypi/simple
pkg_a

setup.py (pkg_b)

def load_requirements(file_name):
    with open(file_name) as fp:
        reqs = filter(None, (parse_req_line(line) for line in fp))
        return list(reqs)

setup(
    name='pkg_b',
    version="1.0.0",
    packages=find_packages(),
    install_requires=install_requires,
    ...
)

安装pkg_b

python .\setup.py install

输出

error in pkg_b setup command: 'install_requires' must be a string or list of strings containing valid project/version requirement specifiers; Parse error at "'--extra-'": Expected W:(abcd...)

(这是预期的,因为 load_requirements() 不处理 --extra-index-url)

什么有效

在虚拟环境中从 requirements.txt 安装 pkg_a

电源外壳

python -m venv venv
.\venv\Scripts\activate
python -m pip install --upgrade pip
python -m pip install --no-input -r .\requirements.txt

点列表

...
matplotlib      3.5.2
numpy           1.21.6
pkg_a           1.0.0
...

当我运行导入 pkg_apkg_b

python 脚本时,一切正常

我试过的

  • 使用 pip 的 VCS 支持 用于 git (不起作用,因为我正在使用包注册表)
  • 像建议的那样使用 .pypirc here
  • 使用 setup.py 的 dependency_links 或像建议的那样设置不同的配置文件here

有用的文档

有人说这不是不可能,有人说是,但我找不到可行的解决方案。让我们团结起来寻找答案:)

gitlab setuptools setup.py python-packaging requirements.txt
1个回答
1
投票

不可能将这样的

requirements.txt
内容放入包元数据中。从技术上和概念上讲,包元数据不能包含
--extra-index-url
和其他类似的东西。

我推荐你读这个:

install_requires
脚本的
setuptools.setup()
函数调用的
setup.py
参数中,您应该简单地列出
pkg_a
作为一个abstract依赖需求。有关此依赖项的更多具体细节不属于包元数据,它们不属于
install_requires
。就这么简单。

我还推荐阅读这些:


您可以做的是指示代码的用户直接从包含更具体的依赖项要求的

requirements.txt
文件进行安装。例如在你的文档中,你可以通过这样的命令给出安装的建议:

python -m pip install https://host.dev/path/to/requirements.txt
© www.soinside.com 2019 - 2024. All rights reserved.