从特定提交进行的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
是个好主意,因为您要使项目名称明确。