ImportError:无法导入名称_imaging

时间:2014-08-16 13:37:20

标签: python django python-imaging-library imaging pillow

我安装了Pillow,之后我想做:

from PIL import Image

我收到以下错误:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 61, in <module>
ImportError: cannot import name _imaging

但是,如果我单独导入这些,一切都很好,即:

import _imaging
import Image

你知道问题可能是什么吗?

10 个答案:

答案 0 :(得分:16)

如果您在一个操作系统中构建Pillow,然后将site-packages的内容复制到另一个操作系统,也会发生这种情况。例如,如果您要创建AWS Lambda部署包,那么这是您在运行Lambda函数时将面临的错误。如果是这种情况,那么Pillow需要安装在Amazon Linux实例中,您必须在部署包中使用生成的site-packages。请参阅此处的说明和详细信息:

http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example-deployment-pkg.html

答案 1 :(得分:15)

我也遇到了这个问题。如果您安装了PIL,然后在其上安装Pillow,就会发生这种情况。

转至/usr/local/lib/python2.7/dist-packages/并删除名称中包含“PIL”的任何内容(包括目录)。如果Pillow .egg文件在那里你也可以删除它。 然后重新安装Pillow。

将“python2.7”替换为您正在使用的python版本。

答案 2 :(得分:2)

你的枕头版本是什么?

enter image description here

Pillow&gt; = 2.1.0不再支持import _imaging。请改用from PIL.Image import core as _imagingLink tot he official document

答案 3 :(得分:1)

要使枕头工作,PIL必须位于/usr/local/lib/python2.7或3 / dist-packages / PIL.py中。

在dist-packages中,PIL.py应该有一个文件夹。

1)sudo apt-get update 2)pip install Pillow

PIL!= PiL,祝你有愉快的一天。

答案 4 :(得分:1)

我遇到了同样的问题,因此我通过使用以下命令更新此软件包来解决了这个问题:

pip install -U Pillow

答案 5 :(得分:1)

当尝试部署lambda软件包时,我遇到了同样的问题,问题是您必须预编译要模拟要使用的lambda体系结构/运行时的软件包,否则将得到cannot import name _imaging 。解决此问题的2种方法:

1-启动一个 EC2 Amazon Linux实例。(我仅介绍这一部分)

2-使用泊坞窗。


简短解决方案

  1. 在Amazon Linux 2实例中安装Python 3。 (必须是您计划在lambda中使用的python3.X)
  2. 在ec2-user主目录下安装虚拟环境。
  3. 激活环境,然后安装Boto 3。
  4. 安装枕头
  5. 使用库的内容(PIL和Pillow.libs)创建一个ZIP存档
  6. 将功能代码添加到存档中。
  7. 更新您的lambda。(AWS CLI)

长期解决方案

  1. 如果尚未安装Python 3,请使用yum软件包管理器安装软件包。

    $ sudo yum install python3 -y

  2. 在ec2-user主目录下创建虚拟环境

    以下命令使用内部虚拟环境创建应用程序目录。您可以将my_app更改为其他名称。如果您更改my_app,请确保在其余的解决步骤中引用了新名称。

    $ python3 -m venv my_app/env

  3. 激活虚拟环境并安装Boto 3

    使用适当的权限策略将AWS Identity and Access Management(IAM)角色附加到您的EC2实例,以便Boto 3可以与AWS API进行交互。对于其他身份验证方法。...要快速使用,您可以使用 $ aws confifure see documentation(在步骤7中需要此权限)来设置凭据

3.1通过在项目目录下的bin目录中获取激活文件来激活环境。

  `$ source ~/my_app/env/bin/activate`

3.2。确保您的环境中安装了最新的pip模块。 $ pip install pip --upgrade

3.3使用pip命令在我们的虚拟环境中安装Boto 3库。

   `pip install boto3`
  1. 使用pip安装库。

    $ pip install Pillow

4.1停用虚拟环境。

 `$ deactivate`
  1. 使用库的内容创建一个ZIP存档。

    将目录更改为pip的安装目录。它应该类似于/my_app/env/lib/python3.x/site-packages。

重要:此处的关键是将网站程序包中的文件压缩到 您的lambda。(我只使用PIL和Pillow.libs来节省空间,但是您可以 压缩所有内容)

5.1压缩PIL文件夹中的所有内容。

   `zip -r9 PIL.zip ./PIL/`

   add the Pillow.libs to your ZIP

   `zip -gr PIL.zip Pillow.libs`
  1. 将功能代码添加到存档中。 您可以在控制台中执行此操作(如果它仅存在于代码文件中),但我建议在此步骤中执行此操作。如果您没有代码,则只需使用vi或nano创建一个文件,并以lambda名称保存处理程序将使用(在这种情况下,将使用lambda_function.py)。

    zip -g PIL.zip lambda_function.py

  2. 更新lambda。(AWS CLI) 如果尚未创建lambda函数,请立即执行此操作,然后再从aws cli更新该函数,请确保您具有从aws cli更新lambda的权限。

    将LAMBDAFUNCTIONNAME更改为您的函数名称

    aws lambda update-function-code --function-name LAMBDAFUNCTIONNAME P --zip-file fileb://PIL.zip

摆脱地狱的第一个循环

go to your lambda console and test your code, make sure you use the same runtime/python version you used in the EC2 instance

答案 6 :(得分:1)

我在 Python 3.6 中遇到了同样的错误。升级 Pillow 对我有用。

function foo(shown) {
  let var_2 = "";
  let var_3 = "";
  if (shown == "div1") {
    function check() {
      var_2 = new Date().toISOString();
      console.log("time", window.var_1 + " - " + var_2);
    }

    var button = document.getElementById("button2");
    button.addEventListener("click", check);
  } else if (shown == "div2") {
    var_3 = new Date().toISOString();
    console.log("time:", var_2 + " - " + var_3);
  }

  var button = document.getElementById("button");
  button.addEventListener("click", check);
  return true;
}

对于其他 python 版本,可能使用您的版本而不是 3.6。

答案 7 :(得分:0)

我将Flask与Google App Engine一起使用。我通过以下命令安装了模块枕头:

pip install -t lib pillow

我通过在我的app.yaml文件中定义PIL修复了此错误:

libraries:
- name: PIL
  version: latest

答案 8 :(得分:0)

这可能是一个小众的解决方案,但我可以通过转到file->settings->python interpreter并单击枕套旁边的升级符号来解决Pycharm上的问题。

答案 9 :(得分:0)

快速解决方案 - 也导入 PyQt5, 您不会收到该错误消息。

导入 PyQt5

从 PIL 导入 ImageGrab