给定可以与pip一起安装的Python包的名称,是否有任何方法可以找到pip可以安装的所有可能版本的列表?现在是反复试验。
我正在尝试为第三方库安装一个版本,但最新版本太新了,有向后不兼容的更改。因此,我希望以某种方式获得pip所知道的所有版本的列表,以便我可以测试它们。
给定可以与pip一起安装的Python包的名称,是否有任何方法可以找到pip可以安装的所有可能版本的列表?现在是反复试验。
我正在尝试为第三方库安装一个版本,但最新版本太新了,有向后不兼容的更改。因此,我希望以某种方式获得pip所知道的所有版本的列表,以便我可以测试它们。
当前回答
简单的bash脚本,只依赖于python本身(我假设在问题的上下文中应该安装它)和curl或wget之一。它有一个假设,你已经安装了setuptools包来排序版本(几乎总是安装)。它不依赖于外部依赖,例如:
Jq可能不在场; grep和awk在Linux和macOS上的行为可能不同。
curl --silent --location https://pypi.org/pypi/requests/json | python -c "import sys, json, pkg_resources; releases = json.load(sys.stdin)['releases']; print(' '.join(sorted(releases, key=pkg_resources.parse_version)))"
稍微长一点的带有注释的版本。
将包名放入一个变量中:
PACKAGE=requests
获取版本(使用curl):
VERSIONS=$(curl --silent --location https://pypi.org/pypi/$PACKAGE/json | python -c "import sys, json, pkg_resources; releases = json.load(sys.stdin)['releases']; print(' '.join(sorted(releases, key=pkg_resources.parse_version)))")
获取版本(使用wget):
VERSIONS=$(wget -qO- https://pypi.org/pypi/$PACKAGE/json | python -c "import sys, json, pkg_resources; releases = json.load(sys.stdin)['releases']; print(' '.join(sorted(releases, key=pkg_resources.parse_version)))")
打印排序版本:
echo $VERSIONS
其他回答
我想出了一个非常简单的bash脚本。感谢jq的作者。
#!/bin/bash
set -e
PACKAGE_JSON_URL="https://pypi.org/pypi/${1}/json"
curl -L -s "$PACKAGE_JSON_URL" | jq -r '.releases | keys | .[]' | sort -V
更新: 添加按版本号排序的功能。 添加-L跟随重定向。
你可以用3k的蛋黄来代替蛋黄。Yolk3k是最初的蛋黄的分支,它同时支持python2和3。
https://github.com/myint/yolk
pip install yolk3k
pypi-has() { set -o pipefail; curl -sfL https://pypi.org/pypi/$1/json | jq -e --arg v $2 'any( .releases | keys[]; . == $v )'; }
用法:
$ pypi-has django 4.0x ; echo $?
false
1
$ pypi-has djangos 4.0x ; echo $?
22
$ pypi-has djangos 4.0 ; echo $?
22
$ pypi-has django 4.0 ; echo $?
true
0
pypi版本包出色地完成了以下工作:
$ 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
这甚至可以在Nexus (sonatype)代理后面工作!
更新:
也许解决方案不再需要了,检查这个答案的注释。
原来的答案
对于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==