【问题标题】:Error with scipy: No module named `imsave`scipy 出错:没有名为“imsave”的模块
【发布时间】:2017-04-25 17:28:52
【问题描述】:

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

没有名为imsave的模块。

我做了一点谷歌搜索,发现错误是由于未安装 PIL/Pillow 造成的。我愿意:

sudo pip install Pillow.

我收到以下消息:

已满足要求:/usr/local/lib/python2.7/dist-packages 中的枕头。

我正在导入 scipy 的 misc 功能以使用 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

【问题讨论】:

  • scipy 的哪个版本?当前文档表明imreadimsave 方法在scipy.misc 内部,因此正确的方法调用可能是scipy.misc.imsave()
  • 你是如何导入scipy的?你怎么打电话给imread()imsave()?您拥有的任何代码 sn-ps 都可能有助于提供有用的答案。
  • 是的,我在导入后使用 scipy.misc.imsave。
  • 你是如何开始python的?如果你输入which python,你会得到什么?如果在 Python 中导入 sys 然后输入 print "\n".join(sys.path),你会得到什么?我想看看你使用的是 Python 2 还是 Python 3,以及 /usr/lib/python2.7/dist-packages/ 是否在你的 PYTHONPATH 上。它是什么版本的 scipy?如果你导入 scipy 并输入 print scipy.__version__,你会得到什么?
  • 您的意见很有帮助! /usr/local/usr/lib' along with the --prefix` 选项的 sys.path.insert 有效。

标签: python scipy python-imaging-library


【解决方案1】:

尝试通过conda 安装Pillow via:

conda install Pillow

【讨论】:

    【解决方案2】:

    @Raghuram

    欢迎来到 StackOverflow!感谢您提出问题,希望您能找到答案。以下是asking questions from the StackOverflow 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 在哪里,所以让我们假设您可以删除这两个并从头开始。首先从发行版的 repo 中安装依赖项;我认为默认情况下他们将始终使用 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 或使用apt search

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

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

    【讨论】:

    • @Raghuram 您需要使用--prefix=/home/raghuram 选项,因为您的PYTHONPATH 指向/home/raghuram。抱歉,--home 选项不起作用,因为它将站点包放入 <home>/lib/python/site-package not python2.7/site-packages 请注意缺少“2.7”。 --user 选项也安装到 ~/.local 中,并带有一个额外的“。” (点)在“本地”之前。 --root 选项很奇怪,不确定它安装在哪里。
    • 我没有考虑过的一个选项是让 Python 通过使用 python -m pip install numpy scipy pillow 将 pip 作为模块调用来告诉 pip 去哪里,这可能是最简单的。在 python 中导入 site 并输入 print site.getsitepackages() 并查看它的内容。如果它包含/home/raghuram/lib/python2.7/site-packages,那么您知道python -m pip install <blah> 将始终有效。
    猜你喜欢
    • 2014-09-08
    • 2020-01-21
    • 2018-02-03
    • 1970-01-01
    • 2018-10-29
    • 2017-12-15
    • 2018-02-23
    • 2019-08-05
    • 1970-01-01
    相关资源
    最近更新 更多