当使用特定的SVN版本时,PIP总是重新安装软件包

8

当指定了特定的SVN修订版本时,PIP始终会下载并安装包(这会显著减慢同步过程)。

有没有什么方法可以解决这个问题?通常,pip会检测到包已经安装在环境中,并提示使用--upgrade

我的pip_requirements文件有以下行:

svn+http://code.djangoproject.com/svn/django/trunk/@16406#egg=Django1.4A

感谢您的帮助!

回答

  • 必须将egg名称指定为精确的Python包名称。
  • 不能使用-e标志。
  • 不适用于PIP版本0.7,适用于1.0.2
1个回答

3
我上周末正在研究pip,我相信我已经找到了你的pip问题的解释。问题只是pip本身的限制。由于安装过程的工作方式,#egg=[egg-name]部分必须正确命名为setup.py中的name kwarg所识别的实际项目名称(这是在PyPI上已知的名称)。

简短回答

你的代码行:

svn+http://code.djangoproject.com/svn/django/trunk/@16406#egg=Django1.4A

应该是:

svn+http://code.djangoproject.com/svn/django/trunk/@16406#egg=django

长答案

根据我的理解(如果我错了,请Ian Bicking批评我 :-P),安装过程实际上包括以下步骤:

  1. 根据 vcs+[url] 结构,确定链接指向的是已知的版本控制系统。
  2. 将代码检出到您的环境中的临时目录。
  3. 运行 setup.py(我认为同时运行 egg_info 和 install)。
  4. 从文件系统中删除已检出代码的临时目录。

因此,一旦第三步完成并安装了您检出的源代码,pip 将其识别为 django(不区分大小写)。但是,如果保留当前的 requirements 行,则 pip 将搜索 Django1.4A。当找不到匹配该名称的软件包时,它会再次检出源代码并尝试安装。


非常感谢您的答复!正如您所说的那样 - 我更改了egg名称并且pip正确地检测到了一个最新的软件包。您是如何找到这个问题的? :) 这是我第一次得到解答一个老问题。再次感谢! - Yuji 'Tomita' Tomita
我一直想在SO上回答问题,但一直太懒了,所以我开始寻找未回答的问题(有点像新年决心)。然后,我随机找到了你的问题,并且对这个主题有一些了解。很高兴能帮到你 :-) 顺便说一句,我不是跟踪者,但是看到你来自波特兰!那是我的家乡!(好了,就这样 :-D) - ravenac95
1
哦,-e标志总是更新存储库。这只是该功能执行其预期操作。您使用virtualenv来管理项目吗? - ravenac95
我pip_requirements中需要修复的只剩下git+hg+,所以如果您有更多见解,我在这里发布了一个新问题:http://stackoverflow.com/questions/8825297/pip-hg-and-git-always-downloads-package-instead-of-detecting-satisfied-require。你也是波特兰人?世界真小 - 我明天要见一个我在github上认识的人!如果你来城里,请告诉我:) 再次感谢。 - Yuji 'Tomita' Tomita

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接