В примерах, представленных в последней главе этой части книги, мы будем уделять большое внимание не только системным интерфейсам, но и принципам разработки программ на языке Python в целом. Попутно будут представлены процедурные и объектно-ориентированные версии одних и тех же примеров, чтобы показать преимущества стратегического мышления.
«Батарейки - в комплекте»
В данной главе и в следующих за ней речь идет одновременно о языке Python и о его стандартной библиотеке - коллекции модулей, написанных на языке Python и C, которые автоматически устанавливаются вместе с интерпретатором. Хотя Python и представляет собой легкий язык сценариев, большая часть операций в реальных разработках на Python выполняется с привлечением этой обширной библиотеки инструментов (по последним подсчетам - несколько сотен модулей), поставляемых вместе с пакетом Python.
В действительности стандартная библиотека обладает настолько широкими возможностями, что нередко можно слышать в отношении Python фразу «batteries included» (батарейки - в комплекте), обычно приписываемую Фрэнку Стаяно (Frank Stajano) и означающую, что все необходимое для практической повседневной деятельности уже присутствует в стандартной библиотеке и может быть импортировано. Несмотря на то, что стандартная библиотека не является частью самого языка, тем не менее она является стандартной частью системы Python, и можно быть уверенным, что она будет доступна везде, где выполняются сценарии. Фактически это одно из наиболее существенных отличий Python от некоторых других языков сценариев - благодаря тому, что в составе Python поставляется огромное количество библиотечных инструментов, для программистов на Python вспомогательные сайты не имеют такого большого значения, как CPAN для программистов на Perl.
Как будет показано далее, стандартные библиотеки выполняют существенную часть задачи программирования на Python. Овладев основами языка, вы заметите, что в основном заняты применением встроенных функций и модулей, поставляемых вместе с системой. С другой стороны, библиотеки обеспечивают все самое интересное. В реальном мире программы становятся интересными, когда в них начинают использоваться службы, находящиеся вне интерпретатора языка: сети, файлы, графические интерфейсы, базы данных и так далее. Все это поддерживается стандартной библиотекой Python.
Помимо стандартной библиотеки для Python существуют дополнительные пакеты, созданные сторонними разработчиками, которые могут быть получены и установлены отдельно. Когда писалась эта книга, большинство таких расширений сторонних разработчиков можно было найти путем поиска в Интернете и по ссылкам на http://www.python.org и на веб-сайте PyPI (ссылка на который также приводится на сайте http://www.python.org). Некоторые сторонние расширения являются крупными системами. Например, расширения NumPy, Djangо и VPython реализуют операции векторной алгебры, обеспечивают конструирование сайтов и предоставляют средства визуализации соответственно.
Если нужно сделать с помощью Python что-либо специальное, есть большая вероятность, что необходимая поддержка уже включена в состав стандартной библиотеки или реализована в виде бесплатного модуля с открытым исходным кодом. Большинство инструментов, используемых в этой книге, входит в стандартный дистрибутив Python, а то, что должно устанавливаться отдельно, будет отмечено особо. Конечно, идиома повторного использования программного кода делает программы зависимыми от используемого в них кода, однако на практике, в чем мы еще не раз убедимся в этой книге, мощные библиотеки с открытыми исходными текстами развиваются очень быстро, не запирая своих пользователей в узком кругу фиксированных возможностей и ограничений.
Знакомство с разработкой системных сценариев
Исследование области системного программирования мы начнем с краткого обзора модулей sys и os из стандартной библиотеки, а затем перейдем к более важным понятиям системного программирования. Из перечня атрибутов этих модулей можно заключить, что это очень крупные модули, - следующий пример интерактивного сеанса был получен в Python 3.1 и в Windows 7 вне среды IDLE:
C:\...\PP4E\System> python
Python 3.1.1 (r311:74483, Aug 17 2009, 17:02:12) [MSC v.1500 32 bit (...)] on win32
Type "help”, "copyright”, "credits” or "license” for more information.
>>> import sys, os
>>> len(dir(sys)) # 65 атрибутов
65
>>> len(dir(os)) # в Windows 122 атрибута, в Unix - больше
122
>>> len(dir(os.path)) # модуль, вложенный в os 52
Содержимое этих двух модулей может отличаться для разных версий Python и платформ. Например, модуль os имеет намного больший размер после сборки Python 3.1 из исходных текстов под Cygwin (Cygwin - система, обеспечивающая Unix-подобную функциональность в Windows; о ней рассказывается во врезке «Подробнее о Cygwin Python для Windows» в главе 5):