Вопрос или проблема
Я получаю ошибку.
#! /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.
Теория
Причины возникновения этой ошибки могут варьироваться от тривиальных до более сложных проблем с конфигурацией. Основными причинами могут быть:
- Отсутствие установки Pillow: Python не может найти
PIL
, если Pillow не была установлена должным образом. - Неправильная установка: Остатки устаревших библиотек могут вызывать конфликты.
- Проблемы с путями: Вероятный конфликт в версиях python и путях на вашем устройстве.
- Проблемы с 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 и путями, по которым интерпретатор ищет установленные модули. Использование виртуальных окружений также станет хорошей практикой для изолирования и управления зависимостями.