【问题标题】:Pip doesn't install latest available version from pypi (argparse in this case)Pip 不会从 pypi 安装最新的可用版本(在这种情况下为 argparse)
【发布时间】:2014-03-19 02:04:56
【问题描述】:

问题

我最近在一些 python 项目上工作,遇到了很多问题,pip 没有安装某些要求的最新版本。我在osx 并且我使用brew 安装Python 2.7.6。在我正在进行的项目中,我们只需安装如下要求:

pip install -r requirements.txt

在当前情况下,我需要安装argparse==1.2.1。这是on the pypi website显示的实际最新版本@

这是我的输出

Downloading/unpacking argparse==1.2.1 (from -r requirements.txt (line 4))
Could not find a version that satisfies the requirement argparse==1.2.1 (from -r requirements.txt (line 4)) (from versions: 0.1.0, 0.2.0, 0.3.0, 0.4.0, 0.5.0, 0.6.0, 0.7.0, 0.8.0, 0.9.0, 0.9.1, 1.0.1, 1.0, 1.1)
Some externally hosted files were ignored (use --allow-external to allow).
Cleaning up...
No distributions matching the version for argparse==1.2.1 (from -r requirements.txt (line 4))

我在不同类型的需求方面遇到了类似的问题,例如 matplotlib,我手动安装了 here

如您所见,我的 mac 上的 pip 只有那些 argparse 版本:0.1.0, 0.2.0, 0.3.0, 0.4.0, 0.5.0, 0.6.0, 0.7.0, 0.8.0, 0.9.0, 0.9.1, 1.0.1, 1.0, 1.1

尝试修复

我尝试使用brew reinstall python 重新安装python,然后还尝试使用一些xargs 重新安装所有已安装的python 包magic

pip freeze | xargs -I {} pip install {} --upgrade --force-reinstall

在尝试重新安装所有内容时,我遇到了大多数软件包的问题:error: invalid command 'egg_info'。我发现我有一个旧的setuptools,所以我运行它来升级:

pip install --upgrade setuptools

我现在可以重新安装所有内容,但 argparse 仍然存在同样的问题。

我问一个新安装 osx 的朋友到 pip install argparse,他得到了 1.1 所以我设置了一个 precise32 vagrant box 以使用 python-dev + libevent-dev 进行干净的 ubuntu 安装并且没有安装argparse==1.2.1的麻烦。

解决方法

为了继续开展该项目,我在 macOS 上安装了 argparse 1.1,目前它似乎可以正常工作。

问题

  1. 有什么原因我没有在 pypi 上显示最新版本吗?
    听起来并不是 pypi 上的所有库都可用于 osx。

  2. 有没有办法知道不同操作系统的版本可用性?

编辑:内部解决方案

argparse 1.1 似乎与 1.2.1 相同,如此输出所示

vagrant@precise32:~$ python
Python 2.7.3 (default, Sep 26 2013, 20:08:41)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import argparse
>>> argparse.__version__
'1.1'
>>> quit()
vagrant@precise32:~$ pip freeze | grep argparse
argparse==1.2.1

我尝试在 osx 上使用--allow-external,并且需要将要求放在之后 --allow-external 标志,而不是之前。这是安装argparse 并允许使用pip 用于Python2.7 的外部托管文件的有效命令:

pip install --allow-external argparse --upgrade
argparse an externally hosted file and may be unreliable
Downloading/unpacking argparse from http://argparse.googlecode.com/files/argparse-1.2.1.tar.gz#md5=2fbef8cb61e506c706957ab6e135840c
  Downloading argparse-1.2.1.tar.gz (69kB): 69kB downloaded

正如彼得所指出的,最新版本的 pip default to disallowing externally hosted files。 ????

【问题讨论】:

  • pip install -vv --no-install argparse 说什么?
  • argparsePython2.7 的标准配置。虽然pypy 的版本号是1.2.1,但它的最后一次更改日期是2011 年。因此它不早于最新的Python 版本。
  • @hpaulj my argparse.__version__ 在 Python 2.7.6 中返回 '1.1',但不确定这是否是相同的版本号
  • 别担心1.1。由于它是标准库的一部分,因此该数字不再变化。
  • @PeterGibson pip install -vv --no-install argparse 说:DEPRECATION: '--no-install' and '--no-download are deprecated. See https://github.com/pypa/pip/issues/906. Requirement already satisfied (use --upgrade to upgrade): argparse in /usr/local/lib/python2.7/site-packages 我用 vagrant 测试过,甚至认为安装的 argparse 版本是 1.2.1,argparse.__version__ 返回 1.1

标签: python macos pip argparse pypi


【解决方案1】:

这是我使用 pip 1.5.4 安装 argparse 的命令:

pip install --allow-all-external argparse==1.2.1

【讨论】:

  • 那么生成的argparse 文件与标准文件(2.7+)有什么不同吗?
【解决方案2】:

我认为这行是关键:

一些外部托管的文件被忽略(使用 --allow-external 来允许)。

当我在这里安装 argparse 时,我得到了

您正在安装一个外部托管的文件。未来版本的 pip 将默认禁止外部托管文件。

正在下载 argparse-1.2.1.tar.gz (69kB):已下载 69kB

所以你有一个更新版本的 pip,默认情况下不允许外部托管文件

【讨论】:

  • 我正在使用最新版本的 pip:pip 1.5.2 from /usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-1.5.2-py2.7.egg (python 2.7) 确实,我总是收到 --allow-external 消息。我猜一些开发人员需要将他们的源代码转移到 pypi
猜你喜欢
  • 2020-04-22
  • 2015-08-19
  • 2018-10-23
  • 2011-06-14
  • 2018-06-18
  • 2018-12-29
  • 2015-09-01
  • 1970-01-01
  • 2011-06-04
相关资源
最近更新 更多