【问题标题】:Conda search for the oldest version of numpy, constrained by Python versionconda 搜索 numpy 的最旧版本,受 Python 版本限制
【发布时间】:2016-01-14 13:22:28
【问题描述】:

我想在最旧版本的 Numpy 中进行单元测试,这样我就可以知道代码库是否可以在尽可能多的 Numpy 版本中工作。

我正在通过 conda 安装 numpy,并在多个 Python 版本中进行测试。但是,在 conda 中,不同版本的 Python 都有不同的可用 numpy 版本子集。

有没有一种简单的方法可以找到在 conda 上对于给定版本的 python 可用的 numpy 版本,以及其中哪些是最低版本?

【问题讨论】:

  • 虽然我下面的解决方案确实可以解决这里所说的问题,但实际上我最终需要更多的东西,那就是找到最旧的 numpy/scipy 版本,受 Python 版本 的限制和 对封装规范的最低要求。这涉及更多,但如果您有兴趣 it is available as a shell script,如果您愿意,可以使用它(或 its repository)。

标签: python bash numpy anaconda conda


【解决方案1】:

首先,我们需要获取完整的版本列表

假设我们要获取python 3.2下numpy的最早可用版本,那么我们可以这样设置参数。

PACKAGE=numpy
PYTHON_VERSION=3.2

我们可以通过获取以该包作为其全名conda search --canonical -f "$PACKAGE" 的规范搜索结果集,并使用sed 搜索具有正确python 版本号的包来解决此问题。规范的包名称follow the format name-version-buildstring 和 buildstring 应该在某处包含 python 版本,虽然格式为 py32 用于版本 3.2 等。因此我们需要搜索py${PYTHON_VERSION/./},其中. 在版本号已被删除。

完整的搜索词应该是^$PACKAGE-\([^-]*\)-.*py${PYTHON_VERSION/./}.*,我们感兴趣的是版本号,也就是捕获的组。

除了提取版本号之外,我们还需要remove the lines which are not matched by the search,这是在-n 的开头和psed 命令的末尾完成的。

通过以下代码行,我们可以获得给定 python 版本可用的包版本的完整列表:

conda search --canonical -f "$PACKAGE" | \
    sed -n "s/^$PACKAGE-\([^-]*\)-.*py${PYTHON_VERSION/./}.*/\1/p" | \
    sort -Vu

如果您没有可用于排序的 -V 标志,here is an alternative solution。也就是说,conda search 提供的列表无论如何都应该按版本号排序,-V 标志是为了以防万一。需要 -u 标志来确保输出是唯一的,因为可能有多个构建具有相同的包版本和 python 版本。

由于输出列表是按版本号升序排列的,所以第一个条目是最低可用版本,可以使用head -1

conda search --canonical -f "$PACKAGE" | \
    sed -n "s/^$PACKAGE-\([^-]*\)-.*py${PYTHON_VERSION/./}.*/\1/p" | \
    sort -Vu | \
    head -1

我们完成了。这应该适用于任何 PACKAGE 和 PYTHON_VERSION 组合。

注意: Conda 确实警告过build string is subject to change and should net be relied upon to extract meaningful information。因此,该解决方案将来可能会失效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2020-10-26
    • 1970-01-01
    • 2016-06-26
    相关资源
    最近更新 更多