#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.
Короткое решение
- Установите Python 3 в Amazon Linux 2 intance. (Должен быть python3.X, который вы планируете использовать в lambda)
- Установите виртуальную среду в домашнем каталоге ec2-user.
- Активируйте среду, а затем установите Boto 3.
- Установите подушку
- Создайте ZIP-архив с содержимым библиотеки (PIL и Pillow.libs).
- Добавьте код вашей функции в архив.
- Обновите свой лямбда-код.(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 мог взаимодействовать с 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`
- Установите библиотеки с помощью pip.
$ pip install Pillow
4.1 Деактивируйте виртуальную среду.
`$ deactivate`
- Создайте 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`
- Добавьте код вашей функции в архив.
вы можете сделать это в консоли, если это просто файл кода, но я рекомендую сделать это на этом шаге.Если у вас нет своего кода, просто создайте файл с помощью vi или nano и сохраните его с именем, которое будет использовать ваш лямбда-обработчик (в данном случае будет использовать lambda_function.py ).zip -g PIL.zip lambda_function.py
- Обновите свой лямбда-код.(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 должна быть папка.
sudo apt-get update
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.
- Установите установку SAM CLI SAM
- Создайте свой скрипт на 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.
Теперь файлы python были подготовлены SAM специально для Lambda, и вы можете продолжить создание своего лямбда-слоя по желанию. Настройка лямбда-слоев
Поскольку я уже использую AWS SAM CLI для локального запуска лямбда-функций, для меня это был самый простой способ создания моих слоев.
Ответ №12:
Решение
- pip удалить PIL
- pip удалить Pillow
- pip install Pillow
Ответ №13:
Я использую Flask с Google App Engine. У меня установлен модуль Pillow с помощью этой команды:
pip install -t lib pillow
Я исправил эту ошибку, определив PIL в моем файле app.yaml:
libraries:
- name: PIL
version: latest