Heroku Django设置install_requires from github

我有一个heroku项目,它正在尝试使用pip install -r requirements.txt安装Django reusable app(这不是来自官方heroku/python buildpack的确切命令,但实际上是在这样做)。

问题是我的Django可重用应用本身有一个来自Github公共存储库的要求。

pip install dependency links中的一些答案指向:

我的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具有高速缓存系统,因此在需要较新版本的库之前,您通常只会注意到此问题一次。但这是例如评论应用程序的问题。

那么这里的解决方案是什么?我可以:

  1. 将所有其他部署方法降级为可使用依赖项链接的较早版本的pip,包括我的所有本地开发人员设置
  2. 使用heroku的python buildpack的分叉版本,并带有更新的pip(尽管pip-diff需要修复)
  3. 从github删除依赖项,并在项目存储库级别(而不是可重用的应用程序级别)添加这些依赖项。
  4. 将PR提交给官方仓库,以便点数可以升级

这就是我能想到的。解决方案1.和2.真的不好,恕我直言,3.甚至更糟,并且4.可能需要一些时间,而我实在负担不起。

还有更好的主意吗?

cwal10 回答:Heroku Django设置install_requires from github

pip 表示法与 setuptools 表示法不同。没有立即更改安装脚本的理由。 install_requiresdependency_links在第一个版本中看起来还不错,如果以前能正常工作的话,可能实际上是可行的。

现在,的确是 pip 的较新版本根本没有考虑 setuptools dependency_links。因此,可以将这些自定义依赖项链接添加到requirements.txt文件中(当然使用 pip 表示法)。

此外,您可以选择完全删除安装脚本中的dependency_links参数,以避免重复。

,

我不知道这是否是正确的答案,但我使用了this workaround

因此基本上,我在setup.py中添加了一个函数并调用它:

def install_github_package(github_url):
    try:
        import github_url
        # ... do some version checking ...
    except (ModuleNotFoundError,ImportError):
        if '--user' in sys.argv:
            subprocess.run([sys.executable,'-m','pip','install','--upgrade','--user',github_url],check=False)
        else:
            subprocess.run([sys.executable,check=False)

install_github_package("git+https://github.com/company/package.git")
本文链接:https://www.f2er.com/3123351.html

大家都在问