我正在编写一个Python应用程序。它需要特定版本的Python和PyPI上可用的某些第三方依赖项。它还取决于我在私有Git存储库中拥有的私有Python库。我想依赖特定的Git标签。我需要能够在本地计算机(我可以通过git访问git存储库)和CI服务器(我可以使用用户名和密码通过HTTPS访问git存储库)上启动该环境。我正在努力以适用于两种情况的方式设置我的Pipfile。
我尝试使用SSH URL指定URL依赖关系,然后在仅具有HTTPS访问权限的CI机器上,尝试首先通过https直接将库安装到虚拟环境中。问题在于整个URL(包括协议)都存储在Pipfile.lock中(当将现有安装与新安装进行比较时,整个URL会由pip检查)。
pipenv从ssh安装依赖项:
$ pipenv install -e git+ssh://git@git.domain.com/my-private-lib@v0.1#egg=my-private-lib
当然,如果我尝试仅在CI机器上同步,它将失败:
$ git clone my-project
$ cd my-project
$ pipenv sync
# Warning: Your dependencies could not be resolved.
在运行pipenv之前尝试使用https安装:
$ git clone my-project
$ cd my-project
$ virtualenv venv
$ source venv/bin/activate
$ pip install my-private-repo @ git+https://my_user:my_token@git.domain.com/my-private-lib@v0.1
$ deactivate
$ pipenv sync
但这仍然会告诉我它无法到达ssh://git@git.domain ...
我很清楚pipenv的目的是用具体的来源指定具体的依赖关系。就我而言,两台计算机之间的来源略有不同。有没有办法解决?也许是一种关闭精确URL检查并仅检查git哈希的方法吗?