从特定提交进行的Pip安装会提示“已满足要求”


问题内容

我正在使用pip和一个requirements.txt文件来处理我的virtualenv中的python包。我有一个从Github安装的特定软件包,因此在我的文件中有:

git+ssh://git@github.com/myuser/mypackage.git#egg=mypackage

由于我经常使用该软件包,因此我需要重新安装它,但是: pip install -r requirements.txt将我还给我

Requirement already satisfied (use --upgrade to upgrade)...

适用于requirements.txt中所有具有新版本的软件包。

如果我运行pip install -r requirements.txt --upgrade它,它将尝试升级我的 所有 软件包(我
想要),但是我只想升级mypackage。在requirements.txt中,我尝试添加特定的提交,如下所示:

git+ssh://git@github.com/myuser/mypackage.git@733c5b616da27cba14478c24b#egg=mypackage

但是当我再次运行pip时会抛出:

Requirement already satisfied (use --upgrade to upgrade)..bla bla bla

题:

  • 有没有一种方法可以使用requirements.txt文件 升级特定软件包mypackage
  • 我需要指定#egg=mypackage吗?

问题答案:

之所以会这样,Requirement already satisfied是因为如果您未通过--upgrade-U(简写),则该软件包(如果已安装)不会被修改。

(命令的这一部分进行了 很多
讨论。在此处查看前4个问题)


有没有一种方法mypackage可以使用requirements.txt文件仅升级特定软件包?

mypackage告诉它升级时,您只需要指定点子即可。如果只想更新请求,则pip命令为:

pip install --upgrade requests

同样,要从git存储库更新,您需要执行以下操作:

pip install --upgrade git+ssh://git@github.com/myuser/mypackage.git#egg=mypackage

由于这是一个URL很长,因此我建议您按照@daphtdazz的建议进行操作,请使用多个需求文件,如下所示:

requirements.txt

requests~=2.12.3
simplejson~=3.10.0
-r git_requirements.txt

git_requirements.txt

git+ssh://git@github.com/myuser/mypackage.git#egg=mypackage

另外,我建议您对shell使用shell别名以减轻键入负担。

alias pip_git_upgrade="pip install --upgrade -r git_requirements.txt"

我需要指定#egg=mypackage吗?

引用pip的官方文档

任何URL都可以使用#egg = name语法来明确声明项目名称。

基本上,使用#egg=mypackage是个好主意,因为您要使项目名称明确。