python - conda搜索最旧版本的numpy,受限于Python版本

标签 python bash numpy anaconda conda

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

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

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

最佳答案

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

假设我们想要获取 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/./}.*,我们对版本感兴趣number,即捕获组。

除了提取版本号,我们还需要remove the lines which are not matched by the search ,这是在 sed 命令的开头使用 -n 并在结尾使用 p 完成的。

通过以下代码行,我们可以获得给定 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 .因此,此解决方案将来可能会失败。

关于python - conda搜索最旧版本的numpy,受限于Python版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34790725/

相关文章:

python - 如何在Python中绘制从最大范围到最小范围的图

python - 在不创建菜单项的情况下为功能分配快捷方式

python - 将变量的内容复制到剪贴板

arrays - 如何在numpy中创建连续数字数组?

python np.nan 和 '==' & 'is'

string - 使用 IFS 在 bash 中将字符串拆分为单个字符

image - 从网站下载图像

bash - awk 从 csv 文件总结 for 循环中的最后 n 个元素

python - 从 SciPy 稀疏矩阵获取左、右、上、下非零邻居

python - 锯齿状/参差不齐的 Numpy.array 的乘法定义是什么?