ImportError: не удается импортировать имя _imaging

#python #matplotlib

#python #pip #python-imaging-library #отображение

Вопрос:

Я установил 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
 

Комментарии:

1. Попробуйте это сначала, прежде чем реализовывать «ответ» выше. Это решение работает для меня.

Ответ №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

Комментарии:

1. Я использую CodeBuild в сочетании с репозиторием эластичных контейнеров. ECR используется для хранения образа Docker, используемого CodeBuild. Я использовал изображение, основанное на изображении python: 3.5.2, и у меня появилось сообщение об ошибке. Как только я переключился на amazonlinux: последнюю версию и установил в нее Python вручную, проблема была исправлена. Большое спасибо за ваше понимание!

2. Рад, что это помогло 🙂

3. Означает ли это, что я не могу создать zip-файл с соответствующим содержимым на моем Mac?

4. Это решение не будет работать для меня, потому что я пытаюсь создать переносимое приложение, используя встроенный zip-файл python. Похоже, что Pip больше не работает и во встроенном python, поэтому я также не могу установить его через встроенный интерпретатор.

Ответ №3:

Я также столкнулся с этой проблемой. Это может произойти, если у вас установлен PIL, затем установите Pillow поверх него.

Перейдите в /usr/local/lib/python2.7/dist-packages/ и удалите все, что содержит «PIL» в имени (включая каталоги). Если файл Pillow .egg есть, вы также можете удалить его. Затем переустановите Pillow.

замените «python2.7» на версию python, которую вы используете.

Комментарии:

1. На моем Mac мне пришлось сделать это в /usr/local/lib/python2.7/site-packages исправленном состоянии, спасибо.

2. В Ubuntu я запускал sudo pip3 uninstall uninstall pip3 4 раза (потому что всегда оставалось что-то, что нужно было удалить), пока удалять было нечего. А потом бегом pip3 install -U pillow --user , больше никаких ошибок от Pillow.

3. Спасибо! pip удалить подушку pip установить подушку было достаточно

4. Спасибо, что вы привели меня к решению. В Ubuntu 16.04. У меня были проблемы с запуском в Python3. Мне было достаточно удалить «официальный» пакет python3-pil (т.Е. sudo apt-get remove python3-pil ), Потому что я установил Pillow через pip

5.Установка и переустановка подушки сработали отлично. pip удаление подушки pip установка -U подушка

Ответ №4:

Какова ваша версия pillow?

введите описание изображения здесь

Подушка> = 2.1.0 больше не поддерживается import _imaging . Пожалуйста, используйте from PIL.Image import core as _imaging вместо этого. Вот официальная документация.

Комментарии:

1. Я редактирую в PILImage.py с помощью из PIL. Ядро импорта изображения как _imaging и значение исключения: невозможно импортировать имя «ядро»

Ответ №5:

Я получил ту же ошибку с Python 3.6. Обновление Pillow сделало работу за меня.

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

Вероятно, для других версий python используйте вашу версию вместо 3.6.

Ответ №6:

У меня была такая же проблема, когда он пытался развернуть лямбда-пакет, дело в том, что вам нужно предварительно скомпилировать пакет, эмулирующий лямбда-архитектуру / среду выполнения, которую вы собираетесь использовать, иначе вы получите cannot import name _imaging . 2 способа решения этой проблемы:

1 — раскрутите экземпляр EC2 Amazon Linux. (я расскажу только об этой части)

2 — Используйте docker.


Короткое решение

  1. Установите Python 3 в Amazon Linux 2 intance. (Должен быть python3.X, который вы планируете использовать в lambda)
  2. Установите виртуальную среду в домашнем каталоге ec2-user.
  3. Активируйте среду, а затем установите Boto 3.
  4. Установите подушку
  5. Создайте ZIP-архив с содержимым библиотеки (PIL и Pillow.libs).
  6. Добавьте код вашей функции в архив.
  7. Обновите свой лямбда-код.(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 мог взаимодействовать с API AWS. Для других методов аутентификации …. Для быстрого использования вы можете настроить свои учетные данные с помощью $ aws confifure см. Документацию (это понадобится на шаге 7).

3.1 Активируйте среду, выбрав файл activate в каталоге 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.библиотеки для экономии места, но вы можете заархивировать все)

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_function.py ).

    zip -g PIL.zip lambda_function.py

  2. Обновите свой лямбда-код.(AWS CLI) если вы еще не создали лямбда-функцию, сделайте это сейчас, прежде чем обновлять функцию из командной строки aws, убедитесь, что у вас есть правильное разрешение на обновление lambda из командной строки aws.

    измените 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:

Для работы pillow PIL должен быть /usr/local/lib/python2.7 or3/dist-packages/PIL.py включен.

В dist-пакетах PIL.py должна быть папка.

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

PIL != PiL

Комментарии:

1. И, кстати, у PIL есть папка в /usr/local/lib/python2.7/dist-packages/PIL

2. импортировать PIL не импортировать PiL.

3. Чувак, как я уже сказал, PiL был опечаткой. Первоначально я импортировал PIL: D, и все равно это не работает

4. Попробуйте python3 импортировать PIL

Ответ №8:

Это может произойти, если вы пытаетесь запустить Pillow, установленный на Mac, в среде Linux (например, например, создание AWS Lambda на Mac, а затем развертывание его в среде выполнения Linux).

Чтобы убедиться, что вы устанавливаете его для правильной платформы, выполните следующие действия:

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

--only-binary=:all: Требуется при указании --platform , а саму платформу можно найти, посмотрев на https://pypi.org/project/Pillow/7.2.0/#files (например) — платформа — это последняя часть имени файла, например, win32, manylinux1_x86_64, manylinux1_i686 и т.д.

Это позволяет избежать необходимости запускать Linux для установки сборки Pillow для Linux.

Комментарии:

1. вы также должны убедиться, что pip3 ссылается на правильную версию Python. Если ваша лямбда-функция Python3.8, вам лучше использовать pip3.8

Ответ №9:

Это может быть нишевым решением, но я смог решить эту проблему в Pycharm, перейдя file->settings->python interpreter и щелкнув символ обновления рядом с пакетом pillow.

Ответ №10:

Быстрое решение — также импортируйте PyQt5, вы не получите это сообщение об ошибке.

импорт PyQt5

из PIL импортируйте ImageGrab

Ответ №11:

Как упоминалось в некоторых других ответах, это может произойти, когда вы создаете Pillow на macOS и пытаетесь импортировать PIL в другую ОС, например, в какой-нибудь версии Amazon Linux.

Мой точный вариант использования заключался в том, чтобы упаковать imagehash в виде лямбда-слоя, который включает pillow в качестве зависимости. Следующее руководство отлично сработало для меня для всех пакетов python.

  1. Установите установку SAM CLI SAM
  2. Создайте свой скрипт на python с определенным обработчиком lambda
  3. Создайте свой файл template.yml с определенной лямбда-функцией. Ваш CodeUri должен быть относительным путем к вашему скрипту python.
  4. Добавьте пакет, для которого вы пытаетесь создать слой, в свой requirements.txt .
  5. Выполните следующую команду SAM sam build -t path_to_template
  6. Теперь у вас будет следующий каталог .aws-sam/build/{Logical ID Of Lambda Function} . Внутри вы увидите, что ваши пакеты python и их зависимости были установлены так же, как если бы вы запустили pip download package и разархивировали файлы wheel.

Теперь файлы python были подготовлены SAM специально для Lambda, и вы можете продолжить создание своего лямбда-слоя по желанию. Настройка лямбда-слоев

Поскольку я уже использую AWS SAM CLI для локального запуска лямбда-функций, для меня это был самый простой способ создания моих слоев.

Ответ №12:

Решение

  1. pip удалить PIL
  2. pip удалить Pillow
  3. pip install Pillow

Ответ №13:

Я использую Flask с Google App Engine. У меня установлен модуль Pillow с помощью этой команды:

 pip install -t lib pillow
 

Я исправил эту ошибку, определив PIL в моем файле app.yaml:

 libraries:
- name: PIL
  version: latest