[英]Python pip weird package version parsing
嘗試安裝特定版本的configparser軟件包(3.3.0r2)時,我得到了非常奇怪的pip行為。
能否請人向我解釋到底發生了什么?
謝謝!
點子版本:6.0.6 Python:2.6版本:Centos 6.5
以下是pip的日志:
pip -vvv安裝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
將3.3.0r2
版本標准化(根據PEP 440)為3.3.0.post2
版本,您可以自己使用打包軟件包進行檢查:
>>> 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前綴的發布后拼寫標准化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.