Сторонние библиотеки и пакетные менеджеры
Contents
Сторонние библиотеки и пакетные менеджеры#
Сторонние библиотеки#
Пришло время познакомимся с первой сторонней библиотекой для 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