鉴于可以使用pip和virtualenv安装的Python(2.X)包的名称,有没有办法找到pip可以安装的所有可能版本的列表?现在它是试验和错误.
我正在尝试为第三方库安装一个版本,但最新版本太新了,进行了向后不兼容的更改.所以我想以某种方式列出pip知道的所有版本,以便我可以测试它们.
Chr*_*aro 700
对于pip> = 9.0使用
$ pip install pylibmc==
Collecting pylibmc==
Could not find a version that satisfies the requirement pylibmc== (from
versions: 0.2, 0.3, 0.4, 0.5.1, 0.5.2, 0.5.3, 0.5.4, 0.5.5, 0.5, 0.6.1, 0.6,
0.7.1, 0.7.2, 0.7.3, 0.7.4, 0.7, 0.8.1, 0.8.2, 0.8, 0.9.1, 0.9.2, 0.9,
1.0-alpha, 1.0-beta, 1.0, 1.1.1, 1.1, 1.2.0, 1.2.1, 1.2.2, 1.2.3, 1.3.0)
No matching distribution found for pylibmc==
Run Code Online (Sandbox Code Playgroud)
- 将打印所有可用版本,而无需实际下载或安装任何其他软件包.
对于pip <9.0使用
pip install pylibmc==blork
Run Code Online (Sandbox Code Playgroud)
where blork可以是任何不太可能是安装候选的字符串.
m00*_*000 154
pastebin上的脚本确实有效.但是,如果您使用多个环境/主机,则不太方便,因为您每次都必须复制/创建它.
一个更好的全方位解决方案是使用yolk,可以用pip安装.例如,看看哪些版本的Django可用:
$ pip install yolk3k
$ yolk -V django
Django 1.3
Django 1.2.5
Django 1.2.4
Django 1.2.3
Django 1.2.2
Django 1.2.1
Django 1.2
Django 1.1.4
Django 1.1.3
Django 1.1.2
Django 1.0.4
Run Code Online (Sandbox Code Playgroud)
一个小小的警告:蛋黄取决于分发.这不是一件坏事,但如果您因某些原因需要坚持使用(已弃用的)python setuptools,则可能会出现问题.
注意:我没有参与蛋黄的开发.如果某些东西看起来不能正常工作,那么在这里发表评论应该没有多大区别.如果可能,请使用yolk问题跟踪器并考虑提交修复程序.
HVN*_*ing 70
更新:
截至2017年9月,此方法不再有效:--no-install已在第7点删除
使用pip install -v,您可以看到所有可用的版本
root@node7:~# pip install web.py -v
Downloading/unpacking web.py
Using version 0.37 (newest of versions: 0.37, 0.36, 0.35, 0.34, 0.33, 0.33, 0.32, 0.31, 0.22, 0.2)
Downloading web.py-0.37.tar.gz (90Kb): 90Kb downloaded
Running setup.py egg_info for package web.py
running egg_info
creating pip-egg-info/web.py.egg-info
Run Code Online (Sandbox Code Playgroud)
要不安装任何软件包,请使用以下解决方案之一:
root@node7:~# pip install --no-deps --no-install flask -v
Downloading/unpacking flask
Using version 0.10.1 (newest of versions: 0.10.1, 0.10, 0.9, 0.8.1, 0.8, 0.7.2, 0.7.1, 0.7, 0.6.1, 0.6, 0.5.2, 0.5.1, 0.5, 0.4, 0.3.1, 0.3, 0.2, 0.1)
Downloading Flask-0.10.1.tar.gz (544Kb): 544Kb downloaded
Run Code Online (Sandbox Code Playgroud)
要么
root@node7:~# cd $(mktemp -d)
root@node7:/tmp/tmp.c6H99cWD0g# pip install flask -d . -v
Downloading/unpacking flask
Using version 0.10.1 (newest of versions: 0.10.1, 0.10, 0.9, 0.8.1, 0.8, 0.7.2, 0.7.1, 0.7, 0.6.1, 0.6, 0.5.2, 0.5.1, 0.5, 0.4, 0.3.1, 0.3, 0.2, 0.1)
Downloading Flask-0.10.1.tar.gz (544Kb): 4.1Kb downloaded
Run Code Online (Sandbox Code Playgroud)
用pip 1.0测试
root@node7:~# pip --version
pip 1.0 from /usr/lib/python2.7/dist-packages (python 2.7)
Run Code Online (Sandbox Code Playgroud)
eri*_*ang 54
您不需要第三方软件包来获取此信息.pypi为所有包提供简单的JSON提要
https://pypi.python.org/pypi/{PKG_NAME}/json
Run Code Online (Sandbox Code Playgroud)
这里有一些Python代码只使用标准库来获取所有版本.
import json
import urllib2
from distutils.version import StrictVersion
def versions(package_name):
url = "https://pypi.python.org/pypi/%s/json" % (package_name,)
data = json.load(urllib2.urlopen(urllib2.Request(url)))
versions = data["releases"].keys()
versions.sort(key=StrictVersion)
return versions
print "\n".join(versions("scikit-image"))
Run Code Online (Sandbox Code Playgroud)
该代码打印(截至2015年2月23日):
0.7.2
0.8.0
0.8.1
0.8.2
0.9.0
0.9.1
0.9.2
0.9.3
0.10.0
0.10.1
Run Code Online (Sandbox Code Playgroud)
Eug*_*ash 18
您可以使用这个小的 Python 3 脚本(仅使用标准库模块)从使用JSON API 的PyPI 获取包的可用版本列表,并按时间倒序打印它们。与此处发布的其他一些 Python 解决方案不同,这不会在诸如django's2.2rc1或uwsgi's 之类的松散版本上中断2.0.17.1:
#!/usr/bin/env python3
import json
import sys
from urllib import request
from pkg_resources import parse_version
def versions(pkg_name):
url = f'https://pypi.python.org/pypi/{pkg_name}/json'
releases = json.loads(request.urlopen(url).read())['releases']
return sorted(releases, key=parse_version, reverse=True)
if __name__ == '__main__':
print(*versions(sys.argv[1]), sep='\n')
Run Code Online (Sandbox Code Playgroud)
保存脚本并使用包名作为参数运行它,例如:
python versions.py django
Run Code Online (Sandbox Code Playgroud)
3.0a1
2.2.5
2.2.4
2.2.3
2.2.2
2.2.1
2.2
2.2rc1
...
Run Code Online (Sandbox Code Playgroud)
小智 17
你可以使用yolk3k包而不是蛋黄.yolk3k是原始蛋黄的一个分叉,它支持python2和3.
pip install yolk3k
Run Code Online (Sandbox Code Playgroud)
Tim*_*bov 16
我想出了简单的bash脚本.感谢jq的作者.
#!/bin/bash
set -e
PACKAGE_JSON_URL="https://pypi.org/pypi/${1}/json"
curl -s "$PACKAGE_JSON_URL" | jq -r '.releases | keys | .[]' | sort -V
Run Code Online (Sandbox Code Playgroud)
更新:按版本号添加排序.
Rei*_*cke 14
看了pip的代码一段时间后,看起来负责定位包的代码可以在PackageFinder类中找到pip.index.它的方法find_requirement查找a的版本InstallRequirement,但不幸的是只返回最新版本.
下面的代码几乎是原始函数的1:1副本,第114行中的返回更改为返回所有版本.
该脚本期望一个包名称作为第一个且唯一的参数,并返回所有版本.
我不能保证正确性,因为我不熟悉pip的代码.但希望这会有所帮助.
样本输出
python test.py pip
Run Code Online (Sandbox Code Playgroud)
代码:
Versions of pip
0.8.2
0.8.1
0.8
0.7.2
0.7.1
0.7
0.6.3
0.6.2
0.6.1
0.6
0.5.1
0.5
0.4
0.3.1
0.3
0.2.1
0.2 dev
Run Code Online (Sandbox Code Playgroud)
您可以尝试安装确实存在的软件包版本。然后 pip 将列出可用版本
pip install hell==99999
ERROR: Could not find a version that satisfies the requirement hell==99999
(from versions: 0.1.0, 0.2.0, 0.2.1, 0.2.2, 0.2.3, 0.2.4, 0.3.0,
0.3.1, 0.3.2, 0.3.3, 0.3.4, 0.4.0, 0.4.1)
ERROR: No matching distribution found for hell==99999
Run Code Online (Sandbox Code Playgroud)
pip-versions包做得非常出色:
$ pip3 install pip-versions
$ pip-versions latest rsyncy
0.0.4
$ pip-versions list rsyncy
0.0.1
0.0.2
0.0.3
0.0.4
Run Code Online (Sandbox Code Playgroud)
这甚至可以在 Nexus (sonatype) 代理后面工作!
https://pypi.python.org/pypi/Django/ - 适用于其维护者选择显示所有软件包的软件包 https://pypi.python.org/simple/pip/ - 无论如何应该做的伎俩(列出所有链接)
更新:
也许不再需要该解决方案,请查看对此答案的评论。
原答案
对于 20.03 以上的 pip 版本,您可以使用旧的求解器来获取所有可用版本:
$ pip install --use-deprecated=legacy-resolver pylibmc==
ERROR: Could not find a version that satisfies the requirement pylibmc== (from
versions: 0.2, 0.3, 0.4, 0.5, 0.5.1, 0.5.2, 0.5.3, 0.5.4, 0.5.5, 0.6, 0.6.1,
0.7, 0.7.1, 0.7.2, 0.7.3, 0.7.4, 0.8, 0.8.1, 0.8.2, 0.9, 0.9.1, 0.9.2, 1.0a0,
1.0b0, 1.0, 1.1, 1.1.1, 1.2.0, 1.2.1, 1.2.2, 1.2.3, 1.3.0, 1.4.0, 1.4.1,
1.4.2, 1.4.3, 1.5.0, 1.5.1, 1.5.2, 1.5.100.dev0, 1.6.0, 1.6.1)
ERROR: No matching distribution found for pylibmc==
Run Code Online (Sandbox Code Playgroud)
这对我在OSX上有效:
pip install docker-compose== 2>&1 \
| grep -oE '(\(.*\))' \
| awk -F:\ '{print$NF}' \
| sed -E 's/( |\))//g' \
| tr ',' '\n'
Run Code Online (Sandbox Code Playgroud)
它每行返回一个列表:
1.1.0rc1
1.1.0rc2
1.1.0
1.2.0rc1
1.2.0rc2
1.2.0rc3
1.2.0rc4
1.2.0
1.3.0rc1
1.3.0rc2
1.3.0rc3
1.3.0
1.3.1
1.3.2
1.3.3
1.4.0rc1
1.4.0rc2
1.4.0rc3
1.4.0
1.4.1
1.4.2
1.5.0rc1
1.5.0rc2
1.5.0rc3
1.5.0
1.5.1
1.5.2
1.6.0rc1
1.6.0
1.6.1
1.6.2
1.7.0rc1
1.7.0rc2
1.7.0
1.7.1
1.8.0rc1
1.8.0rc2
1.8.0
1.8.1
1.9.0rc1
1.9.0rc2
1.9.0rc3
1.9.0rc4
1.9.0
1.10.0rc1
1.10.0rc2
1.10.0
Run Code Online (Sandbox Code Playgroud)
或获取可用的最新版本:
pip install docker-compose== 2>&1 \
| grep -oE '(\(.*\))' \
| awk -F:\ '{print$NF}' \
| sed -E 's/( |\))//g' \
| tr ',' '\n' \
| gsort -r -V \
| head -1
Run Code Online (Sandbox Code Playgroud)
1.10.0rc2
Run Code Online (Sandbox Code Playgroud)
请记住gsort,必须安装(在OSX上)以解析版本。您可以使用安装brew install coreutils
我的项目luddite有这个功能。
用法示例:
>>> import luddite
>>> luddite.get_versions_pypi("python-dateutil")
('0.1', '0.3', '0.4', '0.5', '1.0', '1.1', '1.2', '1.4', '1.4.1', '1.5', '2.0', '2.1', '2.2', '2.3', '2.4.0', '2.4.1', '2.4.2', '2.5.0', '2.5.1', '2.5.2', '2.5.3', '2.6.0', '2.6.1', '2.7.0', '2.7.1', '2.7.2', '2.7.3', '2.7.4', '2.7.5', '2.8.0')
Run Code Online (Sandbox Code Playgroud)
它通过查询https://pypi.org/的 json API 列出可用包的所有版本
我通常会跑pip install packagename==somerandomstring。这将返回错误说明Could not find a version that satisfies the requirement packagename==somerandomstring,除了该错误,pip 还将列出服务器上的可用版本。
例如
$ pip install flask==aksjflashd
Collecting flask==aksjflashd
Could not find a version that satisfies the requirement flask==aksjflashd
(from versions: 0.1, 0.2, 0.3, 0.3.1, 0.4, 0.5, 0.5.1, 0.5.2, 0.6, 0.6.1, 0.7, 0.7.1, 0.7.2, 0.8, 0.8.1, 0.9, 0.10, 0.10.1, 0.11, 0.11.1, 0.12, 0.12.1,
0.12.2, 0.12.3, 0.12.4, 0.12.5, 1.0, 1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.1.0, 1.1.1, 1.1.2)
No matching distribution found for flask==aksjflashd
$
Run Code Online (Sandbox Code Playgroud)
如果像 'aksjflashd' 这样的随机字符串被证明是实际的软件包版本,那你就非常不走运了!
当然,你也可以使用这个技巧pip download。
替代解决方案是使用 Warehouse API:
https://warehouse.readthedocs.io/api-reference/json/#release
以烧瓶为例:
import requests
r = requests.get("https://pypi.org/pypi/Flask/json")
print(r.json()['releases'].keys())
Run Code Online (Sandbox Code Playgroud)
将打印:
dict_keys(['0.1', '0.10', '0.10.1', '0.11', '0.11.1', '0.12', '0.12.1', '0.12.2', '0.12.3', '0.12.4', '0.2', '0.3', '0.3.1', '0.4', '0.5', '0.5.1', '0.5.2', '0.6', '0.6.1', '0.7', '0.7.1', '0.7.2', '0.8', '0.8.1', '0.9', '1.0', '1.0.1', '1.0.2'])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
198005 次 |
| 最近记录: |