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

时间:2014-05-19 10:58:31

标签: python git pip virtualenv requirements.txt

我使用piprequirements.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)...

for 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

2 个答案:

答案 0 :(得分:4)

您获得Requirement already satisfied的原因是,如果您未通过--upgrade-U(简写),则不会修改软件包(如果已安装)。

(该部分命令已进行了批次讨论。查看前4个问题here

有没有办法只使用requirements.txt文件升级特定包mypackage

在告诉升级时,您需要指定mypackage pip。如果只想更新请求,则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-aliases来减轻打字负担。

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

我是否需要指定#egg=mypackage

引用pip's official documentation

  

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

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

答案 1 :(得分:1)

如果您有需要在特定版本的依赖项,那么您应该在需求文件中修复它们以保持该版本。所以例如(虽然不现实):

mock~=2.0.0
pexpect==2.4.1
git+ssh://git@github.com/myuser/mypackage.git@733c5b616da27cba14478c24b#egg=mypackage
  • mock将更新为任何看起来像2.0。*的版本(通常在最小的数字中更改为错误修正,因此您通常需要这样做)
  • pexpect将修复为2.4.1
  • mypackage将尽可能随时更新。

如果您只想升级单个软件包,那么只需升级该软件包:

pip install -U git+ssh://git@github.com/myuser/mypackage.git

另一种选择,如果你想要定期升级所有这些,但比其他更常规的是分割需求文件。见the pip docs。我怀疑这需要pipsetuptools的最新版本(但是你还要定期更新那些,对吗?)。

例如,您可以:

update_regularly_reqs.txt

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

all_requirements.txt

-r update_regularly_reqs.txt
mock~=2.0.0
pexpect==2.4.1

编辑以在#egg=

上添加信息

如果您想使用pip检查它并且还编辑该包中的代码,则需要#egg=mypackage位,但是您需要使用:

-e git+ssh://...#egg=mypackage

pip然后会在您的virtualenv主目录的src目录中创建一个目录(使用cdvirtualenv查找它),或者至少它在我的系统上,将使用git clone检查代码(或者如果使用Mercurial或SVN则适用于这些代码),以便您可以在适当的位置进行编辑。

但是,如果你没有指定-e(正如你所做的那样),那么我认为它会将其作为普通包进行检查,如果你想要编辑它,你就很难管理它,然后你不需要#egg=位。

毫无疑问,还有很多配置选项......一个好的起点就是我链接的文档。