【问题标题】:Why python pandas does not provide Linux whl files为什么 python pandas 不提供 Linux whl 文件
【发布时间】:2016-09-22 11:26:47
【问题描述】:

我想知道为什么 python pandas 不为 Linux 上的 pip 安装提供 .whl 文件。不过 Whl 文件可用于 Mac 和 Windows。见:https://pypi.python.org/pypi/pandas/0.18.1

我可以的

pip install pandas

但这涉及从源头构建的耗时过程。我有一个持续集成系统,其中包含 pandas 作为构建依赖项,因此我希望能够从二进制 .whl 文件快速安装,而无需从源代码构建。

【问题讨论】:

    标签: python pandas pip pypi


    【解决方案1】:

    Armin Ronacher 详细讨论了这个问题。从根本上说,Linux 发行版不够统一,您不能依赖特定库的存在来链接;甚至python库也可能不一致。


    您可以为您正在使用的环境构建自己的轮子,并根据需要多次安装它们,这对于持续集成系统应该可以正常工作:

    $ pip wheel pandas
    Collecting pandas
      Downloading pandas-0.18.1.tar.gz (7.3MB)
        100% |████████████████████████████████| 7.3MB 131kB/s 
    ...
    Successfully built pandas
    
    $ ls pandas*
    pandas-0.18.1-cp35-cp35m-linux_x86_64.whl
    
    $ pip install pandas-0.18.1-cp35-cp35m-linux_x86_64.whl 
    Processing ./pandas-0.18.1-cp35-cp35m-linux_x86_64.whl
    ...
    Successfully installed pandas-0.18.1 python-dateutil-2.5.3 pytz-2016.4 six-1.10.0
    

    请注意,numpy 确实在 pypi 上提供了 linux wheel 文件。查看内部(它们是简单的 zip 文件),我们可以看到它们捆绑了通常的 numpy 库,例如 lapack_lite 以及它们的依赖项(在本例中为 gfortran 和 openblas):

    $ unzip -l numpy-1.11.0-cp35-cp35m-manylinux1_x86_64.whl  | grep [.]so
    
    ...
     38407360  2016-04-12 21:01   numpy/.libs/libopenblasp-r0-39a31c03.2.18.so
      1017104  2016-04-12 21:01   numpy/.libs/libgfortran-ed201abd.so.3.0.0
       108200  2016-04-12 21:01   numpy/linalg/lapack_lite.cpython-35m-x86_64-linux-gnu.so
    ...
    

    相比之下,操作系统安装的 numpy 将 lapack_lite 链接到 /usr/lib/libblas,通过 debian 替代系统链接到优化的 libatlas,因此它应该具有更好的性能(未经测试)。

    查看 lapack 链接,他们使用的是非常标准的库,因此它应该可以在许多 64 位 linux 系统上运行:

    $ ldd lapack_lite.cpython-35m-x86_64-linux-gnu.so 
        linux-vdso.so.1 =>  (0x00007fffadf7a000)
        libopenblasp-r0-39a31c03.2.18.so => /tmp/numpy/linalg/./../.libs/libopenblasp-r0-39a31c03.2.18.so (0x00007f5efb8bc000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5efb69e000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5efb2d9000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5efafd3000)
        libgfortran-ed201abd.so.3.0.0 => /tmp/numpy/linalg/./../.libs/libgfortran-ed201abd.so.3.0.0 (0x00007f5efacda000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f5efe0d4000)
    

    大概有人也可以自愿为 pandas 创建轮子,并让它们在不同版本的 python 中保持最新。请注意,pandas .so 文件链接到 libpython,但不知何故 numpy 避免这样做,尽管进行了 python 调用。


    编辑 2016-05-25:添加了关于构建和安装轮子的说明。

    【讨论】:

    • 感谢您的回复。是的,我确实需要一个比操作系统默认软件包存储库提供的版本更新的版本。我想在我的情况下,我必须要么 1) 咬紧牙关并通过源代码构建,或者 2) 以某种方式自己构建一个 whl 文件?
    • 是的,您应该能够自己构建轮子,这将在您的持续集成系统的上下文中正常工作,只要每个测试环境都有一个轮子。
    • 有没有办法离线做到这一点?
    猜你喜欢
    • 2023-02-13
    • 2023-02-10
    • 1970-01-01
    • 2015-09-14
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    相关资源
    最近更新 更多