Python pip奇怪的包版本解析

时间:2015-01-15 06:11:23

标签: python pip

尝试安装特定版本的configparser软件包(3.3.0r2)时,我的pip行为非常奇怪。

可以请某人向我解释究竟发生了什么事吗?

谢谢!

Pip版本:6.0.6 Python:2.6 发行:Centos 6.5

以下是pip的日志:

pip -vvv install configparser == 3.3.0r2

Collecting configparser==3.3.0r2
  Getting page https://pypi.python.org/simple/configparser/
  URLs to search for versions for configparser==3.3.0r2:
  * https://pypi.python.org/simple/configparser/
  Getting page https://pypi.python.org/simple/configparser/
  Analyzing links from page https://pypi.python.org/simple/configparser/
    Found link https://pypi.python.org/packages/source/c/configparser/configparser-3.2.0r1.tar.gz#md5=49ff19dd5511b069285a293dd3907902 (from https://pypi.python.org/simple/configparser/), version: 3.2.0r1
    Found link https://pypi.python.org/packages/source/c/configparser/configparser-3.2.0r2.tar.gz#md5=ecdc31147658bd9340bcd605c1b7a849 (from https://pypi.python.org/simple/configparser/), version: 3.2.0r2
    Found link https://pypi.python.org/packages/source/c/configparser/configparser-3.2.0r3.tar.gz#md5=8500fd87c61ac0de328fc996fce69b96 (from https://pypi.python.org/simple/configparser/), version: 3.2.0r3
    Found link https://pypi.python.org/packages/source/c/configparser/configparser-3.3.0r1.tar.gz#md5=b6c6a9409be55966a4481f3a729070b3 (from https://pypi.python.org/simple/configparser/), version: 3.3.0r1
    Found link https://pypi.python.org/packages/source/c/configparser/configparser-3.3.0r2.tar.gz#md5=dda0e6a43e9d8767b36d10f1e6770f09 (from https://pypi.python.org/simple/configparser/), version: 3.3.0r2
    Found link https://pypi.python.org/packages/source/c/configparser/configparser-3.5.0b1.tar.gz#md5=d60ca2c714acb4adaf5818c6a1ffd78b (from https://pypi.python.org/simple/configparser/), version: 3.5.0b1
    Found link https://pypi.python.org/packages/source/c/configparser/configparser-3.5.0b2.tar.gz#md5=ad2a71db8bd9a017ed4735eac7acfa07 (from https://pypi.python.org/simple/configparser/), version: 3.5.0b2
  Could not find a version that satisfies the requirement configparser==3.3.0r2 (from versions: 3.2.0.post1, 3.2.0.post2, 3.2.0.post3, 3.3.0.post1, 3.3.0.post2, 3.5.0b1, 3.5.0b2)
  Cleaning up...
  No distributions matching the version for configparser==3.3.0r2
  Exception information:
  Traceback (most recent call last):
    File "/tmp/omnimw/lib/python2.6/site-packages/pip/basecommand.py", line 232, in main
      status = self.run(options, args)
    File "/tmp/omnimw/lib/python2.6/site-packages/pip/commands/install.py", line 339, in run
      requirement_set.prepare_files(finder)
    File "/tmp/omnimw/lib/python2.6/site-packages/pip/req/req_set.py", line 333, in prepare_files
      upgrade=self.upgrade,
    File "/tmp/omnimw/lib/python2.6/site-packages/pip/index.py", line 490, in find_requirement
      'No distributions matching the version for %s' % req
  DistributionNotFound: No distributions matching the version for configparser==3.3.0r2

UPD:获得更令人惊讶的行为,尝试使用pip 1.4.1安装此软件包:

# pip install configparser==3.3.0r2

Downloading/unpacking configparser==3.3.0r2
  Could not find a version that satisfies the requirement configparser==**3.3.0r2** (from versions: 3.2.0r1, 3.2.0r2, 3.2.0r3, 3.3.0r1, **3.3.0r2**, 3.5.0b1, 3.5.0b2)
Cleaning up...
No distributions matching the version for configparser==3.3.0r2

1 个答案:

答案 0 :(得分:0)

版本3.3.0r2已标准化(根据PEP 440)到版本3.3.0.post2,您可以自行使用packaging包检查:

>>> from packaging.version import Version, parse
>>> parse('3.3.0r2')
<Version('3.3.0.post2')>
>>> Version('3.3.0r2') == Version('3.3.0.post2')
True

从日志中可以看出,pip只规范了可用的版本,但没有规定的版本,后来打破了比较,这显然是pip中的错误。
它已在pip的7.1.1版本中修复,可能在发行说明的以下条目中有所描述:

  

规范化rev / r前缀的释放后拼写。

相关问题