我安装了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
你知道问题可能是什么吗?
答案 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)
你的枕头版本是什么?
Pillow&gt; = 2.1.0不再支持import _imaging
。请改用from PIL.Image import core as _imaging
。 Link 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-使用泊坞窗。
如果尚未安装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
答案 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