Пакеты Python позволяют разбивать большие системы и систематизировать их модули таким образом, чтобы вы и другие люди могли эффективно использовать и повторно использовать их. Девиз Python «Батареи включены» означает, что он поставляется с предустановленным множеством полезных пакетов в стандартной библиотеке.
Но есть также много удивительных сторонних пакетов, которыми вы можете воспользоваться. В этом руководстве вы узнаете все, что вам нужно знать о том, какие именно пакеты, как импортировать модули из пакетов, исследовать встроенный пакет в стандартной библиотеке Python и устанавливать сторонние пакеты.
Что такое пакеты?
Прежде чем говорить о пакетах, давайте поговорим о модулях. Модули — это исходные файлы с расширением * .py, куда вы (и все остальные) помещаете функции и классы, составляющие вашу программу. Пакеты являются проявлением концепции иерархических пространств имен Python. Цитировать из дзен питона:
«Пространства имен — это одна из отличных идей — давайте сделаем больше!»
Чтобы просмотреть весь Zen of Python, введите import this
в интерактивном сеансе Python:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren’t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one— and preferably only one —obvious way to do it.
Although that way may not be obvious at first unless you’re Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it’s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea — let’s do more of those!
|
Пространства имен помогают в организации кода и предотвращении конфликтов имен. Это очень важно, когда несколько человек работают вместе или когда используют пакеты, разработанные другими людьми.
В то время как пакеты представляют иерархию подпакетов и модулей, которые являются файлами, иерархия не должна основываться на файловой системе, где пакеты и подпакеты являются каталогами и подкаталогами. Это гораздо более гибко, чем это.
Пример пакета
Давайте посмотрим на пакет под названием «ansible». Это не пакет из стандартной библиотеки. Позже вы увидите, как найти и установить сторонние пакеты. Теперь давайте просто проверим структуру файлов каталога.
Пакеты обычно устанавливаются в каталог site-packages интерпретатора Python, который находится где-то (в зависимости от версии, ОС и дистрибутива) в папке «lib». На Mac для Python 2.7 он будет находиться в «<root интерпретатора> /lib/python2.7/site-packages». Вот как организован «ansible» пакет:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
tree ansible -L 1
ansible
├── __init__.py
├── cli
├── compat
├── config
├── constants.py
├── errors
├── executor
├── galaxy
├── inventory
├── module_utils
├── modules
├── parsing
├── playbook
├── plugins
├── template
├── utils
└── vars
15 directories, 2 files
|
Есть два модуля и 15 каталогов. Каждый каталог является подпакетом основного пакета. Заглянув в каталог ansible / utils, мы увидим, что он содержит дополнительные модули и даже еще один подпакет:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
tree ansible/utils -L 1
ansible/utils
├── __init__.py
├── boolean.py
├── cmd_functions.py
├── color.py
├── debug.py
├── display.py
├── encrypt.py
├── hashing.py
├── listify.py
├── module_docs.py
├── module_docs_fragments
├── path.py
├── shlex.py
├── unicode.py
└── vars.py
1 directory, 14 files
|
Путь поиска
Когда вы импортируете модуль, Python выполняет алгоритм поиска на основе пути поиска, который представляет собой список каталогов, с которых начинается поиск. Путь поиска — это список каталогов, доступных через sys.path
, и вы можете управлять им динамически (добавлять, удалять или перемещать элементы в пути поиска). Каталог site-packages всегда там.
Чтобы импортировать модуль path.py из ansible / utils, вам нужно использовать следующую команду:
import ansible.utils.path
Если вы также хотите использовать стандартный модуль os.oath, вы будете использовать следующую команду:
import os.path
Теперь вы можете использовать один или оба модуля пути без конфликтов из-за различий пространства имен, к которому они принадлежат.
Изучение стандартной библиотеки
В стандартной библиотеке много пакетов. Это стоит изучить, когда вам нужно выполнить какую-то задачу, и вы не знаете, как это сделать. Существует очень высокая вероятность того, что для любой задачи общего назначения, такой как математика, интеграция оболочки, интеграция ОС, манипулирование строками, работа в сети и распространенные форматы файлов, в стандартной библиотеке имеется хорошо разработанный, хорошо работающий и хорошо протестированный пакет. ,
Вы действительно можете доверять стандартным библиотечным пакетам, потому что в стандартную библиотеку очень сложно попасть. Либо пакет был разработан основными разработчиками Python, либо он был тщательно проверен и часто активно использовался в качестве сторонней библиотеки, прежде чем превращаться в стандартную библиотеку.
Вот все пакеты в стандартной библиотеке, организованные по темам.
PyPI
Стандартная библиотека потрясающая, но часто вам понадобятся специальные функции, которые не являются стандартными. Это не значит, что вы должны написать это с нуля. У Python есть активное и активное сообщество, которое разрабатывает и свободно делится большим количеством кода. Введите PyPI — индекс пакета Python . PyPI содержит все общедоступные пакеты и предоставляет универсальный магазин для их просмотра.
Просмотр PyPI
PyPI организует пакеты в просматриваемом индексе. Вы можете просматривать и искать по темам, среде, среде, разработке, статусу, целевой аудитории, лицензии, естественному языку, языку программирования (да, есть пакеты Python, которые поддерживают множество языков программирования) и операционной системе.
Существует также различие между пакетами Python 2 и Python 3, и вы можете увидеть, насколько популярен пакет по количеству последних загрузок. Например, пакет ansible доступен в PyPI , а вот его метаданные:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
Downloads (All Versions):
5528 downloads in the last day
72037 downloads in the last week
289967 downloads in the last month
Author: Ansible, Inc.
Home Page: http://ansible.com/
Bug Tracker: http://github.com/ansible/ansible/
License: GPLv3
Categories
Development Status :: 5 — Production/Stable
Environment :: Console
Intended Audience :: Developers
Intended Audience :: Information Technology
Intended Audience :: System Administrators
License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
Natural Language :: English
Operating System :: POSIX
Programming Language :: Python :: 2.6
Programming Language :: Python :: 2.7
Topic :: System :: Installation/Setup
Topic :: System :: Systems Administration
Topic :: Utilities
Package Index Owner: James.Laska, jimi, ansible
Package Index Maintainer: mpdehaan, badger
DOAP record: ansible-2.0.0.2.xml
|
Установка пакетов
Существует два способа установки пакетов из PyPI. Вы можете скачать пакет, а затем запустить python setup.py install
. Но современный способ — использовать pip , setuptools и wheel . Pip расшифровывается как Pip Installs Packages (да, это одна из тех аббревиатур) и является вашим интерфейсом для установки. Если у вас установлен Python 2> = 2.7.9 или Python 3> = 3.4 с python.org, у вас уже есть pip и setuptools, но вам потребуется обновить его до последней версии: pip install -U pip setuptools
или python -m pip install -U pip setuptools
в Windows.
Используйте pip для установки колеса: pip install wheel
.
Если вы используете более раннюю версию Python, рассмотрите возможность обновления. Если вы не можете, вам нужно установить pip, setuptools и wheel самостоятельно. Проверьте инструкции .
Пакеты Python всегда устанавливаются в среду. Обычная практика, которую я не буду здесь рассматривать, — это использование виртуальных сред для управления несколькими независимыми установками Python с разными интерпретаторами и / или разными наборами установленных пакетов.
Лучшие практики
Служба упаковки Python предоставляет множество рекомендаций по передовым методам упаковки. Это важно, потому что это область активного развития, и рекомендации быстро развиваются.
Кроме того, если вы хотите сделать что-то особенное, например, установить пакеты из альтернативных репозиториев вместо PyPI или использовать pip более изощренным способом, вы найдете отличные обсуждения и практические советы.
Вывод
Когда вы новичок в Python, вы изучаете основной язык и весело играете с ним. Довольно скоро вы откроете для себя стандартную библиотеку, и, приобретая больше опыта, вы все больше и больше получаете выгоду от ее богатства.
Следующий этап в вашей эволюции как Pythonista — это включить в ваши системы огромное удивление, которое сообщество Python внесло в PyPI. Пакеты как единица развертывания повторно используемого кода Python включают эту экосистему.