我有一个heroku项目,它正在尝试使用pip install -r requirements.txt
安装Django reusable app(这不是来自官方heroku/python
buildpack的确切命令,但实际上是在这样做)。
问题是我的Django可重用应用本身有一个来自Github公共存储库的要求。
pip install dependency links中的一些答案指向:
- 依赖链接语法being not compatible with pip 19
- 新语法(即
package @ git+protocol://...
)当然与较早版本的pip不兼容。
我的Django项目可以通过不同的方式进行部署:Heroku,本地,Docker(开发和生产)。这些部署方法大多数都具有最新版本的pip。
Heroku的python buildpack具有Pip 9.0.2
我的其他部署方法都具有Pip 19,因此它们在读取需求的方式上不兼容,因此我无法同时使用这两种方法。
对于较早版本的pip,我使用setup.py
:
setup(
# [...]
install_requires=[
"my_package == x.y.z"
],dependency_links=["git+https://github.com/account/package/tarball/master#egg=my_package-x.y.z"]
)
对于第19点,我会这样做:
setup(
# [...]
install_requires=[
"my_package @ git+https://github.com/company/package.git"
],)
我试图分叉仓库,只是将版本增加到pip的最新版本。它确实起作用,除了pip-diff中的错误似乎对构建没有影响之外。
有趣的是,由于buildpack具有高速缓存系统,因此在需要较新版本的库之前,您通常只会注意到此问题一次。但这是例如评论应用程序的问题。
那么这里的解决方案是什么?我可以:
- 将所有其他部署方法降级为可使用依赖项链接的较早版本的pip,包括我的所有本地开发人员设置
- 使用heroku的python buildpack的分叉版本,并带有更新的pip(尽管pip-diff需要修复)
- 从github删除依赖项,并在项目存储库级别(而不是可重用的应用程序级别)添加这些依赖项。
- 将PR提交给官方仓库,以便点数可以升级
这就是我能想到的。解决方案1.和2.真的不好,恕我直言,3.甚至更糟,并且4.可能需要一些时间,而我实在负担不起。
还有更好的主意吗?