Python setup.py 与 GitLab 上的私有存储库作为基于提交 ID 的dependency_links

TPP*_*PPZ 2 python git dependencies setup.py gitlab

我正在尝试安装一个私有依赖项(不是 Python 可以在 PyPI 上找到的东西)。

我已setup.py将此添加到文件中(如下所述:https : //python-packaging.readthedocs.io/en/latest/dependencies.html#packages-not-on-pypi):

dependency_links = [
        'https://gitlab.com/<PRIVATE_ORG>/<PRIVATE_REPO>.git@<COMMIT_ID>'
      ]
Run Code Online (Sandbox Code Playgroud)

在该官方文档中,他们并没有真正详细解释该 URL 的格式,但是在<COMMIT_ID后面使用 a@听起来很合理(因为它在各种其他语言和依赖项管理工具中都是这样做的)。

执行命令时,python setup.py install我在日志/输出中看到:

Reading https://gitlab.com/<PRIVATE_ORG>/<PRIVATE_REPO>.git@<COMMIT_ID>
Run Code Online (Sandbox Code Playgroud)

但是后来我没有看到该软件包被实际安装,正如我从其他依赖项的日志/输出中看到的那样。

我知道我的git命令有一个有效的 GitLab 访问令牌设置,因为我已经运行了这个:

Reading https://gitlab.com/<PRIVATE_ORG>/<PRIVATE_REPO>.git@<COMMIT_ID>
Run Code Online (Sandbox Code Playgroud)

我可以在检查git配置时看到它:

git config \
      --global \
      url."https://<ACCESS_TOKEN_NAME>:<ACCESS_TOKEN_VALUE>@gitlab.com".insteadOf \
      "https://gitlab.com"
Run Code Online (Sandbox Code Playgroud)
  • Pythongit在运行时是否使用该命令setup.py
  • 如何在 Pythonsetup.py文件中指定私有 GitLab 依赖项?它应该基于提交 ID 而不是包版本
  • 以上有什么问题吗?
  • 我也有这样的感觉,当使用pip install和定位setup.py而不是运行时python setup.py install,这可能会以不同的方式运行,是否有一种独特的方法可以使这两种风格的 Python 安装都能正常工作?我问这个是因为在摆弄时dependency_links我正在尝试各种不同的东西,比如git+ssh代替https和其他变体,所有这些都无法安装带有各种日志/输出的私有存储库,说没有找到存储库。

编辑

我已经避免了,dependency_links因为它似乎已被弃用,所以我使用了答案中提出的解决方案:

install_requires=[
    ...
    "mylibraryname @ git+https://<ACCESS_TOKEN_NAME>:<ACCESS_TOKEN_VALUE>@gitlab.com/<PRIVATE_ORG>/<PRIVATE_REPO>.git@<COMMIT_ID>",
    ...
],
Run Code Online (Sandbox Code Playgroud)

但是,在执行时python setup.py install --record installed_files.txt,安装失败并显示以下消息:

Searching for mylibraryname@ git+https://<ACCESS_TOKEN_NAME>:<ACCESS_TOKEN_VALUE>@gitlab.com/<PRIVATE_ORG>/<PRIVATE_REPO>.git@<COMMIT_ID>
Reading https://pypi.org/simple/mylibraryname/
Couldn't find index page for 'mylibraryname' (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading https://pypi.org/simple/
No local packages or working download links found for mylibraryname@ git+https://<ACCESS_TOKEN_NAME>:<ACCESS_TOKEN_VALUE>@gitlab.com/<PRIVATE_ORG>/<PRIVATE_REPO>.git@<COMMIT_ID>
error: Could not find suitable distribution for Requirement.parse('mylibraryname@ git+https://<ACCESS_TOKEN_NAME>:<ACCESS_TOKEN_VALUE>@gitlab.com/<PRIVATE_ORG>/<PRIVATE_REPO>.git@<COMMIT_ID>')
Run Code Online (Sandbox Code Playgroud)

所以我尝试使用pip install .假设setup.py当前目录中有一个文件,这有效:

Collecting mylibraryname@ git+https://<ACCESS_TOKEN_NAME>:<ACCESS_TOKEN_VALUE>@gitlab.com/<PRIVATE_ORG>/<PRIVATE_REPO>.git@<COMMIT_ID> from git+https://<ACCESS_TOKEN_NAME>:****@gitlab.com/<PRIVATE_ORG>/<PRIVATE_REPO>.git@<COMMIT_ID> (from <MY_LIBRARY_WITH_SETUP_PY>==<MY_LIBRARY_VERSION>)
  Cloning https://<ACCESS_TOKEN_NAME>:****@gitlab.com/<PRIVATE_ORG>/<PRIVATE_REPO>.git (to revision <COMMIT_ID>) to /tmp/pip-install-bakazwe2/mylibraryname
  Running command git clone -q https://<ACCESS_TOKEN_NAME>:sYzRKNsYAnv5GtS6zLZj@gitlab.com/<PRIVATE_ORG>/<PRIVATE_REPO>.git /tmp/pip-install-bakazwe2/mylibraryname
Run Code Online (Sandbox Code Playgroud)

此解决方案似乎仅在pip install .包含setup.py. 这不适用于python setup.py install --record installed_files.txt.

phd*_*phd 5

https://python-packaging.readthedocs.io/已经很旧而且过时了。它的来源最后一次更新是在 2016 年 12 月 29 日,其中大部分内容自 2012 年以来没有更新。自那时以来,Python 包装格局发生了重大变化。新文档位于https://packaging.python.org/

dependency_links被宣布过时并最终在19.0 中删除pipinstall_requires用特殊语法替换它(自pip19.1起支持):

install_requires=[
    'package_name @ git+https://gitlab.com/<PRIVATE_ORG>/<PRIVATE_REPO>.git@<COMMIT_ID>'
]
Run Code Online (Sandbox Code Playgroud)

请参阅https://pip.readthedocs.io/en/stable/reference/pip_install/#requirement-specifiershttps://www.python.org/dev/peps/pep-0440/#direct-references

这需要pip install包括pip install .并且不适用于python setup.py install.