与特定Python和NumPy配置兼容的Pandas版本?

11 投票
2 回答
18808 浏览
提问于 2025-04-18 17:08

有没有什么程序可以帮助我找出哪些 pandas 版本和特定的 Python 和 numpy 配置是兼容的呢?

我想在 ESRI ArcMAP 10.1 中使用 pandas,这个软件运行在 32 位的 Windows 系统上,使用的是 Python 2.7 和 numpy 1.6。

我试着创建一个与 ESRI ArcMap 10.1 兼容的 Python 环境,方法是打开一个 32 位的 Anaconda 命令提示符,然后输入

conda create -n arcmap101 python=2.7 numpy=1.6 pandas

结果我得到了一个包含 pandas=0.10.1 的 Python 环境。

不过,看起来应该可以在 python=2.7numpy=1.6 的基础上安装更高版本的 pandas,但我不太确定能高到什么程度。

我试着查看了 pandas 的 setup.py 在 GitHub 上的历史记录,发现从 pandas=0.14 之前都有 min_numpy_ver=1.6 的要求,虽然最近这个要求改成了 min_numpy_ver=1.7,所以我不太清楚这是新的要求还是之前版本的一个 bug 修复。

我还看到在 PyPI 上,pandas=0.11 在 Windows 上是基于 numpy=1.6 构建的,而 pandas=0.12 则是基于 numpy=1.7 构建的。

但我不知道 PyPI 的构建是一个要求还是一个选择。

有没有什么好的方法可以找到这些信息,而不需要直接问 pandas 的开发者呢?

2 个回答

0

我们在尝试把numpy的版本改成1.22.3的时候,在requirements.txt文件里遇到了这个错误信息:

错误:找不到满足要求的numpy==1.22.3版本

但是当我们把它改回只写numpy的时候,流程就成功了。

requirements.txt里的示例代码:

    azure-functions-durable
    azure-storage==0.30.0
    pandas
    numpy
    requests
    azure-identity
    azure-keyvault-secrets

我查看了一些项目,发现当numpy==1.22.3时,pandas的版本也应该改成pandas==1.4.1或者pandas==1.4.2

requirements.txt里的示例代码:

    azure-functions-durable
    azure-storage==0.30.0
    pandas==1.4.1
    numpy==1.22.3
    requests
    azure-identity
    azure-keyvault-secrets
9

每个用conda构建的与numpy相关的包,都把numpy的主要版本号作为依赖项固定下来。这种版本号也会在构建字符串中体现出来(比如 np18py27)。这可能有点过于谨慎,因为很多包并不使用numpy API中不兼容的部分(特别是,并不是所有的包都真的在numpy上编译C扩展),但无论如何,这就是目前的做法。

当numpy 1.8发布时,Continuum停止了对旧版本numpy的构建,这就是为什么当你让conda与numpy 1.6一起安装时,它会给你一个旧版本的pandas。想查看可用的版本,可以运行 conda search pandas,并注意构建字符串。

如果你需要的numpy/pandas组合不可用,你有两个选择:

  1. 手动安装“错误”的pandas,然后希望它能正常工作。理论上,numpy的API是向后兼容的,所以这里还有希望。不过,安装后最好运行一下pandas的测试,看看它是否真的能用。可以尝试以下命令:

    conda create -n arcmap101 python=2.7 numpy=1.6 pandas

    conda install -n arcmap101 --no-deps pandas=0.13 # 或者其他版本

    这样会让你的环境处于conda认为不一致的状态,但这些包会被安装在里面。你可以精确指定pandas的版本,甚至到构建字符串,比如 pandas=0.13.0=np17py27_0

  2. 自己构建一个pandas包,包含你想要的组合。运行 conda skeleton pypi pandas 会给你一个好的开始的配方(根据我们在Continuum使用的配方,build.sh中不需要特别的内容,也不需要补丁)。然后用以下命令构建它:

    conda build --npy 1.6 --py 2.7 pandas

撰写回答