2017-04-25 128 views
-1

我使用的是SciPy的模块的imreadimsave工具。我得到以下错误:错误与SciPy的:没有模块名为`imsave`

No module named imsave .

我做了一些谷歌搜索,并盘算了一下,错误是没有安装PIL /枕头因。我做的:

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模块。

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

编辑2:要回答马克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

+0

什么版本的'scipy'?目前的文档建议'imread'和'imsave'方法在'scipy.misc'内,所以正确的方法调用可以是[scipy.misc.imsave()](https://docs.scipy.org/doc/ scipy-0.16.0/reference/generated/scipy.misc.imsave.html) – davedwards

+0

你是如何导入'scipy'的?你如何调用'imread()'和'imsave()'?您提供的任何代码片段可能有助于提供有用的答案。 – davedwards

+0

是的,我正在使用scipy.misc。在导入之后imsave。 – Raghuram

回答

1

@Raghuram

欢迎来到StackOverflow!感谢您提出您的问题,我希望您能找到答案。这里有一些链接asking questions from the StackOverflow help center

建议的解决方案

从你的回答似乎没有使用该系统的Python在/usr/lib/python2.7和你的包已使用--prefix installation scheme/home/raghuram/home/raghuram/local/安装。

不幸的是,如果点数为--install-option,那么pip将不会使用轮子,因此您必须先安装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) 

NB:你可以随时搜索Ubuntu packages online或使用apt search

PS IMO你应该使用sudo pip来删除你已经安装到系统python的任何软件包,IMO再也不会这么做了。登记入住/usr/local/lib/python2.7/dist-packages

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

+0

我编辑了这个问题,使事情更清晰。 – Raghuram

+0

@Raghuram你需要使用'--prefix =/home/raghuram'选项,因为你的'PYTHONPATH'指向'/ home/raghuram'。对不起,'--home'选项将不起作用,因为它将站点包放在'/lib/python/site-package'_not_'python2.7/site-packages'注中,缺少“2.7”。另外,'--user'选项安装到'〜/ .local'中并带有一个额外的“。”。 (点)在“本地”之前。 '--root'选项很奇怪,不知道它安装在哪里。 –

+0

我没有考虑过的一个选择是让Python通过使用'python -m pip install numpy scipy pillow'作为模块调用pip来告诉pip去哪里,这可能是最简单的。在python import'site'里输入'print site.getsitepackages()',看看它说什么。如果它包含'/ home/raghuram/lib/python2.7/site-packages',那么你知道'python -m pip install '会一直工作。 –

相关问题