从特定提交的Pip安装提示"已满足要求"

Leo*_*rdo 6 python git pip virtualenv requirements.txt

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

git+ssh://git@github.com/myuser/mypackage.git#egg=mypackage
Run Code Online (Sandbox Code Playgroud)

由于我经常使用这个包,我需要重新安装它,但是: pip install -r requirements.txt让我回来

Requirement already satisfied (use --upgrade to upgrade)...
Run Code Online (Sandbox Code Playgroud)

对于具有新版本的requirements.txt中的所有包.

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

git+ssh://git@github.com/myuser/mypackage.git@733c5b616da27cba14478c24b#egg=mypackage
Run Code Online (Sandbox Code Playgroud)

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

Requirement already satisfied (use --upgrade to upgrade)..bla bla bla
Run Code Online (Sandbox Code Playgroud)

题:

  • 有没有办法使用requirements.txt文件可能升级特定的包mypackage
  • 我需要指定#egg=mypackage吗?

pra*_*nsg 5

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

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


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

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

pip install --upgrade requests
Run Code Online (Sandbox Code Playgroud)

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

pip install --upgrade git+ssh://git@github.com/myuser/mypackage.git#egg=mypackage
Run Code Online (Sandbox Code Playgroud)

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

requirements.txt

requests~=2.12.3
simplejson~=3.10.0
-r git_requirements.txt
Run Code Online (Sandbox Code Playgroud)

git_requirements.txt

git+ssh://git@github.com/myuser/mypackage.git#egg=mypackage
Run Code Online (Sandbox Code Playgroud)

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

alias pip_git_upgrade="pip install --upgrade -r git_requirements.txt"
Run Code Online (Sandbox Code Playgroud)

我需要指定#egg=mypackage吗?

引用pip的官方文档

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

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