scipy 错误:没有名为“imsave”的模块

Error with scipy: No module named `imsave`

我正在使用 scipy 模块的 imreadimsave 实用程序。我收到以下错误:

No module named imsave.

我用谷歌搜索了一下,发现错误是由于 PIL/Pillow 没有安装。我愿意:

sudo pip install Pillow.

我收到以下消息:

Requirement already satisfied: Pillow in /usr/local/lib/python2.7/dist-packages.

我正在导入 scipy 的杂项功能以使用 imread 和 imsave 函数。

    import scipy.misc
    import numpy as np
    I = np.load('image.npy')
    scipy.misc.imsave('test_image.jpg',I) #The error pops up here
    J = scipy.misc.imread('test_image.jpg')

之后我重新安装了 scipy。我仍然收到 No module named 错误。

编辑 1:为了清楚起见,我按照此 link 卸载了 PIL。然后我卸载了 scipy。但是,当我 运行 sudo apt install python-scipy python-pil 时,它说 pil 已经是最新的了。但是,它不在路径 /usr/local/lib/python2.7/dist-package 中。

编辑 2:回答 Mark Mikofski 的问题: 我正在使用终端中的 Python。我 运行 来自终端的文件。

    `which python` 

给我以下输出

    `/home/raghuram/bin/python`. 

导入 sys 并按照您所说的进行操作会给出以下输出列表:

    /home/raghuram/lib/python2.7
    /home/raghuram/lib/python2.7/plat-x86_64-linux-gnu
    /home/raghuram/lib/python2.7/lib-tk
    /home/raghuram/lib/python2.7/lib-old
    /home/raghuram/lib/python2.7/lib-dynload
    /usr/lib/python2.7
    /usr/lib/python2.7/plat-x86_64-linux-gnu
    /usr/lib/python2.7/lib-tk
    /home/raghuram/local/lib/python2.7/site-packages
    /home/raghuram/lib/python2.7/site-packages

Scipy的版本是0.19.0

@Raghuram,

欢迎使用 Whosebug!感谢您提出问题,希望您能找到答案。这里有一些 link 到 asking questions from the Whosebug help center:

建议的解决方案

根据您的回答,您似乎没有在 /usr/lib/python2.7 中使用系统 Python,并且您的软件包已使用 --prefix installation scheme 安装到 /home/raghuram/home/raghuram/local/.

不幸的是,pip 如果达到 --install-option 将不会使用轮子,因此您必须先安装 BLAS。

$ sudo apt install gfortran libblas-dev liblapack-dev libatlas-dev

然后尝试使用--install-option with pip传递--prefix选项进行安装。

$ pip install --install-option="--prefix=/home/raghuram/" numpy scipy pillow

另一个可能更简单的选择是查看您的 python 解释器认为站点包应该放在哪里。为此,import site and call site.getsitepackages()。如果 /home/raghuram 在该列表中,那么您可以使用 -m 选项从 Python 作为模块调用 pip。

$ python -m pip install numpy scipy pillow

最后,如果所有其他方法都失败了,您可以求助于 distutils,但这很棘手,因为您不能混合使用 scipy/numpy BLAS 依赖项。它们只能是 ATLAS、OpenBLAS、MKL 等,不能混合。要查看您正在使用什么,请先 import scipy numpy 然后调用 numpy.show_configs()scipy.show_configs()。它从这里变得更加棘手,因为您需要编辑 setup.cfg 来告诉 numpy/scipy 您的 BLAS 在哪里,所以让我们假设您可以删除这两个并从头开始。首先从你的发行版的仓库安装依赖项;我认为默认情况下他们将始终使用 ATLAS 进行构建。

$ sudo apt install gfortran libblas-dev liblapack-dev libatlas-dev

然后从 PyPI 下载 numpy 和 scipy zip 文件并解压。对于每一个,您都需要输入提取的文件夹和 运行:

$ python setup.py install --prefix=~

现在尝试使用 scipy.misc.imsave 就像他们的帮助文档字符串示例

>>> import numpy as np
>>> from scipy.misc import imsave
>>> help(imsave)  # view docstring
>>> # then hit q key to return to interpreter
>>> x = np.zeros((255, 255))
>>> x = np.zeros((255, 255), dtype=np.uint8)
>>> x[:] = np.arange(255)
>>> imsave('gradient.png', x)    
>>> rgb = np.zeros((255, 255, 3), dtype=np.uint8)
>>> rgb[..., 0] = np.arange(255)
>>> rgb[..., 1] = 55
>>> rgb[..., 2] = 1 - np.arange(255)
>>> imsave('rgb_gradient.png', rgb)

注意:您可以随时搜索Ubuntu packages online or using apt search

PS IMO,您可能应该使用 sudo pip 删除已安装到系统 python 的任何软件包,IMO 再也不会这样做了。签到 /usr/local/lib/python2.7/dist-packages.

PPS 恕我直言,你应该 永远不要 使用 sudo 在 Linux 上安装 Python 软件包,而不是从使用 aptyum 的发行版软件存储库,使用 pip --user 选项安装或使用 virtualenv 创建 Python 虚拟环境。参见 my AskUbuntu answer

尝试安装 Pillowconda 通过:

conda install Pillow