我正在尝试安装一个私有依赖项(这不是 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>'
]
在官方文档中,他们并没有详细解释该URL的格式是什么,不过在使用@
之后加上<COMMIT_ID
听起来很合理(因为其他语言和依赖管理工具也是这样做的)。
当执行命令python setup.py install
时,我在日志/输出中看到了以下内容:
Reading https://gitlab.com/<PRIVATE_ORG>/<PRIVATE_REPO>.git@<COMMIT_ID>
但是从其他依赖项的日志/输出中可以看出,我没有看到该软件包被实际安装。
我知道我的git命令有有效的GitLab访问令牌设置,因为我运行了这个命令:
git config \
--global \
url."https://<ACCESS_TOKEN_NAME>:<ACCESS_TOKEN_VALUE>@gitlab.com".insteadOf \
"https://gitlab.com"
我可以通过以下命令检查 git
的配置信息:
git config --list | grep gitlab
url.https://<ACCESS_TOKEN_NAME>:<ACCESS_TOKEN_VALUE>@gitlab.com.insteadof=https://gitlab.com
- 在运行
setup.py
时,Python是否使用git
命令? - 我如何在Python的
setup.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>",
...
],
然而,当执行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>')
我尝试使用 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
这个解决方案似乎只在包含
setup.py
的目录中使用pip install .
时才有效。但是,这不适用于python setup.py install --record installed_files.txt
。
pip install .
时有效。我想接受这个答案,但您能否请提一下pip install .
和python setup.py install --record installed_files.txt
之间的区别,以及为什么第二种方法会失败。再次感谢。 - TPPZpip
会显示“要求已满足”。我必须手动先运行pip uninstall -y package_name
以确保pip
然后拉取具有预期提交ID的版本。 - TPPZmaster
分支(每次pip install
使用时不同的提交)还是确切的一个提交(与分支无关)? - phdpip install
时,主分支所指向的提交。 - Luk Aron