Python setup.py - 强制更新依赖项(使用dependency_link)

5 投票
1 回答
956 浏览
提问于 2025-04-18 00:30

假设我有一个叫做 myproject 的 Python 项目,它依赖于 mydependency。这两个项目都是我自己维护的。

我该如何为 myproject 创建一个 setup.py 文件,以便它总是尝试安装 mydependency 的新版本,不管之前安装的是哪个版本?

假设我已经为这个项目写了一个 setup.py,内容是:

setup(
    ...
    install_requires=['mydependency'],
    dependency_links = ['url_to_mydependecy_repo@develop#egg=mydependency'],
    ....
)

问题是,当第二次运行安装时,mydependency 已经被安装了,所以安装程序不会去获取代码库,也不会尝试安装更新的版本。因为 mydependency 还在积极开发中(也是我在做),我需要确保 myproject 的安装总是能获取到依赖的链接。

我尝试过在依赖链接中使用 #egg=mydependency-dev,并在 install_requires 中写 'mydependency==dev',同时在 mydependency 的 setup.py 中设置 version='dev',但在第二次安装时,'dev' 已经存在了,所以它不会再被获取。

使用 myproject 的 requirements.txt 文件,内容和 dependency_links 一样,结果也是一样的。在后续的安装中,需求已经满足了,所以不会再被获取。

注意:使用 pip -r requirements.txt --upgrade 可以实现我想要的效果,但我并不是手动安装,而是通过 Openshift 来安装,所以我不能真的加上 --upgrade

1 个回答

1

尝试将myproject的依赖项链接到mydependency的开发版本,就像你之前尝试过的那样,但要在你的mydependency代码库中使用一个“有效的”版本(可以参考semver)。也就是说,不要将版本设置为dev。这样会导致重新下载和重新安装依赖项(在我的情况下,这样做是有效的):

setup(
    ...
    install_requires=['mydependency == dev'],
    dependency_links = ['url_to_mydependecy_repo@develop#egg=mydependency-dev'],
    ....
)

撰写回答