Conda搜索最旧版本的numpy,受Python版本的约束

2024-03-28 23:34:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我正在通过conda安装numpy,并在Python的几个版本中进行测试。然而,在conda中,不同版本的Python都有不同的numpy版本子集可供使用。你知道吗

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


Tags: 方法代码版本numpy单元测试conda子集
1条回答
网友
1楼 · 发布于 2024-03-28 23:34:23

首先,我们需要得到完整的版本列表

假设我们想要在python3.2下获得可用的最早版本的numpy,所以我们可以这样设置参数。你知道吗

PACKAGE=numpy
PYTHON_VERSION=3.2

我们可以通过获取一组规范的搜索结果来解决这个问题,这些结果的全名是conda search canonical -f "$PACKAGE",并使用sed来搜索具有正确python版本号的包。规范的包名follow the formatname version buildstring和buildstring应该包含python版本的某个地方,尽管格式为py32 for version 3.2等。因此,我们需要搜索py${PYTHON_VERSION/./},其中版本号中的.已被删除。你知道吗

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

除了提取版本号之外,我们还需要remove the lines which are not matched by the search,这在这里是通过-nsed命令的开始处和结尾处的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

我们结束了。这应该适用于任何包和PYTHON\u版本组合。你知道吗

注意: 康达警告说build string is subject to change and should net be relied upon to extract meaningful information。因此,这个解决方案在将来可能会失败。你知道吗

相关问题 更多 >