ModuleNotFoundError: No module named ‘PIL’

Вопрос или проблема

Я получаю ошибку.

#! /usr/bin/python3
# 04/10/22 я установил Python версии 3.10.7
# png2jpg.py    
# Не работает

# Traceback (most recent call last):
  # File "/home/andy/Python/png2jpg.py", line 10, in <module>
    # from PIL import Image
# ModuleNotFoundError: No module named 'PIL'

import math 

import os
import sys
from PIL import Image

if len(sys.argv) > 1:
    if os.path.exists(sys.argv[1]):
        im = Image.open(sys.argv[1])
        target_name = sys.argv[1] + ".jpg"
        rgb_im = im.convert('RGB')
        rgb_im.save(target_name)
        print("Сохранено как " + target_name)
    else:
        print(sys.argv[1] + " не найдено")
else:
    print("Использование: convert2jpg.py <файл>")

Я установил Pillow.

pip3 install Pillow

which pip3

/usr/local/bin/pip3

Я использую python3 png2jpg.py

pip3 --version
pip 22.2.2 from /usr/local/lib/python3.10/site-packages/pip (python 3.10)

Я выяснил, что этот скрипт Python работает в UM 20.04.

Я попробовал кое-что новое от Михаила Мба.

pip uninstall PIL
Cannot uninstall requirement PIL, not installed

python3 -m pip install --upgrade pip
Defaulting to user installation because normal site-packages is not writeable
WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Requirement already satisfied: pip in /usr/local/lib/python3.10/site-packages (22.2.2)
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pip/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pip/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pip/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pip/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pip/
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host="pypi.org", port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping
WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host="pypi.org", port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping
WARNING: There was an error checking the latest version of pip.

https://jhooq.com/pip-install-connection-error/

У меня нет файла pip.conf? 🙂

Python позволяет задавать параметры командной строки по умолчанию с помощью файла pip.conf.

Найдите ваш файл pip.conf в зависимости от операционной системы -

2. Unix - $HOME/.config/pip/pip.conf

После некоторых чтений и экспериментов, это сработало для меня:

pip uninstall PIL
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade Pillow

Я также читал, что изменение “PIL” на “pil” сработало как решение для некоторых.

Надеюсь, это поможет.

Ответ или решение

Ошибка ModuleNotFoundError: No module named 'PIL' возникает, когда интерпретатор Python не может найти модуль PIL, который должен быть установлен для использования библиотеки Pillow. Библиотека Pillow является стандартной заменой устаревшего модуля PIL (Python Imaging Library), который интегрирован в неё. Необходимо убедиться в правильной установке этой библиотеки и её доступности для используемой версии Python.

Теория

Причины возникновения этой ошибки могут варьироваться от тривиальных до более сложных проблем с конфигурацией. Основными причинами могут быть:

  1. Отсутствие установки Pillow: Python не может найти PIL, если Pillow не была установлена должным образом.
  2. Неправильная установка: Остатки устаревших библиотек могут вызывать конфликты.
  3. Проблемы с путями: Вероятный конфликт в версиях python и путях на вашем устройстве.
  4. Проблемы с SSL: Ошибки SSL при попытке загрузки библиотек через pip указывают на недоступность библиотеки SSL для Python.

Пример

В предоставленном вами коде вы попытались использовать модуль PIL следующим образом:

from PIL import Image

Применение

1. Проверка установки Pillow

Проверьте, была ли Pillow успешно установлена, выполнив в командной строке:

pip3 show Pillow

Если библиотека установлена, команда покажет такую информацию, как версия библиотеки и её расположение. Если нет, Pillow должна быть переустановлена.

2. Установка и переустановка Pillow

Переустановите Pillow с помощью следующих команд:

pip uninstall Pillow
pip3 install Pillow

Эти команды позволят вам убедиться, что установленная версия – самая последняя и совместимая с используемой версией Python.

3. Проверка путей

Убедитесь, что pip3 и python3 ссылаются на одну и ту же версию Python. Для этого выполните:

which pip3
which python3

Если они показывают разные версии, может понадобиться изменить ваши переменные окружения PATH или использовать виртуальные окружения.

4. Решение проблем с SSL

Если вы сталкиваетесь с предупреждениями SSL, как в вашем примере, добавьте поддержку SSL для Python. На некоторых системах вам может понадобиться установить дополнительные пакеты, такие как libssl-dev для Ubuntu:

sudo apt install libssl-dev

После этого вам может понадобиться перекомпилировать Python с поддержкой SSL:

./configure --with-openssl=<путь-к-вашему-openssl>
make
sudo make install

5. Использование виртуальных окружений

Часто помогает создание виртуального окружения, чтобы изолировать зависимости проекта:

python3 -m venv myenv
source myenv/bin/activate
pip install Pillow

Это позволяет избежать конфликтов между разными проектами. Убедитесь, что после активации окружения ваши вызовы python и pip ссылаются на версии из среды.

6. Проверка и модификация кода

Если испытали все шаги, вы можете попытаться изменить импорт:

from pil import Image

Хотя это и не является стандартным подходом, в некоторых редких случаях неправильные регистры в именах могут вызвать проблемы. Тем не менее, рекомендуется убедиться, что все версии инструментов и библиотек соответствуют стандартам, прежде чем применять такие изменения в коде.

Заключение

Этот подход должен помочь устранить вашу проблему. Важно соблюдать систематичность и аккуратность, следя за используемыми версиями Python и путями, по которым интерпретатор ищет установленные модули. Использование виртуальных окружений также станет хорошей практикой для изолирования и управления зависимостями.

Оцените материал
Добавить комментарий

Капча загружается...