我想在最古老的Numpy版本中进行单元测试,所以我知道代码库是否在尽可能多的Numpy版本中运行。
我正在通过conda安装numpy,并在几个版本的Python中进行测试。但是,在conda中,不同版本的Python每个都有不同的numpy版本子集。
对于给定版本的python,有没有一种简单的方法可以找到conda上哪些版本的numpy可用,哪些版本是最低版本?
答案 0 :(得分:3)
首先,我们需要获取完整的版本列表
假设我们想在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
开始时的p
和sed
末尾的conda search --canonical -f "$PACKAGE" | \
sed -n "s/^$PACKAGE-\([^-]*\)-.*py${PYTHON_VERSION/./}.*/\1/p" | \
sort -Vu
命令。
使用以下代码行,我们可以获得给定python版本可用的软件包的完整版本列表:
-V
如果您没有可用于排序的-V标志,here is an alternative solution。也就是说,conda搜索提供的列表无论如何都应按版本号排序,-u
标志就是以防万一。需要head -1
标志以确保输出是唯一的,因为可能存在具有相同包版本和python版本的多个版本。
由于输出列表按版本号按升序排序,因此第一个条目是最低可用版本,可以使用conda search --canonical -f "$PACKAGE" | \
sed -n "s/^$PACKAGE-\([^-]*\)-.*py${PYTHON_VERSION/./}.*/\1/p" | \
sort -Vu | \
head -1
。
10 2
我们已经完成了。这适用于任何PACKAGE和PYTHON_VERSION组合。
注意:的 康达警告build string is subject to change and should net be relied upon to extract meaningful information。因此,这种解决方案将来可能会破裂。