По умолчанию вместе с установкой интерпретатора Python также устанавливается множество дополнительных пакетов/библиотек, которые с помощью импорта соответствующих модулей мы можем использовать в своей программе. Часть из них уже была рассмотрена в предыдущих статьях. Однако кроме встроенных пакетов есть огромнейшее количество пакетов, которые развиваются сообществом (различными компаниями или даже отдельными разработчиками) и которые мы также можем использовать при разработке приложения.
Для управления пакетами - их установки или удаления необходим такой инструмент как менеджер пакетов. Для работы с пакетами Python существует множество менеджеров пакетов, например, pip, conda, pixi, uv и так далее.
Этой статье мы рассмотрим использование менеджера pip, поскольку он является стандартным и наиболее распространенным способом для управления пакетами, и, кроме того, обычно он устанавливается вместе с интерпретатором Python и поэтому обычно уже присутствует в системе. pip загружает пакеты из репозитория PyPI (Python Package Index), который является самым большим репозиторием пакетов Python. Так, на момент написания текущей статьи PyPI насчитывал более 600000 проектов. Репозиторий также доступен по адресу https://pypi.org/. В частности, через веб-интерфейс можно найти нужный пакет, всю связанную с ним информацию, его историю версий и т.д.
Для начала необходимо убедиться, что у вас установлен pip. Если у вас установлен Python, то, скорее всего, pip тоже уже есть. Чтобы проверить наличие pip, откройте терминал (или командную строку) и выполните команду:
pip --version
Если pip установлен, вы увидите версию менеджера пакетов:
eugene@Eugene:~$ pip --version pip 24.0 from /usr/lib/python3/dist-packages/pip (python 3.12) eugene@Eugene:~$
Если pip по какой-то причине вдруг не был установлен, то мы увидим ошибку типа
"pip" не является внутренней или внешней командой, исполняемой программой или пакетным файлом
В этом случае нам надо установить pip. Для этого можно выполнить в командной строке/консоли следующую команду:
python -m ensurepip --upgrade
Если pip ранее уже был установлен, то можно его обновить с помощью команды
python -m pip install --upgrade pip
В операционной системе на базе Linux (Ubuntu, Debian и др.), где используется встроенное управление пакетами, например, через apt или другой пакетный менеджер, перед установкой пакетов Python через pip также необходимо создать виртуальную среду. На Windows использовать виртуальную среду необязательно, но тоже является рекомендуемым подходом при работы с пакетами Python. Виртуальная среда позволяет изолировать пакеты от системных установок Python.
Так, без использования виртуальной среды все устанавливаемые через pip пакеты на Windows устанавливаются глобально. Однако что если после создания первого приложения выйдет новая версия используемого пакета? Если мы захотим использовать для второго проекта новую версию пакета, то из-за глобальной установки пакетов придется обновлять первый проект, который использует старую версию. Это потребует некоторой дополнительной работы по обновлению, так как не всегда соблюдается обратная совместимость между пакетами. Если мы решим использовать для второго проекта старую версию, то мы лишимся потенциальных преимуществ новой версии. И использование виртуальной среды как раз позволяет разграничить пакеты для каждого проекта.
Для работы с виртуальной средой в python применяется встроенный модуль venv. Обычно этот модуль доступен по умолчанию, но на некоторых операционных системах на базе Linux он может остутствовать. В этом случае нам надо установить в ОС пакет python3-venv. Например, установка на Ubuntu/Debian:
sudo apt install python3-venv
Итак, создадим вируальную среду. Вначале определим каталог для проектов и перейдем в него в консоли/командной строке. Затем для создания виртуальной среды выполним следующую команду:
python3 -m venv myvenv
Модулю venv передается название среды, которая в данном случае будет называться "myvenv". Для наименования виртуальных сред нет каких-то определенных условностей.
После этого в текущей папке будет создан подкаталог "myvenv".
eugene@Eugene:/python/metanit$ python3 -m venv myvenv eugene@Eugene:/python/metanit$ ls -l myvenv total 2 drwxrwxrwx 1 root root 528 Mar 8 14:56 bin drwxrwxrwx 1 root root 0 Mar 8 14:56 include drwxrwxrwx 1 root root 152 Mar 8 14:56 lib lrwxrwxrwx 1 root root 3 Mar 8 14:56 lib64 -> lib -rwxrwxrwx 1 root root 192 Mar 8 14:56 pyvenv.cfg eugene@Eugene:/eugene/python/metanit$
Для использования виртуальную среду надо активировать. И каждый раз, когда мы будем работать с проектом, надо активировать связанную с ним виртуальную среду. Например, активируем выше созданную среду, которая располагается в текущем каталоге в папке "myvenv". Процесс активации немного отличается в зависимости от операционной системы и от того, какие инструменты применяются. Так, в Windows можно использовать командную строку и PowerShell, но между ними есть отличия:
Активация в Windows в коммандной строке
Если наша ОС - Windows, то в папке myvenv/Scripts/ мы можем найти файл activate.bat, который активирует виртуальную среду. Так, в Windows активация виртуальной среды в коммандной строке будет выглядеть таким образом:
myvenv\Scripts\activate.bat
Активация в Windows в PowerShell
Также при работе на Windows в папке myvenv/Scripts/ мы можем найти файлactivate.ps1, который также активирует виртуальную среду, но применяется только в PowerShell. Но при работе с PowerShell следует учитывать, что по умолчанию в этой оболочке запрещено применять скрипты. Поэтому перед активацией среды необходимо установить разрешения для текущего пользователя. Поэтому для активации виртуальной среды в PowerShell необходимо выполнить две следующих команды:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser myvenv\Scripts\Activate.ps1
Активация в Linux и MacOS
Для Linux и MacOS активация будет производиться с помощью следующей команды:
source myvenv/bin/activate
После активации слева текущего пути мы увидим название виртуальной среду в круглых скобках:
(myvenv) eugene@Eugene:/python/metanit$
Пример на основе командной строки Windows:
C:\eugene\python\metanit>python -m venv myvenv C:\eugene\python\metanit>myvenv\Scripts\activate.bat (myvenv) C:\eugene\python\metanit>
Пример на основе консоли Ubuntu:
eugene@Eugene:/python/metanit$ python3 -m venv myvenv eugene@Eugene:/python/metanit$ source myvenv/bin/activate (myvenv) eugene@Eugene:/python/metanit$
После окончания работы с виртуальной средой мы можем ее деактивировать с помощью команды:
deactivate
Для установки пакетов с помощью pip применяется команда
pip install название_пакета
Рассмотрим на примере установки популярного пакета для отрисовки графиков matplotlib. Для его установки после активации виртуальной среды (как было показано выше) выполним команду
pip install matplotlib
И в конце проверим установку, выполнив команду, которая выводит версию matplotlib:
python -c "import matplotlib; print(matplotlib.__version__)"
Полный пример
(myvenv) eugene@Eugene:/python/metanit$ pip install matplotlib Collecting matplotlib Downloading matplotlib-3.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (11 kB) Collecting contourpy>=1.0.1 (from matplotlib) Downloading contourpy-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.4 kB) Collecting cycler>=0.10 (from matplotlib) Downloading cycler-0.12.1-py3-none-any.whl.metadata (3.8 kB) ..................................................................... Downloading six-1.17.0-py2.py3-none-any.whl (11 kB) Installing collected packages: six, pyparsing, pillow, packaging, kiwisolver, fonttools, cycler, contourpy, python-dateutil, matplotlib Successfully installed contourpy-1.3.1 cycler-0.12.1 fonttools-4.56.0 kiwisolver-1.4.8 matplotlib-3.10.1 packaging-24.2 pillow-11.1.0 pyparsing-3.2.1 python-dateutil-2.9.0.post0 six-1.17.0 (myvenv) eugene@Eugene:/python/metanit$ python -c "import matplotlib; print(matplotlib.__version__)" 3.10.1 (myvenv) eugene@Eugene:/python/metanit$
С помощью команды pip list можно получить список всех установленных пакетов и их версий:
(myvenv) eugene@Eugene:/python/metanit$ pip list Package Version --------------- ----------- contourpy 1.3.1 cycler 0.12.1 fonttools 4.56.0 kiwisolver 1.4.8 matplotlib 3.10.1 packaging 24.2 pillow 11.1.0 pip 24.0 pyparsing 3.2.1 python-dateutil 2.9.0.post0 six 1.17.0 (myvenv) eugene@Eugene:/python/metanit$
Как видно из консольного вывода, несмотря на то, что был установлен только один пакет, вместе с ним также был установлен набор других пакетов, от которых зависит основной пакет.
Если надо получить информацию по какому-то конкретному пакету, то можно использовать команду
pip show имя_пакета
Например, получим информацию по matplotlib:
(myvenv) eugene@Eugene:/python/metanit$ pip show matplotlib Name: matplotlib Version: 3.10.1 Summary: Python plotting package Home-page: Author: John D. Hunter, Michael Droettboom ................................ Requires: contourpy, cycler, fonttools, kiwisolver, numpy, packaging, pillow, pyparsing, python-dateutil Required-by: (myvenv) eugene@Eugene:/python/metanit$
Для удаления пакета применяется команда
pip uninstall имя_пакета
Теперь для демонстрации применим установленный пакет в простейшей программе. Например, выведем показатели популярности языка Python согласно рейтингу TIOBE за 2022 год помесячно. Для этого в текущем каталоге определим файл app.py со следующим кодом:
import matplotlib.pyplot as plt # импортируем функциональность модуля pyplot из пакета matplotlib
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
rates = [13.58, 15.33, 14.26, 13.92, 12.74, 12.2, 13.44, 15.63, 15.74, 17.08, 17.18, 16.66]
# метка по оси X
plt.xlabel("month")
# метка по оси Y
plt.ylabel("rate")
plt.plot(months, rates)
plt.show()
Так как этот код приведен больше для демонстрации, то рассмотрим вкратце, что он делает. Здесь список months хранит сокращенные названия месяцев, а rates - показатели популярности.
С помощью функции xlabel() устанавливаем метку для оси Х, а с помощью функции ylabel() - для оси Y. В функцию plot() передаются
два списка - для отображения по оси X (здесь список months) и по оси Y (здесь список rates). Функция plot() принимает набор значений, которые надо
вывести на графике. С помощью функции show() отображаем график в окне просмотра по умолчанию.
После активации виртуальной среды (если она ранее была деактивирована или не была активирован) запустип скрипт на выполнение:
(myvenv) eugene@Eugene:/python/metanit$ python3 app.py
В итоге нам отобразится следующее окно:
Таким образом, пакетный менеджер pip позволяет устанавливать пакеты Python. А создание виртуальных окружений предоставляет лучший способ работать с Python-проектами, особенно когда нужно установить дополнительные пакеты, такие как matplotlib, без изменения глобальных системных установок. Это изолирует зависимости и предотвращает конфликты с другими проектами и системными библиотеками.