ImportError:无法导入名称 _imaging

Posted

技术标签:

【中文标题】ImportError:无法导入名称 _imaging【英文标题】:ImportError: cannot import name _imaging 【发布时间】:2014-10-10 00:46:08 【问题描述】:

我安装了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

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

【问题讨论】:

【参考方案1】:

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

pip install -U Pillow

【讨论】:

在你实现上面的“答案”之前先试试这个。这个解决方案对我有用。【参考方案2】:

如果您在一个操作系统中构建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

【讨论】:

我将 CodeBuild 与 Elastic Container Repository 结合使用。 ECR 用于存储 CodeBuild 使用的 Docker 镜像。我使用的是基于 python:3.5.2 图像的图像,并且收到了错误消息。一旦我切换到 amazonlinux:latest 并在其中手动安装 Python,问题就解决了。非常感谢您的洞察力! 很高兴它有帮助:) 这是否意味着我无法在我的 Mac 上创建包含正确内容的 zip 文件? 这个解决方案对我不起作用,因为我正在尝试使用嵌入式 python zip 创建一个便携式应用程序。 Pip 似乎也不再在嵌入式 python 中工作,所以我也无法通过嵌入式解释器安装。【参考方案3】:

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

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

用“python2.7”代替你正在使用的python版本。

【讨论】:

在我的 Mac 上,我必须在 /usr/local/lib/python2.7/site-packages 固定下执行此操作,谢谢。 在 Ubuntu 上,我运行了 sudo pip3 uninstall uninstall pip3 4 次(因为总是有一些东西要删除),直到没有东西要删除。然后运行pip3 install -U pillow --user,Pillow 不再出现错误。 谢谢! pip卸载枕头pip安装枕头就够了 感谢您引导我找到解决方案。在 Ubuntu 16.04 中。我在 Python3 中运行时遇到问题。删除“官方”包python3-pil(即sudo apt-get remove python3-pil)就足够了,因为我已经通过pip安装了Pillow 卸载和重新安装枕头效果很好。 pip 卸载枕头 pip install -U 枕头【参考方案4】:

你的枕头是什么版本的?

Pillow >= 2.1.0 不再支持import _imaging。请改用from PIL.Image import core as _imaging。 Here's the official documentation.

【讨论】:

我在 PIL\Image.py 中使用 from PIL.Image import core as _imaging 和异常值进行编辑:无法导入名称'core'【参考方案5】:

我在 Python 3.6 中遇到了同样的错误。升级 Pillow 为我完成了这项工作。

sudo python3.6 -m pip install Pillow --upgrade

可能其他 python 版本使用你的版本而不是 3.6。

【讨论】:

【参考方案6】:

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

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

2 - 使用码头工人。


短解决方案

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

长解

    如果尚未安装 Python 3,则使用 yum 包管理器安装包。

    $ sudo yum install python3 -y

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

    以下命令创建应用程序目录,其中包含虚拟环境。您可以将 my_app 更改为另一个名称。如果您更改 my_app,请确保在其余解决步骤中引用新名称。

    $ python3 -m venv my_app/env

    激活虚拟环境并安装 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`

    使用 pip 安装库。

    $ pip install Pillow

4.1 停用虚拟环境。

 `$ deactivate`

    使用库的内容创建一个 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`

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

    zip -g PIL.zip lambda_function.py

    更新您的 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

【讨论】:

【参考方案7】:

要让枕头工作 PIL 必须在 /usr/local/lib/python2.7 or3/dist-packages/PIL.py

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

    sudo apt-get update pip install Pillow

PIL != PiL

【讨论】:

顺便说一句,PIL 确实有一个文件夹,位于 /usr/local/lib/python2.7/dist-packages/PIL 下 导入 PIL 不导入 PiL。 老兄,正如我所说,PiL 是一个错字。最初我确实导入了 PIL :D,但它仍然不起作用 试试python3 import PIL【参考方案8】:

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

【讨论】:

【参考方案9】:

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

导入 PyQt5

从 PIL 导入 ImageGrab

【讨论】:

【参考方案10】:

正如其他一些答案所暗示的那样,当您在 MacOS 上构建 Pillow 并尝试将 PIL 导入另一个操作系统(如某些 Amazon Linux 风格)时,可能会发生这种情况。

我的确切用例是将 imagehash 打包为 Lambda 层,其中包括枕头作为依赖项。以下指南对所有 python 包都非常有用。

    安装 SAM CLI SAM Installation 使用定义的 lambda 处理程序创建您的 python 脚本 使用定义的 Lambda 函数创建您的 template.yml 文件。您的 CodeUri 应该是您的 python 脚本的相对路径。 将您尝试为其创建层的包添加到您的 requirements.txt。 运行以下 SAM 命令sam build -t path_to_template 您现在将拥有以下目录.aws-sam/build/Logical ID Of Lambda Function。在里面你会看到你的 python 包和它们的依赖已经安装好了,就像你运行 pip download package 并解压了 wheel 文件一样。

现在,SAM 已专门为 Lambda 准备了 python 文件,您可以根据需要继续创建 Lambda 层。 Configuring Lambda Layers

由于我已经使用 AWS SAM CLI 在本地运行 Lambda 函数,这对我来说是创建层的最简单方法。

【讨论】:

【参考方案11】:

如果您尝试在 Linux 环境中运行安装在 Mac 上的 Pillow(例如,在 Mac 上构建 AWS Lambda,然后将其部署到 Linux 运行时),则可能会发生这种情况。

为确保您为正确的平台安装它,请执行以下操作:

pip3 install --platform manylinux1_x86_64 --only-binary=:all:

在指定--platform 时需要--only-binary=:all:,并且可以通过查看https://pypi.org/project/Pillow/7.2.0/#files(例如)找到平台本身——平台是文件名的最后一部分,例如win32、manylinux1_x86_64、manylinux1_i686等

这避免了需要运行 Linux 来安装 Pillow 的 Linux 版本。

【讨论】:

【参考方案12】:

我将 Flask 与 Google App Engine 一起使用。我通过这个命令安装了模块 Pillow:

pip install -t lib pillow

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

libraries:
- name: PIL
  version: latest

【讨论】:

以上是关于ImportError:无法导入名称 _imaging的主要内容,如果未能解决你的问题,请参考以下文章

ImportError:无法使用 Flask 导入名称“app”

ImportError:无法导入名称 _imaging

ImportError:无法导入名称 _UNPACK_INT

ImportError:无法导入名称“_validate_lengths”

ImportError:从 sklearn 导入 TfidfVectorizer 时无法导入名称 __check_build

ImportError:无法导入名称“_softmax_backward_data”