45
votes

I installed Pillow, and after I want to do:

from PIL import Image

I get the following error:

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

However, if I import these separately, everything is fine, ie:

import _imaging
import Image

Do you know what the problem might be?

10

10 Answers

36
votes

I ran into this problem as well. It can happen if you have PIL installed, then install Pillow on top of it.

Go to /usr/local/lib/python2.7/dist-packages/ and delete anything with "PIL" in the name (including directories). If the Pillow .egg file is there you might as well delete that too. Then re-install Pillow.

substitute "python2.7" for the version of python you're using.

38
votes

This also happens if you built Pillow in one OS and then copied the contents of site-packages to another one. For example, if you are creating AWS Lambda deployment package, that's the error you will face when running the Lambda function. If that's the case, then Pillow needs to be installed in a Amazon Linux instance and you have to use the resulting site-packages in your deployment package. See instructions and details here:

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

32
votes

I had the same problem so I solved that by updating this package using the command below:

pip install -U Pillow
4
votes

What is your version of pillow?

enter image description here

Pillow >= 2.1.0 no longer supports import _imaging. Please use from PIL.Image import core as _imaging instead. Here's the official documentation.

1
votes

For pillow to work PIL must be in /usr/local/lib/python2.7 or3/dist-packages/PIL.py.

In dist-packages PIL.py should have a folder.

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

PIL != PiL

1
votes

I have got the same error with Python 3.6. Upgrading Pillow did the job for me.

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

Probably for other python versions use your version instead of 3.6.

0
votes

I had the same problem when it tried to deploy a lambda package, the thing is that you have to precompile the package emulating the lambda architecture/runtime that you are going to use, otherwise you'll get cannot import name _imaging. 2 ways of solving this:

1 - spin up an EC2 Amazon Linux instance.( i will only cover this part)

2 - Use dockers.


Short solution

  1. Install Python 3 in Amazon Linux 2 intance. (Must be python3.X you plan to use in lambda)
  2. Install a virtual environment under the ec2-user home directory.
  3. Activate the environment, and then install Boto 3.
  4. Install Pillow
  5. Create a ZIP archive with the contents of the library(PIL and Pillow.libs)
  6. Add your function code to the archive.
  7. Update your the lambda.(AWS CLI)

Long solution

  1. If Python 3 isn't already installed, then install the package using the yum package manager.

    $ sudo yum install python3 -y

  2. Create a virtual environment under the ec2-user home directory

    The following command creates the app directory with the virtual environment inside of it. You can change my_app to another name. If you change my_app, make sure that you reference the new name in the remaining resolution steps.

    $ python3 -m venv my_app/env

  3. Activate the virtual environment and install Boto 3

    Attach an AWS Identity and Access Management (IAM) role to your EC2 instance with the proper permissions policies so that Boto 3 can interact with the AWS APIs. For other authentication methods....For a quick use you can set your credential using $ aws confifure see documentation ( you will need this in step 7)

3.1 Activate the environment by sourcing the activate file in the bin directory under your project directory.

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

3.2. Make sure that you have the latest pip module installed within your environment. $ pip install pip --upgrade

3.3 Use the pip command to install the Boto 3 library within our virtual environment.

   `pip install boto3`
  1. Install libraries with pip.

    $ pip install Pillow

4.1 Deactivate the virtual environment.

 `$ deactivate`
  1. Create a ZIP archive with the contents of the library.

    change directory to where pip is installes. it should be something like /my_app/env/lib/python3.x/site-packages.

IMPORTANT: the key here is to zip the file inside site-packages into your lambda.(i only used PIL and Pillow.libs to save space but you can zip everything)

5.1 ZIP everything thats inside the PIL folder.

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

   add the Pillow.libs to your ZIP

   `zip -gr PIL.zip Pillow.libs`
  1. Add your function code to the archive. you can do this in the console if it just on file of code, but i recomend doing it in this step.If you don't have your code,just create a file using vi or nano and save it with the name that your lambda handler will use (in this case will use lambda_function.py).

    zip -g PIL.zip lambda_function.py

  2. Update your the lambda.(AWS CLI) if you haven't create a lambda function,do it now before updating the function from the aws cli, make sure that you have the right permission to update lambda from the aws cli.

    change LAMBDAFUNCTIONNAME for your function name

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

Getting out of the first loop of hell

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

This may be a niche solution but I was able to fix this problem on Pycharm by going to file->settings->python interpreter and clicking the upgrade symbol next to the pillow package.

0
votes

Quick solution - import PyQt5 as well, you will not get that error message.

import PyQt5

from PIL import ImageGrab

-1
votes

I'm using Flask with Google App Engine. I have the module Pillow installed via this command:

pip install -t lib pillow

I fixed this error by defined PIL in my app.yaml file:

libraries:
- name: PIL
  version: latest