能否在pypy下安装scipy?

18
我使用pypy创建了一个虚拟环境并尝试安装scipy,但是安装失败并提示以下错误信息:

distutils.errors.DistutilsError: 设置脚本退出时出现错误:命令“cc -O2 -fPIC -Wimplicit -O2 -fPIC -Wimplicit -O2 -fPIC -Wimplicit -DHAVE_NPY_CONFIG_H=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -DNO_ATLAS_INFO=1 -DHAVE_CBLAS -Ibuild/src.linux-x86_64-3.2/numpy/core/src/private -Inumpy/core/include -Ibuild/src.linux-x86_64-3.2/numpy/core/include/numpy -Inumpy/core/src/private -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -I/home/luke/Programowanie/Python/connect4/venv-pypy/include -Ibuild/src.linux-x86_64-3.2/numpy/core/src/private -Ibuild/src.linux-x86_64-3.2/numpy/core/src/private -Ibuild/src.linux-x86_64-3.2/numpy/core/src/private -c numpy/core/src/multiarray/scalarapi.c -o build/temp.linux-x86_64-3.2/numpy/core/src/multiarray/scalarapi.o” 失败,退出状态为 1

有一个特定的适用于pypy的numpy版本,但我只找到了一个关于scipy的旧捐款号召。自那时以来有什么变化吗?


scipy 有编译代码,就像 numpy 一样。所以即使你有一个在 PyPy 上工作的 numpy(它是否完全兼容?),这也不意味着你可以在其上安装常规的 scipy。如果你没有找到 PyPy 的 scipy,那么你就不能添加它。但要记住,scipy 是一组松散连接的软件包。 - hpaulj
1
那个募捐呼吁是为了 numpy 提案。该提案明确排除了 scipy。换句话说,没有人正式在开发 scipy 版本。 - hpaulj
@hpaulj 他们在文本后面提到了scipy:“具体来说,我们不打算(...)实现其他科学库,如SciPy、matplotlib或biopython”。 - Luke
5个回答

24
是的,从Scipy 1.1.0开始是可能的。然而需要新版本的PyPy(>= 6.0.0)和Numpy,numpy>= 1.14.3,最好在发布时使用numpy>=1.15.0。安装可以通过通常的方式完成。
pypy3 -mpip install numpy
pypy3 -mpip install scipy

假设您已经安装了BLAS/LAPACK,那么首先您应该确保能够从源代码安装numpy/scipy到正常的Python。可能没有人尝试在Windows上使用Pypy进行操作,所以您需要自己解决。这也可能不适用于NumPyPy - 您需要原始的Numpy。其他答案说“不行”,因为这是2018年5月之前的情况。

从今天开始,您还必须安装pybind11;然而,仍然会出现pybind错误导致程序中断:/usr/local/include/detail/common.h:134:19: 致命错误: cstddef: 没有那个文件或目录。 - weberc2
对于scipy,我不得不安装一些依赖项,如sudo apt install gfortran libatlas-base-dev libopenblas-dev pypy3-dev,但是它仍然无法构建。 - Amin Ya

8

不行。SciPy有一些与cpython的C API交互的部分,而pypy不支持这样做。

编辑:截至2018年5月,这是不正确的,scipy与pypy兼容。有关详细信息,请参见@pv的答案。


1
自scipy 1.1.0版本以后就不再是这样了。请参见pv的评论。 - cphyc
现在,我认为这个答案应该被删除。也许你可以添加一个pypy版本,看看它是否可行? - Martin Thoma

7

看起来@piv.s的好答案中的链接不再包含所需内容。 要安装BLAS/LAPACK并避免在Ubuntu上出现NotFoundError: no lapack/blas resources found等安装错误,首先运行:

sudo apt-get install libatlas-base-dev

然后使用与你的pypy相对应的pip(而不是系统的pip):

pip install numpy
pip install scipy

或者像piv提到的那样,也可以达到效果。


2
截至目前,numpy和scipy可以通过pip在PyPy上安装,但有一个问题:如果您将其在虚拟环境中运行(您可能应该这样做),请记得使用“--always-copy”创建虚拟环境,否则virtualenv将为“include”目录创建符号链接,使其对用户只读,这将破坏pybind11的安装(它是scipy的依赖项)。

2
不,但是奇迹般的是,matplotlib 可以在 pypy 中使用,在 jupyter notebook 和作为一个独立版本(通过 wx widgets)都可以工作。所以这并不是完全不可能的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接