Сторонние библиотеки и пакетные менеджеры#

Сторонние библиотеки#

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

В качестве примеров сторонних библиотек можно привести numpy, matplotlib, scipy, pandas, scikit-learn, tensorflow, torch, openCV и многие другие. Подавляющее большинство этих библиотек представляет собой проекты с открытым исходным (open source), которые можно использовать в своих научных исследованиях абсолютно бесплатно.

Самые популярные пакетные менеджеры — conda и PyPI.

conda#

Пакетный менеджер conda входит в состав дистрибутива anaconda. Более того в дистрибутив anaconda входит ещё и ряд наиболее востребованных библиотек, например, numpy, matplotlib, pandas, scipy, scikit-image, scikit-learn и др.

Более редкие библиотеки потребуют установки. Пакетный менеджер conda значительно облегчает этот процесс. Установить глобально библиотеку с названием libraryname можно следующей командой.

  conda install libraryname

PyPI#

При установке “голого” python с официального сайта устанавливаются только интерпретатор CPython и опционально пакетный менеджер PyPI (Python Package Index). В ряде дистрибутивов linux установлена 3-я версия python по умолчанию, но обычно без пакетного менеджера.

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

  pip install libraryname

Автор курса рекомендует пользоваться чуть более полной версией.

  python -m pip install libraryname

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

Виртуальные окружения#

Установка библиотеки глобально означает, что библиотека будет доступна для импортирования в любом коде. Такой подход имеет ряд недостатков. Например, если библиотек становиться слишком много, то могут возникнуть проблемы с совместимостью каких-то из них между собой. Такое может возникнуть, если в разных проектах используются разные библиотеки, но библиотеки из одного проекта требуют какой-то пакет одной версии, а библиотеки другой версии требуют тот же пакет, но другой версии (например, какие-то из них давно не обновлялись).

Чтобы избежать таких проблем, рекомендуется использовать виртуальные окружения (virtual environments), которые позволяют создавать отдельные окружения, каждое из которых может иметь свой набор библиотек своих версий. Подробнее о виртуальных окружения в anaconda можно почитать здесь, а в “голом” CPython предусмотрен модуль venv.

Импортирование модулей и сторонних библиотек#

После установки библиотеки её можно импортировать так же, как и модули стандартной библиотеки. При выполнении операции import libraryname интерпретатор python сначала ищет пользовательский модуль в этой же папке (по сути дела файл libraryname.py), затем модуль стандартной библиотеки с таким именем, и в самую последнюю очередь стороннюю библиотеку с таким именем. При этом первое найденное совпадение запускает инициализирующий исходный код этого модуля/библиотеки, а затем в текущем пространстве имен создаются переменные, которые связываются с объектами самой библиотеки.

Самый стандартный импорт модуля или библиотеки выглядит следующим образом.

import math

После выполнения этой команды в текущем пространстве имен создаётся имя math, которые связывается с объектом-модулем модуля стандартной библиотеки math. Через атрибуты этого объекта можно получить доступ ко всем функциям модуля math.

Иногда удобно сократить название модуля. Тогда используется следующая форма импорта с созданием псевдонима.

import numpy as np

В результате импортируется библиотека numpy, но в текущем пространстве имен создаётся имя np, а не numpy. Через имя np получить доступ ко всем методам библиотеки numpy.

Если есть потребность только в одном или нескольких методах модуля/библиотеки, то можно импортировать только них командой следующего вида.

from scipy import integrate

При таком подходе весь инициализирующий код библиотеки scipy все равно выполняется, но в текущем пространстве имен имя integrate связывается только с конкретным методом integrate библиотеки scipy. Непосредственного доступа к библиотеке scipy при таком подходе не предусматривается.

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

from scipy import integrate, interpolate, optimize

Можно комбинировать импортирование конкретного имени с импортированием с созданием псевдонимом.

from matplotlib import pyplot as plt

При такой форме импорта из библиотеки matplotlib импортируется только pyplot, который в текущем пространстве имен связывается с именем plt.

Допускается даже такой синтаксис.

import matplotlib.pyplot as plt