Как удалить библиотеку в python через pip
Перейти к содержимому

Как удалить библиотеку в python через pip

  • автор:

Управление Python пакетами с помощью pip

Данная статья является пошаговым введением в базовые навыки управления пакетами Python с помощью команды pip. В ней будут освещены следующие моменты:

  • Поиск пакетов
  • На какую информацию следует обратить внимание в пакете
  • Установка пакетов
  • Визуализация установленных пакетов
  • Установка пакетов из файла requirements.txt
  • Удаление пакетов с помощью pip

Поиск пакетов Python

Рассмотрим случай использования пакета emoji в качестве примера. Для поиска Python пакетов, связанных с emoji, перейдём на веб сайт PyPi и через окно поиска в правом верхнем углу страницы поищем emoji.

Обратите внимание на колонку «Weight*» в середине таблицы. Это ключевая информация. Значение веса – это специфический рейтинг, который сайт рассчитывает для каждого пакета, чтобы ранжировать результаты поиска.

Согласно самому сайту, то рейтинг вычисляется на основе полей: имя, сводка, ключевые слова, описание, автор, мейнтейнер. Означает ли что найден лучший пакет? Не обязательно. Несмотря на необычность, сторонние пакеты своим присутствием могут затенять emoji.

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

В какой среде будет работать emoji? Приложение на основе терминала или, возможно, веб-приложение Django? Если нужно отобразить emoji в веб-приложении django, то лучше воспользоваться пакетом django-emoji. Для нашего случая предпочтительным вариантом является emoji для Python приложения командной строки.

На что нужно обратить внимание?

Далее приведены характеристики хорошего пакета Python:

  • Достойная документация: прочитав её, сразу становится понятно, соответствует ли пакет потребности или нет;
  • Зрелость и стабильность: если он существует уже продолжительное время, а также последними версиями;
  • Количество контрибьюторов: востребованные пакеты (особенно сложные), как правило, контрибьютятся большим количеством разработчиков;
  • Техническое обслуживание: он регулярно проходит техническое обслуживание.

Не стоит слишком полагаться на статус разработки, указанный для каждого пакета, то есть пакет может иметь баллы стабильности, например, 4 — Beta или 5 — Production / Stable. Эта классификация заполняется самим разработчиком и не обязательно должна быть правдивой.

На нашем случае документация выглядит достаточно прилично. В верхней части страницы показано графическое представление работы пакета emoji в интерпретаторе Python.

>> import emoji >> print(emoji.emojize('Python is :thumbs_up_sign:')) Python is �� >> print(emoji.emojize('Python is :thumbsup:', use_aliases=True)) Python is �� 

Документация для пакета emoji также рассказывает об его установке, как внести свой вклад в разработку, а также ссылку на страницу с исходниками, что является отличным источником полезной информации о нём.

Установка пакетов Python с помощью pip

Предполагается, что Python уже установлен в вашей системе. Далее нужно проверить, установлен ли pip, запустив pip -version в терминале.

C:\Users\prog>pip --version pip 9.0.1 from c:\python\lib\site-packages (python 3.6) 

Начиная с Python 3.4, pip входит в комплект поставки.

Также рекомендуется использовать виртуальную среду для управление рабочим процессом разработки и упрощения работы над несколькими проектами одновременно без возникновения конфликтов в их зависимостях.

Отличное вариант для начала изучения консольной программы — это запустить её без каких-либо опций в терминале.

Рассмотрим команду freeze, которая является ключевой в разрешении зависимостей. Запуск pip freeze отображает список всех установленных пакетов Python. Если выполнить с инструкцию с активной виртуальной средой, то будет распечатан пустой список

Для установки пакета, выполним pip install emoji в терминале. В результате будет получен следующий вывод:

C:\Users\prog>pip install emoji==0.4.5 Collecting emoji==0.4.5 Downloading emoji-0.4.5.tar.gz Installing collected packages: emoji Running setup.py install for emoji . done Successfully installed emoji-0.4.5 

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

Конкретная версия пакета (==):

pip install emoji==0.4.1 

Версия, отличная от указанной (! =):

pip install emoji!=0.4.1 

Версия, равная или превышающая конкретную версию (> =):

pip install emoji>=0.4.0 

Версия пакета в указанном диапазоне (> = X.Y.T,

pip install emoji>=0.4.0,  

Как правило, наиболее полезным спецификатором является == для установки конкретной версии пакета. Если не будет ограничения, то будет установлена последняя версия пакета.

Запустим pip freeze после установки пакета emoji.

pip freeze emoji==0.4.5 

Теперь pip freeze отображает пакет emoji как установленная зависимость с определенным номером версии.

Получение списка установленных Python пакетов

Для выгрузки установленных пакетов в файл requirements.txt выполним программу pip freeze с перенаправлением выходного потока в файл.

pip freeze > requirements.txt 

Визуализация установленных пакетов

Добавим пакет pipdeptree в нашу виртуальную среду, который отображает дерево зависимостей пакетов. Продолжим установку последней версии, выполнив следующую команду:

pip install pipdeptree 

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

pip freeze emoji==0.4.5 Pillow==5.0.0 pipdeptree==0.10.1 

Теперь запустим pipdeptree в терминале, чтобы узнать, что он делает.

C:\Users\prog>pipdeptree emoji==0.4.5 Pillow==5.0.0 pipdeptree==0.10.1 - pip [required: >=6.0.0, installed: 9.0.1] setuptools==28.8.0 

В результате получаем более информативный вывод, включая зависимости и минимальные версии, необходимые для правильной работы зависимых пакетов.

Также замечаем другие пакеты, которые отсутствуют в списке freeze – pip и setuptools. Причина в том, что по умолчанию pip freeze не перечисляет пакеты, от которых зависит сам pip.

Теперь запустим pip freeze -all для отображения всех установленных пакетов:

C:\Users\prog>pip freeze --all emoji==0.4.5 Pillow==5.0.0 pip==9.0.1 pipdeptree==0.10.1 setuptools==28.8.0 

Ещё одно преимущество использования pipdeptree заключается в том, что она предупреждает нас о конфликтующих зависимостях, в том числе о циклических (когда пакеты зависят друг от друга), но это очень редко встречающийся случай.

Установка пакетов Python из файла requirements.txt

Если есть файл requirements.txt, то можно установить все перечисленные там пакеты, выполнив следующую команду:

pip install -r /dir/to/the/file/requirements.txt 

Это очень удобно, когда нужно реплицировать виртуальные среды на другие компьютеры.

Удаление пакетов Python с помощью Pip

Удаление отдельных пакетов Вы можете сделать это, запустив, например, pip uninstall alembic.

Также допустимо удаление нескольких пакетов сразу, используя следующий синтаксис командной строки:

pip uninstall package1 package2 . 

Другим вариантом является чтение списка пакетов для удаления из файла requirements.txt. Как и у его установочного варианта, если есть файл requirements.txt, то можно удалить все перечисленные там пакеты аналогично:

pip uninstall -r /dir/to/the/file/requirements.txt 

Если попытаться выполнить эту инструкцию программа покажет множество предупреждений и спросит продолжать несколько раз (по одному разу для каждого пакета), на который нужно ответить y. Чтобы избежать этого, используя флаг -y:

pip uninstall -y -r requirements.txt 

Как удалить Python с Mac

Многие пользователи при попытке удалить пакет Python с Mac компьютера сталкиваются с проблемами. В этой статье мы приведем полное руководство как безопасно удалить Python. Мы покажем ручной способ и с помощью специального деинсталятора.

удаление Python c Mac

Cамый быстрый способ удалить Python с Mac

Если у вас нет времени изучать все способы удаления Python, и вам нужно быстро удалить его со всеми его служебными файлами и папками, используйте App Cleaner & Uninstaller.

Это специальный деинсталлятор, который поможет вам полностью удалить любое приложение с Mac вместе с их кэшами, логами, элементами запуска программ, настройками и расширениями браузеров. Его можно скачать бесплатно.

App Cleaner & Uninstaller

Как удалить Python с помощью App Cleaner & Uninstaller – Видео

Что такое Python?

Python – чрезвычайно простой и гибкий язык программирования, который позволяет разработчикам эффективно решать задачи написания сценариев, быстрого прототипирования и исследовательского программирования. Он начал разрабатываться в конце восьмидесятых годов сотрудниками Голландского Национального Исследовательского Института Математики и Компьютерных Наук Guido van Rossum. Сегодня поддержка программы осуществляется командой разработчиков того же учреждения.

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

Окно Python

Обратите внимание, что Apple в своих компьютераах по умолчанию установила и предоставила Python 2.7 начиная с Mac OS X 10.8. Если вы используете более ранние версии операционной системы Mac, но загрузили новую версию приложения с его официального сайта, вам следует быть осторожными при попытке удалить программу.

Никогда не изменяйте и не удаляйте файлы, относящиеся к предустановленному Python от Apple.

Как удалить Python 3 на Mac ручным способом

Чтобы полностью и безопасно удалить Python 3 на Mac, выполните следующие действия.

    Сначала выйдите из приложения и закройте все запущенные процессы приложения в фоновом режиме.

Выход из Python

Выход из Python

  • Кроме того, мы рекомендуем вам открыть приложение Мониторинг Системы (Activity Monitor) и проверить, активны ли еще какие-то процессы. Если да, выберите их и нажмите кнопку Закрыть (Х).
    Мониторинг системы показывающий процессы Python
  • Затем перейдите в папку Приложения в Finder и удалите Python в Корзину. Убедитесь, что вы удалили пакет Python полностью, а не только его отдельные файлы.
    удаление Python в Корзину
  • Теперь мы подошли к последнему важному шагу – поиску и удалению всех служебных файлов, созданных Python во время его использования. Служебные файлы хранятся в папке Библиотеки.
    Finder показывающий служебные файлы Python
  • В нашем случае во вложенных подпапках папки Библиотеки мы обнаружили следующие файлы:

    Cписок файлов Python

    Также, в папке пользователя хранятся другие скрытые файлы Python. Вы можете найти их, только если сделаете все ваши скрытые файлы видимыми. Для этого воспользуйтесь бесплатным приложением Funter, которое позволяет отображать и скрывать скрытые файлы одним кликом мыши.

    Список скрытых служебных файлов приложения:

    Список службеный файлов Python

    скрытые файлы Python

    Еще раз, вам нужно будет найти все служебные файлы Python и переместить их в Корзину. Это можно легко сделать с помощью приложения Funter.

    Для некоторых пользователей эта задача может быть слишком сложной. Существует более простой способ полностью удалить приложения на Mac.

    Как деинсталлировать Python с помощью Терминала

    Если вы знакомы с приложением Терминал, вы можете использовать командную строку для удаления приложений с вашего Mac. Для этого выполните следующие действия:

    1. Откройте папку Приложения и удалите Python в Корзину.
    2. Откройте приложение Терминал и введите в окне следующую командную строку:
      ~ [имя пользователя] sudo rm -rf/Applications/Python\3.6/
    3. Для подтверждения удаления вам потребуется ввести пароль администратора.

    Терминал показывающий команду по удалению Python

    Обратите внимание , не рекомендуется использовать этот метод удаления пользователям, незнакомым с командами Терминала.

    Если вы ищете самый быстрый и безопасный способ деинсталляции, вам лучше использовать специальную программу App Cleaner & Uninstaller.

    Как удалить Python в несколько кликов

    App Cleaner & Uninstaller – эффективный помощник для быстрого и легкого удаления любой программы с Mac. Он автоматически находит все служебные файлы приложений, поэтому вы можете быть уверены, что приложение будет полностью удалено с вашего Mac, не оставив никаких следов.

    Кроме того, если вы уже удалили некоторые приложения обычным перетаскиванием в Корзину, вы можете проверить, остались ли их служебные файлы на вашем жестком диске, и избавиться от них несколькими щелчками мыши. Вы можете скачать App Cleaner & Uninstaller по этой ссылке.

    Далее следуйте этим шагам:

    App Cleaner & uninstaller удаляет Python

    Обратите внимание, что App Cleaner & Uninstaller при удалении перемещает файлы в Корзину, поэтому не забудьте очистить Корзину.

    Это все. Мы надеемся, что эта статья помогла вам полностью удалить Python с вашего компьютера Mac без единых проблем. Если у вас остались вопросы, пишите в комментариях, мы с радостью ответим.

    Как устанавливать пакеты в Python — с PIP и без

    Прежде чем что-то устанавливать, давайте разберёмся, что такое пакет, чем он отличается от модуля, и как с ним работать. У слова «пакет» применительно к Python два значения.

    C одной стороны, пакеты Python — это Py-приложения, дополнения или утилиты, которые можно установить из внешнего репозитория: Github, Bitbucket, Google Code или официального Python Package Index . На сервере пакеты хранятся в .zip и .tar архивах, либо в дополнительной упаковке — «яйцах» (.egg, старый формат) или «колесах» (.whl). В составе пакета, как правило, есть сценарий установки setup.py, который хранит сведения о зависимостях — других пакетах и модулях, без которых пакет работать не будет.

    С другой стороны, если речь об архитектуре Python-приложения, пакет — это каталог, внутри которого файл __init__.py и, опционально, другие каталоги и файлы .py . Так большую Python-программу разбивают на пакеты и модули. Модуль — файл с исходным кодом, который можно использовать в других приложениях: как «заготовку» для будущих проектов или как часть библиотеки/фреймворка. Но к теме статьи это прямого отношения не имеет, поэтому дальше мы будем говорить только о пакетах из репозиториев.

    Чтобы за секунды устанавливать пакеты со всеми зависимостями, используют менеджер пакетов pip или модуль easy_install . В большинстве случаев рекомендуется использовать pip. И только если у вас есть инфраструктура на пакетах .egg, которые pip не открывает, нужен easy_install.

    Установка PIP для Python 3 и 2

    Если вы используете виртуальные окружения на базе venv или virtualenv, pip уже установлен. Начиная с Python 3.4 (для Python 2 — с версии 2.7.9) pip поставляется вместе с интерпретатором. Для более ранних версий устанавливать менеджер пакетов нужно вручную. Вариантов два:

    1. C помощью скрипта get_pip.py — быстро.
    2. Через setuptools — кроме pip сможем использовать easy_install.

    Вариант 1. Скачиваем скрипт get_pip.py и запускаем в консоли. Для этого открываем терминал через Win+R>"cmd">OK и пишем:

    Остальное установщик сделает сам: если нужно, попутно установит wheel (для распаковки .whl-колес) и setuptools. Чтобы запретить инсталляцию дополнительных инструментов, можно добавить в строку ключи --no-setuptools и/или --no-wheels.

    Если возникает ошибка, путь к Python не прописан в переменной среды $PATH. Нужно либо найти эту переменную в системном реестре и задать её значение, либо каждый раз указывать полный путь до python.exe, а за ним уже имя исполняемого Py-файла:

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

    Вариант 2. Скачиваем архив с setuptools из PYPI и распаковываем в отдельный каталог. В терминале переходим в директорию setuptools c файлом setup.py и пишем:

    python setup.py install

    Обновить pip для Python в Windows можно так:
    python pip install -U pip

    Если это не работает, нужно добавить путь к папке с pip в $PATH.

    Установка пакета в pip

    Пора запустить pip в Python и начать устанавливать пакеты короткой командой из консоли:

    pip install имя_пакета

    При установке в Windows, перед pip нужно добавить "python -m".

    Обновить пакет не сложнее:

    pip install имя_пакета -U

    Если у вас последняя версия пакета, но вы хотите принудительно переустановить его:

    pip install --force-reinstall

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

    Найти конкретный пакет по имени можно командой "pip search". О других командах можно прочесть в справке, которая выдается по команде "pip help".

    Удаление пакета Python

    Когда пакет больше не нужен, пишем:

    pip uninstall имя_пакета

    Как установить пакеты в Python без pip

    Формат .egg сейчас используют не часто, поэтому pip его не поддерживает. Модуль easy_install умеет устанавливать как .egg, так и обычные пакеты, но есть у него важные минусы:

    • он не удаляет пакеты,
    • он может пытаться установить недозагруженный пакет.

    Использовать easy_install можно сразу после установки setuptools. Хранится модуль в папке Scripts вашего интерпретатора. Если у вас в $PATH верно прописан путь, ставить пакеты из PYPI можно короткой командой:

    Для обновления после install и перед именем пакета нужно ставить ключ -U. Откатиться до нужной версии можно так:

    Если нужно скачать пакет из альтернативного источника, вы можете задать URL или локальный адрес на компьютере:

    Чтобы узнать об опциях easy_install, запустим его с ключом -h:

    Список пакетов, установленных через easy_install, хранится в файле easy-install.pth в директории /libs/site-packages/ вашего Python.

    К счастью, удалять установленные через easy_install пакеты можно с помощью pip. Если же его нет, потребуется удалить пакет вручную и стереть сведения о нем из easy-install.pth.

    Теперь вы умеете ставить и удалять пакеты для вашей версии Python.

    Кстати, для тех, кто изучает Python, мы подготовили список полезных и практичных советов.

    Ещё раз про установку PIP на Python. Базовые команды

    В этой статье в очередной раз коснёмся темы установки PIP на Python. Вы узнаете, что делать, если PIP не установлена, как поставить эту систему, а также как выполняется инсталляция на Windows, Mac, Linux и Raspberry Pi. Дополнительно будут рассмотрены вопросы обновления и работы.

    Python, как и любой другой серьёзный язык программирования, поддерживает дополнительные (сторонние) фреймворки и библиотеки. Эти библиотеки устанавливаются разработчиками с простой целью: облегчить себе жизнь и каждый раз не изобретать колесо в новом проекте. Нужные пакеты находятся в PyPI, который можно назвать центральным репозиторием Python и каталогом Python-пакетов (Python Package Index).

    Но скачивать и устанавливать эти пакеты вручную — занятие утомительное, а порой и времязатратное. Лучше всего использовать для этих целей специальный инструмент для Python, делающий процесс проще и быстрее. Как вы уже догадались, речь идёт про PIP. И если PIP не установлен, обязательно восполните этот пробел.

    Что же такое PIP?

    Сама аббревиатура PIP («пип») представляет собой рекурсивный акроним. По сути, это система управления пакетами. Она применяется в целях установки и управления программными пакетами, которые написаны на Python. Ещё систему называют предпочитаемым установщиком программ. А непосредственно pip — это команда, запускающая соответствующую утилиту для установки, переустановки и деинсталляции пакетов, которые находятся в вышеупомянутом PyPI.

    Часто возникает вопрос, а не устанавливается ли PIP одновременно с Пайтоном? Да, если речь идёт о следующих версиях: — Python версии 2.7.9 и выше; — Python версии 3.4 и выше.

    В вышеупомянутых случаях «пип» устанавливается по дефолту и вместе с Python. Но если же речь идёт о более старых версиях, PIP не установлена. Однако установить PIP совсем несложно. Но прежде чем это сделать, рекомендуется проверить свою версию Python, а также то, правильно ли он у вас инсталлирован.

    Проверка версии Python

    Для выполнения проверки Python следует открыть командную строку. Она вам понадобится и при последующих действиях. Следует привыкать работать с командной строкой, т. к. многие операции быстрее, удобнее и нагляднее выполнять именно через неё. Если же вы начинающий системный администратор, знание терминала — это пункт под номером 0 в списке необходимых скиллов.

    Запускаем командную строку следующим образом: 1. На Windows. Используем комбинацию клавиш «Win+X». 2. На Mac. Нажимаем «Command+пробел». 3. На Линукс. Работает комбинация «Ctrl+Alt+T».

    Когда терминал открыт, вводим следующую команду:

     
    python –-version

    Если у вас Linux и Python 3.x, вводим несколько другую команду:

     
    python3 --version

    В итоге вы должны получить актуальную версию Питона, которая установлена на вашу операционную систему. Если же что-то не так, вы получите сообщение, что Пайтон не установлен (Python is not defined).

    Устанавливаем PIP на Windows

    Инструкции, представленные ниже, подойдут для ОС Windows 7/8.1/10. Общий порядок действий, если PIP не установлен, следующий: 1. Скачиваем официальный установочный скрипт с именем get-pip.py. Для начала нажимаем правую кнопку мыши, потом «Сохранить как…». В итоге скрипт сохранится по указанному вами пути (пусть это будет папка «Загрузки»). 2. Открываем терминал (командную строку), после чего переходим к каталогу, где вы поместили файл get-pip.py. 3. Выполняем команду python get-pip.py .

    Всё, установка запустится (installs), и инсталляция модуля будет завершена в сжатые сроки. Способ простой и действенный.

    Устанавливаем на Mac

    В современных версиях Mac как Python, так и PIP уже установлены. Однако со временем они устаревают, что нехорошо, поэтому лучше следить за тем, чтобы на вашем компьютере были актуальные версии. Но если вы хотите работать с той версией Python, которая есть, и желаете инсталлировать последнюю версию системы, сделать это можно простой командой, запустив в терминале следующее:

     
    sudo easy_install pip

    Для установки более новых версий языка программирования Python вам пригодится Homebrew. С его помощью Пайтон устанавливается тоже очень просто (предполагается, что утилита командной строки Homebrew уже установлена):

     
    brew install python

    По итогу получите последнюю версию Python, в которую, кстати говоря, система «пип» уже может входить. Но если же пакет будет недоступен, выполните перелинковку:

     
    brew unlink python && brew link python

    Устанавливаем на Linux

    Для дистрибутивов Linux желательно использовать системный менеджер пакетов и штатные репозитории. Команды могут различаться с учётом конкретного дистрибутива. Для примера возьмём популярный дистрибутив Ubuntu. Если у вас Python 3, в терминале выполняем:

     
    sudo apt install python3-pip

    А потом проверяем, что получилось:

     
    pip3 --version

    Если же речь идёт о Пайтон 2, команды установки и проверки версии будут чуть другими:

     
    sudo apt install python-pip
     
    pip --version

    Как установить PIP на Raspberry Pi

    Если вы являетесь пользователем Raspberry, эта часть статьи для вас. Если же вы даже не в курсе, что такое Raspberry, можете смело пропустить данный абзац.

    Уже начиная с Rapsbian Jessie, система устанавливается по дефолту, то есть вопросов о том, что PIP не установлена, не возникает. Это ещё и причина обновить ОС до Rapsbian Jessie а не использовать Rapsbian Wheezy/Jessie Lite. Однако никто не мешает установить систему и на старую версию.

    Для Python 2 это выглядит следующим образом:

     
    sudo apt-get install python-pip

    Для третьей версии изменения в команде крайне незначительны:

     
    sudo apt-get install python3-pip

    В процессе работы нужно будет применять pip и pip3 соответственно.

    Обновляем PIP для Python

    Для многих разработчиков очень важно иметь последнюю версию установщика программ. Это имеет особое значение, если мы говорим о сохранении приемлемого уровня безопасности, исправлении ошибок (багов) и т. д.

    Обновить PIP не составляет труда: 1. Для Windows. Используем команду python -m pip install -U pip . 2. Для Mac, Линукс либо Raspberry Pi — pip install -U pip .

    Устанавливаем Python-библиотеки посредством PIP

    Когда установка (installing) завершена, «пип» установился и готов к работе. В результате мы можем приступать к установке пакетов с помощью PIP из PyPI. Делается это с помощью простейшего синтаксиса, содержащего минимум кода:

     
    pip install имя_пакета

    По умолчанию с помощью вышеприведённого синтаксиса будет установлена новейшая версия нужного пакета. Но иногда требуется конкретная версия, то есть более старая:

     
    pip install имя_пакаета==1.0.0

    Также вы можете найти конкретный пакет:

     
    pip search "ваш_запрос_поиска"

    Или посмотреть детали уже установленного (installed):

     
    pip show имя_пакета

    Ещё пользователю доступен список всех пакетов, которые установлены:

     
    pip list

    А также список пакетов PIP, которые устарели:

     
    pip list –outdated

    Но это не беда, ведь можно выполнить обновление:

     
    pip install имя_пакета --upgrade

    Однако учтите, что при обновлении старая версия будет удалена. Ещё может возникнуть необходимость в полной переустановке пакета:

     
    pip install имя_пакета --upgrade --force-reinstall

    Совсем несложно и удалить пакет:

     
    pip uninstall имя_пакета

    Это основы, которые должен знать каждый. Если же вас интересует Python-разработка на более продвинутом уровне, добро пожаловать на курсы в OTUS!

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

    Ваш адрес email не будет опубликован. Обязательные поля помечены *