Математический анализ. 3е издание
Скачать 4.86 Mb.
|
764 Глава 29. Использование исключений Типичные проблемы при работе с исключениями Вам едва ли часто придется сталкиваться с проблемами при работе с исключениями и, тем не менее, здесь я дам две общих рекомендации по их использованию (одна из которых касается концепций, с которы ми мы уже встречались). Соответствие строковым исключениям определяется идентичностью объектов, а не равенством значений Теперь, когда исключения, как предполагается, идентифицируются классами, а не строками, эта проблема уходит в разряд устаревших проблем. Однако вам все еще могут встретиться исключения на основе строк в существующем программном коде, поэтому вам стоит знать об этой проблеме. Когда возбуждается исключение (вашей программой или самим интерпретатором), интерпретатор пытается отыскать бли жайшую инструкцию try с соответствующим предложением except – то есть предложение except, в котором указан тот же самый строковый объект (в случае исключений на основе строк) или тот же самый класс, или его суперкласс (для исключений на основе классов). В случае ис пользования строковых исключений важно знать, что соответствие определяется с помощью операции идентичности, а не равенства. Например, предположим, что мы определили два строковых объекта, которые будут использоваться в качестве исключений: >>> ex1 = 'The Spanish Inquisition' >>> ex2 = 'The Spanish Inquisition' >>> ex1 == ex2, ex1 is ex2 (True, False) Оператор == возвращает значение True, потому что объекты имеют оди наковые значения, но оператор is возвращает False, потому что это разные строковые объекты (предполагается, что строки имеют доста точную длину, чтобы устранить влияние внутреннего механизма кэ ширования строк, описанного в главе 6). Таким образом, предложение except , указывающее на тот же самый строковый объект, всегда будет считаться соответствующим: >>> try: ... raise ex1 ... except ex1: ... print 'got it' got it но предложение, где указан объект с тем же значением, но не идентич ный строковому объекту исключения, не будет считаться соответст вующим: Типичные проблемы при работе с исключениями 765 >>> try: ... raise ex1 ... except ex2: ... print 'Got it' Traceback (most recent call last): File " ", line 2, in raise ex1 The Spanish Inquisition Здесь исключение не было перехвачено, потому что объекты не иден тичны. В результате исключение поднимается на верхний уровень про цесса и автоматически выводится содержимое стека и текст исключе ния. Однако, как я уже говорил раньше, в некоторых случаях может получаться так, что различные строковые объекты с одинаковыми зна чениями будут считаться идентичными изза влияния механизма кэ ширования небольших строк в Python (как описывается в главе 6): >>> try: ... raise 'spam' ... except 'spam': ... print 'got it' got it Этот пример работает правильно, потому что две строки отображаются на один и тот же объект в кэше. Напротив, в следующем примере ис пользуются строки достаточной длины, чтобы не попасть в кэш: >>> try: ... raise 'spam' * 8 ... except 'spam' * 8: ... print 'got it' Traceback (most recent call last): File " ", line 2, in raise 'spam' * 8 spamspamspamspamspamspamspamspam Если эти два примера кажутся вам непонятными, просто запомните: в случае применения строк в инструкциях raise и try необходимо ис пользовать один и тот же объект, а не одно и то же значение. Для исключений на основе классов (рекомендуемая ныне методика) все работает точно так же, но язык Python обобщает понятие соответ ствия исключению, добавляя отношение к суперклассу, поэтому та кой проблемы в случае с классами не наблюдается – еще одна причина использовать исключения на основе классов! 766 Глава 29. Использование исключений Перехват ненужных исключений Пожалуй, самая типичная проблема, имеющая отношение к исключе ниям, связана с общими рекомендациями по проектированию, рас сматривавшимися в предыдущем разделе. Старайтесь избегать ис пользования пустых предложений except (можно перехватить такие события, как завершение программы), а также слишком узкоспециа лизированных предложений except (используйте суперклассы катего рий, чтобы избежать проблем сопровождения в будущем, когда в про грамме появятся новые исключения). Заключение по основам языка Поздравляю! Этим разделом заканчивается ваше изучение основ язы ка программирования Python. Если вы забрались так далеко, что чи таете эти строки, можете смело считать себя Официальным Програм мистом на языке Python (и можете не стесняться упоминать о знании этого языка в своих резюме). Вы уже видели почти все, что можно уви деть в самом языке, и получили знания более глубокие, чем имели многие практикующие программисты на языке Python в начале своего пути. Вы изучили встроенные типы, инструкции и исключения, а так же инструменты, которые используются для создания крупных эле ментов программ (функции, модули и классы). Кроме того, вы иссле довали ряд важных проблем, связанных с проектированием, ООП, ар хитектуру программы и многое другое. Набор инструментальных средств языка Python Начиная с этого момента, ваша будущая карьера программиста на языке Python в значительной степени будет состоять из овладения ин+ струментальными средствами , доступными для прикладного про граммирования на языке Python. Это может занять немало времени. Стандартная библиотека, например, содержит сотни модулей, а разра ботчиками сообщества предлагается еще больше. Чтобы познакомить ся со всеми этими инструментами, может потребоваться лет десять, а то и больше, особенно если учесть, что постоянно появляются новые (можете мне поверить!). Вообще говоря, Python обеспечивает следующую иерархию инстру ментальных средств: Встроенные Встроенные типы, такие как строки, списки и словари, помогают быстро создавать несложные программы. Расширения на языке Python Для решения более сложных задач вы можете расширить возможно сти Python своими собственными функциями, модулями и классами. Заключение по основам языка 767 Компилируемые расширения Хотя мы и не касались данной темы в этой книге, тем не менее, воз можности Python можно расширять с помощью модулей, написан ных на других языках программирования, таких как C или C++. Благодаря такой многоуровневой организации инструментальных средств вы можете выбирать, насколько глубоко погружаться в эту ие рархию при создании своих программ, – для простых сценариев доста точно будет встроенных средств, для крупных программ могут потре боваться дополнительные расширения на языке Python, а компили руемые расширения – для решения необычных задач. В этой книге мы охватили первые две категории, и этого вполне достаточно, чтобы на чать писать на языке Python серьезные программы. В табл. 29.1 приводятся некоторые из встроенных и других функцио нальных возможностей, доступных в языке Python, исследованием которых вы будете заниматься остаток вашей карьеры программиста на языке Python. До настоящего момента наши примеры были очень маленькими и самостоятельными. Главная их цель состояла в том, чтобы помочь вам освоить основы. Но теперь, когда вы узнали все о ба зовом языке, настало время учиться использовать встроенные интер фейсы Python, чтобы быть в состоянии выполнять настоящую работу. Вы обнаружите, что такой простой язык, как Python, делает решение наиболее распространенных задач намного более легким делом, чем можно было бы ожидать. Таблица 29.1. Категории инструментальных средств в языке Python Инструменты разработки крупных проектов Как только вы овладеете основами языка, вы обнаружите, что ваши программы становятся существенно больше, чем примеры, с которы ми вы экспериментировали до сих пор. Для разработки крупных про грамм и в Python, и в общем доступе имеется целый набор инструмен тов разработки. Некоторые из них вы видели в действии, некоторые я только упомянул. Чтобы помочь вам на вашем нелегком пути, я при веду краткое описание некоторых наиболее часто используемых инст рументов: Категория Примеры Типы объектов Списки, словари, файлы, строки Функции len , range, apply, open Исключения IndexError , KeyError Модули os , Tkinter, pickle, re Атрибуты __dict__ , __name__, __class__ Внешние инструменты NumPy, SWIG, Jython, IronPython и другие 768 Глава 29. Использование исключений PyDoc и строки документирования Функция help и HTMLинтерфейсы модуля PyDoc были представле ны в главе 14. Модуль PyDoc реализует систему документирования для модулей и объектов и интегрирован со строками документиро вания. Это стандартная часть системы Python, поэтому за дополни тельными подробностями обращайтесь к справочному руководству по библиотеке. Кроме того, в главе 14 даются подсказки с указани ем на источники документации и другие информационные ресурсы по языку Python. PyChecker Python – это динамический язык программирования, поэтому не которые ошибки сложно обнаружить, пока программа не будет вы полнена (например, синтаксические ошибки можно выявить при запуске или во время импортирования файла). Это не такой боль шой недостаток – как и для большинства языков программирова ния это лишь означает, что прежде чем распространять свой про граммный код, его необходимо тестировать. Кроме того, динамиче ская природа языка Python, автоматический вывод сообщений об ошибках и модель исключений в языке Python позволяют быстрее и проще отыскивать и исправлять ошибки, чем в других языках программирования (например, в отличие от языка C, интерпрета тор Python не вызывает крах системы при появлении ошибок). Система PyChecker обеспечивает возможность выявления широко го круга наиболее часто встречающихся ошибок еще до того, как сценарий будет запущен. Она играет роль, похожую на ту, какую играет программа «lint» в разработке на языке C. Некоторые кол лективы разработчиков проверяют свой программный код на языке Python с помощью PyChecker еще до его тестирования или распро странения, чтобы выявить все скрытые проблемы. В действитель ности даже стандартная библиотека языка Python регулярно проверяется с помощью PyChecker перед выпуском. PyChecker – это сторонний пакет, распространяемый с открытыми исходными текстами. Найти его можно по адресу http://www.python.org или на вебсайте проекта Vaults of Parnassus. PyUnit (он же unittest) В пятой части книги мы видели, как в файлы модулей добавляется программный код самопроверки, который использует результат проверки __name__ == '__main__'. Дополнительно для нужд тестиро вания в состав Python входят два инструмента. Первый, PyUnit (в руководстве по библиотеке называется unittest), обеспечивает комплект классов, с помощью которых можно определить и настро ить варианты тестов и указать ожидаемые результаты. Он напоми нает платформу JUnit в языке Java. Это сложная основанная на классах, система, подробное описание которой вы найдете в спра вочном руководстве по библиотеке Python. Заключение по основам языка 769 Doctest Модуль doctest, входящий в состав стандартной библиотеки, реали зует второй и более простой подход к регрессивному тестированию. Он основан на использовании строк документирования в языке Py thon. В первом приближении, чтобы воспользоваться модулем doctest , следует скопировать результаты тестирования в интерак тивном сеансе в строки документирования в файле с исходным тек стом. После этого модуль doctest извлечет эти строки документиро вания, вычленит из них описание тестов с ожидаемыми результата ми и повторно выполнит тесты, чтобы сравнить полученные резуль таты с ожидаемыми. Функциональные возможности doctest могут использоваться разными способами, о чем подробнее рассказывает ся в справочном руководстве по библиотеке Python. Интегрированные среды разработки В главе 3 мы уже рассматривали интегрированные среды разработки для языка Python. Такие интегрированные среды, как IDLE, обеспе чивают графический интерфейс для редактирования, запуска, от ладки и просмотра программ на языке Python. Некоторые мощные интегрированные среды разработки, такие как Eclipse и Komodo, поддерживают решение дополнительных задач разработки, включая интеграцию с системами контроля версий, интерактивные построи тели графического интерфейса, создание файлов проектов и многих других. Список интегрированных сред разработки и построителей графических интерфейсов для языка Python вы найдете в главе 3, а также на сайтах http://www.python.org и Vaults of Parnassus. Профилировщики Поскольку язык Python является высокоуровневым и динамиче ским языком программирования, интуитивные представления о производительности, которые следуют из опыта работы с другими языками программирования, неприменимы к программному коду на языке Python. Чтобы выявить узкие места в программе, вам не обходимо добавить логику, выполняющую замеры временных ин тервалов с помощью инструментов, определяемых в модулях time или timeit, или запустить свой программный код под управлением модуля profile. Мы уже видели модули измерения времени в дейст вии, когда сравнивали скорость работы итерационных инструмен тов в главе 17. Модуль profile – это модуль стандартной библиотеки, который реа лизует профилирование исходных текстов программ на языке Py thon. Он выполняет строку, которую вы ему передадите (например, импорт файла или вызов функции), и затем по умолчанию выводит в стандартный поток вывода отчет, в котором собрана информация о производительности – количество вызовов каждой функции, вре мя, потраченное каждой функцией, и многое другое. Модуль pro filer допускает дополнительную настройку, например, он может 770 Глава 29. Использование исключений сохранять полученную информацию в файле для последующего анализа с помощью модуля pstats. Отладчики Стандартная библиотека языка Python включает модуль отладчика исходных текстов с именем pdb. Этот модуль работает подобно от ладчику командной строки в языке C (например, dbx, gdb): вы им портируете модуль, запускаете программный код вызовом функ ции из модуля pdb (например, pdb.run("main()")) и затем вводите ко манды отладчика в интерактивном режиме. Кроме того, модуль pdb включает полезную функцию для проведения послеаварийного анализа – pdb.pm, которая позволяет выполнять отладку после появ ления исключения. Многие интегрированные среды разработки, такие как IDLE, включают интерфейсы «указал и щелкнул», поэто му pdb в наши дни используется относительно редко – советы по ис пользованию отладчика с графическим интерфейсом в IDLE вы найдете в главе 3. 1 Варианты распространения В главе 2 были представлены инструменты, используемые для упа ковки программ на языке Python. Такие инструменты, как py2exe, PyInstaller и freeze, могут упаковывать байткод и виртуальную ма шину с интерпретатором Python в «фиксированные двоичные фай лы», которые способны выполняться как самостоятельные про граммы, не требуют установки Python и полностью скрывают про граммный код. Кроме того, в главе 2 и в пятой части книги мы узна ли, что программы на языке Python могут распространяться в виде исходных текстов (.py) или в виде байткода (.pyc), а также о суще ствовании программных ловушек, обеспечивающих возможность реализации специализированных приемов работы с пакетами, та ких как автоматическое извлечение файлов из архивов в формате .zip и шифрование байткода. Мы также познакомились с модулем distutils , входящим в состав стандартной библиотеки, который обеспечивает упаковку модулей и пакетов на языке Python и рас ширений, написанных на языке C, – за дополнительной информа цией обращайтесь к справочным руководствам по языку Python. 1 Честно говоря, отладчик интегрированной среды IDLE тоже используется не слишком часто. Большинство практикующих программистов предпочи тают отлаживать свой программный код вставкой инструкций print в кри тических точках. Поскольку промежуток времени от изменения до выпол нения в языке Python очень короткий, добавление инструкций print вы полняется быстрее, чем ввод команды отладчика pdb или запуск сеанса от ладки в среде разработки с графическим интерфейсом. Еще один прием отладки, который вообще не требует никаких действий, основан на исполь зовании сообщений, которые выводит интерпретатор в случае ошибки. Обычно эти сообщения дают достаточно информации, чтобы проанализи ровать и исправить ошибку. В заключение 771 Недавно появившаяся в языке Python система подготовки дистри бутивов «eggs» представляет собой другую альтернативу, которая позволяет учитывать зависимости, – дополнительную информацию о ней ищите в Сети. Способы оптимизации В главе 2 была описана система Psyco, позволяющая оптимизиро вать программы по скорости выполнения. Она предоставляет дина мический компилятор, выполняющий трансляцию байткода в дво ичный машинный код. Кроме того имеется система Shedskin, кото рая представляет собой транслятор исходных текстов с языка Python на язык C++. Иногда вам могут встретиться файлы .pyo с оптимизи рованным байткодом, которые создаются при запуске интерпрета тора Python с ключом командной строки – O (обсуждается в главе 18), но так как этот способ обеспечивает весьма скромное увеличение производительности, он обычно не используется. Наконец, для по вышения производительности можно отдельные части своих про грамм перенести на компилирующий язык программирования, та кой как C, – подробнее о расширениях на языке C рассказывается в книге «Programming Python» и в стандартных руководствах по языку Python. Вообще говоря, скорость работы интерпретатора Py thon постоянно увеличивается, поэтому старайтесь использовать самую свежую его версию, когда это возможно (например, версия Python 2.3 обеспечила прирост производительности на 15–20 про центов по сравнению с версией 2.2). Другие советы по разработке крупных проектов Кроме всего прочего, в этой книге мы познакомились с различными особенностями языка, удобство которых особенно ярко проявляется при работе с крупными проектами. Среди них: пакеты модулей (гла ва 20); исключения на основе классов (глава 28); псевдочастные ат рибуты класса (глава 25); строки документирования (глава 14); фай лы с настройками пути поиска модулей (глава 18); сокрытие имен, импортируемых инструкцией from * с помощью списков __all__ и имен в формате _X (глава 21); добавление программного кода само проверки с использованием приема __name__ == '__main__' (глава 21); использование общих правил проектирования при создании функ ций и модулей (главы 16, 17 и 21) и т. д. Узнать о других общедоступных разнообразных инструментах разра ботки можно на страницах вебсайта Vaults of Parnassus. В заключение Эта глава завершила часть книги, описывающую исключения (и всю книгу в целом) кратким обзором типичных случаев использования ис ключений и инструментальных средств разработки. Поскольку это ко нец книги, глава заканчивается единственным контрольным вопросом. 772 Глава 29. Использование исключений Как обычно, обязательно выполните упражнения к этой части, чтобы закрепить знания, полученные в последних нескольких главах. В сле дующих далее приложениях даются подсказки по установке Python и ответы к упражнениям. Чтобы получить представление о том, что читать после этой книги, просмотрите список литературы, рекомендуемой для дальнейшего чтения в предисловии. Вы достигли того момента, когда язык Python действительно становится увлекательным, но на этом данная книга заканчивается. Теперь вы неплохо подготовлены к изучению других книг и ресурсов, которые помогут вам решать задачи прикладного программирования, такие как создание программ с графическим ин терфейсом, разработка вебсайтов, интерфейсов к базам данных и мно гие другие. Удачи вам в вашем путешествии и, конечно, «всегда смот рите на светлую сторону жизни»! Закрепление пройденного Контрольные вопросы 1. (Этот вопрос уже задавался в контрольных вопросах к главе 1 – ви дите, я же говорил, что это будет просто.) Почему слово spam так часто появляется в примерах в этой книге? Ответы 1. Язык Python получил свое название в честь английской комик группы Монти Пайтона (Monty Python) (согласно опросам, которые я проводил среди своих студентов, это «самая большая тайна» в мире Python!). Слово «spam» взято из пародии Монти Пайтона (Monty Python), где герои сериала пытаются заказать блюдо в кафе терии, а их заглушает хор викингов, поющих песню о консервах (spam). И если бы я мог вставить сюда аудиофрагмент из этой песни в качестве заключительных титров, я бы сделал это… Упражнения к седьмой части Мы достигли конца этой части книги, поэтому настало время выпол нить несколько упражнений на применение исключений, чтобы по практиковаться в основах. Исключения действительно являются очень простым инструментом – если вы пользуетесь ими, значит вы владеете ими в полной мере. Решения вы найдете в приложении B, в разделе «Часть VII, Исключе ния и инструменты». 1. try/except. Напишите функцию с именем oops, которая при вызове явно возбуждает исключение IndexError. Затем напишите другую функцию, которая вызывает функцию oops внутри инструкции try/ Закрепление пройденного 773 except , которая перехватывает ошибку. Что произойдет, если изме нить функцию oops так, чтобы вместо IndexError она возбуждала ис ключение KeyError? Где располагаются имена KeyError и IndexError? (Подсказка: вспомните, что все простые несоставные имена находят ся в одной из четырех областей видимости согласно правилу LEGB.) 2. Объекты исключений и списки. Измените функцию oops, которую вы только что написали так, чтобы она возбуждала ваше собствен ное исключение с именем MyError и передавала бы дополнительные данные вместе с исключением. Вы можете определеить свое исклю чение на основе строки или класса. Затем расширьте инструкцию try в функции, которая вызывает функцию oops, так чтобы кроме исключения IndexError она перехватывала бы еще и это исключе ние, извлекала бы дополнительные данные и выводила бы их на эк ран. Наконец, если вы использовали исключение на основе строки, вернитесь назад и измените исключение, так чтобы оно было осно вано на классе, – что теперь будет передаваться обработчику в виде дополнительных данных? 3. Обработка ошибок. Напишите функцию safe(func, *args), которая запускает указанную функцию с помощью функции apply (или с ис пользованием более нового синтаксиса вызова *name), перехватывает любые исключения, возникающие в ходе выполнения этой функции и выводит информацию об исключении с использованием атрибутов exc_type и exc_value модуля sys (или с помощью более современной функции sys.exc_info). Затем с помощью своей функции safe запус тите функцию oops из упражнения 1 или 2. Поместите функцию safe в модуль с именем tools.py и передайте ей функцию oops в инте рактивном режиме. Какие сообщения об ошибках вы получили? Наконец, расширьте свою функцию safe так, чтобы при возникно вении исключения она выводила содержимое стека вызовов с помо щью встроенной функции print_exc, расположенной в стандартном модуле traceback (за дополнительной информацией обращайтесь к руководству по библиотеке языка Python). 4. Примеры для самостоятельного изучения. В конец Приложения B я добавил несколько примеров сценариев, разработанных в ходе выполнения упражнений моими студентами, чтобы вы могли само стоятельно изучить и опробовать их, попутно изучая набор стан дартных руководств по языку Python. Эти примеры не содержат описаний, и в них используются инструменты из стандартной биб лиотеки языка Python, которые вам потребуется отыскать. Для многих читателей эти примеры помогут увидеть, как концепции, которые мы обсуждали в этой книге, объединяются в реальных программах. Если эти примеры возбудят у вас интерес, вы сможете отыскать множество более реалистичных примеров программ на языке Python в последующих книгах, таких как «Programming Py thon», и в Сети. VIII Приложения A Установка и настройка В этом приложении описываются подробности установки и настройки в помощь тем, кто впервые делает это. Установка интерпретатора Python Для запуска сценариев на языке Python необходимо иметь интерпрета тор Python, поэтому первым шагом к использованию этого языка явля ется установка Python. Если он еще не установлен у вас на компьютере, вам необходимо получить и установить последнюю версию Python на свой компьютер и, возможно, настроить его. Для каждого компьютера эту процедуру необходимо выполнить всего один раз, а если вы запус каете фиксированные двоичные файлы (описываемые в главе 2), вам вообще не потребуется устанавливать интерпретатор. Возможно, Python уже установлен? Прежде чем приступать к установке, проверьте, возможно, на вашем компьютере уже установлена свежая версия Python. Если вы работаете в операционной системе Linux, Mac OS X или UNIX, вполне вероятно, что Python уже установлен на вашем компьютере. Введите в командной строке (иногда называется окном терминала) команду python и посмот рите, что произойдет. Можно попробовать поискать подкаталог python в обычных местах – в каталогах /usr/bin, /usr/local/bin и других. В операционной системе Windows поищите пункт Python в меню кноп ки Пуск (Start), расположенной в левом нижнем углу экрана. Если ин терпретатор установлен, убедитесь, что он имеет версию 2.5 или выше. Несмотря на то, что для работы с этой книгой подойдет любая доста точно свежая версия, тем не менее, для запуска некоторых примеров вам потребуется версия не ниже 2.5. 778 Приложение A Где получить Python Если вы не нашли Python у себя на компьютере, вам придется устано вить его. Могу вас обрадовать, Python является программным обеспе чением, распространяемым с открытыми исходным текстами, и его можно свободно загрузить из Сети, к тому же на большинстве плат форм Python устанавливается достаточно просто. Самую свежую и лучшую версию Python всегда можно получить на официальном вебсайте проекта http://www.python.org – воспользуй тесь ссылкой «Download» (загрузить) на этой странице и выберите вер сию для своей платформы. Здесь вы найдете уже собранные выполняе мые (достаточно распаковать и запустить) файлы дистрибутивов для Windows (чтобы запустить установку, достаточно щелкнуть мышью на ярлыке файла), пакеты в формате RPM для Linux (установка произво дится с помощью утилиты rpm), дистрибутивы с полными исходными текстами (которые требуется скомпилировать, чтобы установить интер претатор) и другие. Ссылки на другие вебстраницы, с которых можно загрузить версии для некоторых платформ, таких как PalmOS, сотовые телефоны Nokia и Windows Mobile можно найти либо на сайте проекта Python.org, либо воспользовавшись поисковой службой Google. Интерпретатор Python можно также обнаружить на компактдисках с дистрибутивами Linux, в составе некоторых программных продук тов и как приложение к некоторым книгам по языку Python. Обычно они немного отстают от текущей версии, но это отставание, как прави ло, не очень велико. Кроме того, компания ActiveState распространяет Python в составе сво его пакета ActivePython. В состав пакета входят CPython с расширения ми для разработки программ в операционной системе Windows, интег рированная среда разработки PythonWin (описывается в главе 3) и дру гие часто используемые расширения. Дополнительную информацию о пакете ActivePython вы найдете на вебсайте компании ActiveState. Наконец, если вам интересны альтернативные реализации Python, по ищите в Сети Jython (версия Python для среды Java) и IronPython (вер сия Python для среды C#/.NET); обе версии были описаны в главе 2, од нако установка этих систем выходит далеко за рамки этой книги. Установка Загрузив дистрибутив Python, его необходимо установить. Порядок установки сильно зависит от платформы, и поэтому ниже приводятся некоторые рекомендации по установке в некоторых основных плат формах: Windows Для операционной системы Wimdows дистрибутив Python постав ляется в виде инсталляционного файла в формате MSI – просто Установка и настройка 779 щелкните дважды на ярлыке этого файла и отвечайте на вопросы нажатием кнопок Yes (Да) или Next (Далее), чтобы выполнить установ ку с параметрами по умолчанию. Установка по умолчанию включа ет в себя комплект документации, поддержку библиотеки построе ния графических интерфейсов Tkinter и базы данных shelve, а так же среду разработки IDLE с графическим интерфейсом. Обычно Py thon 2.5 устанавливается в каталог C:\Python25, хотя во время установки можно указать другой каталог. После установки в подменю Все программы (All Programs), в меню кноп ки Пуск (Start), появляется дополнительное меню Python, в котором имеется пять пунктов, обеспечивающих быстрый доступ к наиболее типичным задачам: запуск IDLE, чтение документации, запуск ин терактивного сеанса, чтение стандартных руководств по языку Py thon в вебброузере и удаление. Большинство этих действий связаны с концепциями, которые детально рассматривались в этой книге. После установки интерпретатор Python автоматически регистриру ет себя в качестве программы, предназначенной для открытия фай лов Python щелчком мыши (этот прием запуска программ описыва ется в главе 3). Существует возможность собрать Python из исход ных текстов в Windows, но обычно это не делается. Одно замечание для пользователей Windows Vista: особенности сис темы безопасности текущей версии Windows Vista изменили некото рые из правил использования инсталляционных файлов MSI. Обра щайтесь за помощью к тексту врезки «Установка Python 2.5 из уста новочного файла формата MSI в Windows Vista» в этом приложении, если инсталляционный файл Python не запускается или если уста новка не выполняется в правильный каталог на вашей машине. Linux Для операционной системы Linux интерпретатор Python доступен в виде одного или нескольких файлов RPM, которые распаковыва ются обычным способом (за подробностями обращайтесь к странице справочного руководства по RPM). В зависимости от того, какие па кеты RPM вы загрузили, в одном может находиться сам интерпре татор Python, а в других – дополнительная поддержка Tkinter и сре да разработки IDLE. Так как Linux является UNIXподобной опера ционной системой, к нему применимы рекомендации, которые да ются в следующем параграфе. UNIX В операционных системах UNIX Python обычно компилируется из дистрибутива с исходными текстами на языке C. Обычно для этого требуется распаковать файл и запустить команды config и make – Py thon настроит процедуру сборки автоматически, в соответствии с системой, где выполняется сборка. Однако обязательно ознакомь тесь с содержимым файла README, где приводятся дополнитель 780 Приложение A ные замечания по процессу сборки. Поскольку Python является программным продуктом, распространяемым с открытыми исход ными текстами, его исходный программный код может свободно использоваться и распространяться. Процедура установки в других платформах может существенно отли чаться. Так, установка «Pippy», версии Python для PalmOS, напри мер, требует выполнения операции синхронизации вашего PDA, а Py thon для PDA Sharp Zaurus, работающего под управлением Linux, по ставляется в виде одного или более файлов .ipk, которые достаточно просто запустить, чтобы выполнить установку. Дополнительные про цедуры установки для дистрибутивов в виде исполняемых файлов и па кетов с исходными текстами прекрасно документированы, поэтому мы пропустим дальнейшие подробности. Настройка Python После установки Python вам может потребоваться выполнить некото рые настройки, влияющие на то, как Python будет выполнять ваш программный код. (Если вы только начинаете знакомство с языком, возможно, вам лучше вообще пропустить этот раздел – для создания программ начального уровня обычно не требуется изменять какиели бо параметры настройки.) Вообще говоря, некоторые особенности поведения интерпретатора мо гут быть настроены с помощью переменных окружения и параметров командной строки. В этом разделе мы коротко рассмотрим перемен ные окружения Python. Параметры командной строки, которые ука зываются при запуске программ на языке Python из командной строки системы, используются достаточно редко и часто играют узкоспециа лизированные роли – за дополнительной информацией по этому во просу обращайтесь к другим источникам документации. Установка Python 2.5 из установочного файла формата MSI в Windows Vista В середине 2007 года, когда я писал эти строки, дистрибутив Py thon для Windows распространялся в виде инсталляционного файла .msi. Файлы этого формата прекрасно работают в Windows XP (достаточно просто выполнить двойной щелчок мышью на этом файле, чтобы запустить его), однако в текущей версии Win dows Vista все может оказаться не так просто. В частности, за пуск инсталлятора щелчком мыши на моей машине привел к то му, что Python был установлен в корневой каталог диска C: вме сто выбранного по умолчанию каталога C:\Python25. Интерпре татор вполне работоспособен и в корневом каталоге, но это неправильное место для установки. Установка и настройка 781 Переменные окружения Python Переменные окружения, иногда известные как переменные команд ной оболочки или переменные DOS, определяются за пределами ин терпретатора Python и потому могут использоваться для настройки его поведения каждый раз, когда он запускается на данном компьюте ре. Интерпретатор Python пользуется множеством переменных окру жения, но лишь немногие из них используются достаточно часто; они приведены ниже. В табл. A.1. приводятся основные переменные окру жения, используемые для настройки интерпретатора Python. Эта проблема обусловлена особенностями поведения системы безопасности в Windows Vista. Дело в том, что в действительно сти файлы MSI не являются настоящими исполняемыми файла ми, поэтому они неправильно наследуют права администратора, даже если запускаются администратором. Файлы MSI запуска ются программойинсталлятором MSI, ассоциация с которой определена в реестре Windows. Чтобы установить Python 2.5.1 на свой карманный компьютер OQO, работающий под управлением Windows Vista, мне пришлось воспользоваться командной строкой и выполнить установку с правами администратора. Вот как это делается: откройте меню кнопки Пуск (Start), выберите пункт Все программы (All Programs), выберите пункт Стандартные (Accessories), щелкните правой кноп кой на пункте Командная строка (Command Prompt), в контекстном меню выберите пункт Запуск с правами администратора (Run as admin istrator) и выберите кнопку Продолжить (Continue) в диалоге управ ления доступом. Теперь в окне Командная строка (Command Prompt) запустите команду cd, чтобы перейти в каталог, где находится файл MSI с дистрибутивом Python (например, cd C:\user\down loads ), и затем запустите программуинсталлятор MSI, выполнив команду вида: msiexec /i python 2.5.1.msi. Для завершения уста новки следуйте обычным указаниям мастера установки с графи ческим интерфейсом. Естественно, такое поведение может измениться через какоето время. Эта процедура может оказаться необязательной в буду щих версиях Vista и, возможно, появятся другие обходные пути (такие как отключение системы безопасности Vista, если вы ре шитесь на это). Возможно также, что сам установочный файл Python будет распространяться в другом формате, ликвидирую щем эту проблему, например, в виде настоящего исполняемого файла. Прежде чем использовать какиелибо обходные пути, по пробуйте сначала просто запустить установку щелчком мыши, возможно, она уже работает должным образом. 782 Приложение A Таблица A.1. Переменные окружения, имеющие важное значение Эти переменные просты в обращении и, тем не менее, приведу не сколько рекомендаций: • Переменная PATH определяет список каталогов, где операционная система будет пытаться отыскать исполняемые файлы программ. Обычно этот список должен включать каталог, где находится ин терпретатор Python (файл python в операционной системе UNIX или файл python.exe в Windows). Вам вообще не придется настраивать эту переменную, если вы рабо таете в каталоге, где находится интерпретатор Python, например, настройки в переменной PATH не имеют значения, если перед за пуском какоголибо программного кода выполнить команду cd C:\Python25 (чтобы перейти в каталог, где находится интерпретатор Python) или вместо команды python всегда выполнять команду C:\Python25\python (в команде присутствует полный путь к испол няемому файлу). Кроме того, переменная окружения PATH в основ ном используется для запуска команд из командной строки – эта Переменная Назначение PATH (или path) Путь поиска файлов, используемый системой (ис пользуется при поиске исполняемого файла python) PYTHONPATH Путь поиска модулей Python (используется опера цией импортирования) PYTHONSTARTUP Путь к интерактивному файлу запуска Python TCL_LIBRARY , TK_LIBRARY Переменные окружения для Tkinter (расширение для создания графического интерфейса) Установка поддержки Tkinter в Linux Среда разработки IDLE, описанная в главе 2, представляет собой программу на языке Python, которая использует библиотеку Tkinter для создания графического интерфейса. Библиотека Tkinter – это набор инструментальных средств для построения графического интерфейса; она является стандартным компонен том дистрибутива Python для Windows и некоторых других платформ. Однако в некоторых дистрибутивах Linux эта библио тека не входит в стандартный комплект устанавливаемых ком понентов. Чтобы добавить в интерпретатор Python поддержку графического интерфейса в операционной системе Linux, попро буйте запустить команду yum tkinter, которая автоматически ус тановит все необходимые библиотеки. Эта команда должна рабо тать в дистрибутивах Linux (и в некоторых других системах), где имеется программа установки пакетов yum. Установка и настройка 783 переменная не имеет значения при запуске программ щелчком мы ши на ярлыке или из интегрированной среды разработки. • Переменная окружения PYTHONPATH играет похожую роль: интерпре татор Python использует переменную PYTHONPATH во время поиска фай лов модулей, когда они импортируются программами. (Дополнитель ную информацию о переменной PYTHONPATH вы найдете в главе 18.) Эта переменная содержит список каталогов в формате, зависящем от ти па используемой платформы, – в UNIX каталоги в списке отделяют ся двоеточием, а в Windows – точкой с запятой. Обычно этот список должен включать только каталоги с вашими исходными текстами. Вам не потребуется настраивать эту переменную, если не импортиро вать модули, находящиеся в других каталогах, потому что интерпре татор всегда автоматически пытается отыскать модули в домашнем каталоге программы. Настраивать эту переменную придется, только если какойлибо модуль должен импортировать другой модуль, рас положенный в другом каталоге. Как упоминалось в главе 18, недав но появилась альтернатива переменной PYTHONPATH – файлы .pth. • Если в переменной PYTHONSTARTUP указано полное имя файла с про граммным кодом на языке Python, интерпретатор будет запускать этот файл автоматически всякий раз, когда запускается интерак тивный сеанс работы с интерпретатором, как если бы инструкции из этого файла вводились вручную в интерактивной командной обо лочке. Этот способ используется редко, но его удобно применять, когда необходимо обеспечить загрузку некоторых утилит для рабо ты в интерактивной оболочке, т. к. это позволяет сэкономить время на импортировании вручную. • Если вы предполагаете использовать набор инструментальных средств построения графического интерфейса Tkinter, вам может понадобиться записать в две переменные из табл. A.1 имена катало гов библиотек Tcl и Tk (похоже на PYTHONPATH). Однако в Windows (где поддержка Tkinter устанавливается вместе с интерпретатором Python) это не требуется, и обычно не требуется, если Tcl и Tk уста новлены в стандартные каталоги. Обратите внимание: эти настройки окружения (так же, как и файлы .pth ) являются внешними по отношению к интерпретатору Python, по этому совершенно неважно, когда будет выполнена их настройка. Они могут быть настроены как до, так и после установки Python, главное, что это должно быть сделано перед запуском интерпретатора. Как установить параметры конфигурации Способ установки переменных окружения, имеющих отношение к Py thon, и устанавливаемые значения зависят от типа компьютера, с ко торым вы работаете. Не забывайте, что вам не обязательно выполнять все эти настройки, особенно если вы работаете в среде IDLE (описан ной в главе 3). 784 Приложение A Но предположим для иллюстрации, что у вас имеется несколько весь ма полезных модулей в каталогах utilities и package1 гдето в компью тере, и вам необходимо иметь возможность импортировать их из фай лов модулей, расположенных не в домашнем каталоге. То есть, чтобы загрузить файл с именем spam.py из каталога utilities, вам необходимо обеспечить возможность выполнить инструкцию: import spam из другого файла, расположенного в какомто другом каталоге. Для этого следует одним из возможных способов настроить путь поиска мо дулей, чтобы включить в него каталог, содержащий файл spam.py. Ни же приводится несколько советов, как это можно сделать. Переменные окружения в UNIX/Linux В системе UNIX способ установки значения переменной окружения зависит от используемой командной оболочки. При использовании ко мандной оболочки csh для установки пути поиска модулей можно до бавить строку, как показано ниже, в свой файл .cshrc или .login: setenv PYTHONPATH /usr/home/pycode/utilities:/usr/lib/pycode/package1 Она сообщает интерпретатору Python о том, что поиск импортируемых модулей должен выполняться в двух каталогах. Однако, если вы ис пользуете командную оболочку ksh, настройки можно выполнить в фай ле .kshrc, и на этот раз строка будет иметь следующий вид: export PYTHONPATH="/usr/home/pycode/utilities:/usr/lib/pycode/package1" Другие командные оболочки могут использовать другой (но достаточ но похожий) синтаксис. Переменные DOS (Windows) Если вы используете MSDOS или старую версию Windows, вам может потребоваться добавить определение переменных окружения в свой файл C:\autoexec.bat и перезагрузить компьютер, чтобы изменения вступили в силу. Команда настройки для таких компьютеров имеет синтаксис, уникальный для DOS: set PYTHONPATH=c:\pycode\utilities;d:\pycode\package1 Вы можете ввести эту команду в окне сеанса DOS, но тогда настройки будут иметь эффект только в этом окне. Настройки в файле .bat сохра няются постоянно и являются глобальными для всех программ. Другие способы в Windows В наиболее свежих версиях Windows имеется возможность устанавли вать значение переменной окружения PYTHONPATH и других переменных с помощью графического интерфейса и тем самым избежать редакти рования файлов и перезагрузки компьютера. В Windows XP выберите ярлык Система (System) в меню Панель управления (Control Panel), перейдите Установка и настройка 785 на вкладку Дополнительно (Advanced) и щелкните на кнопке Переменные среды (Environment Variables), чтобы отредактировать или добавить новые переменные (PYTHONPATH – это обычно пользовательская переменная). Вам не потребуется перезагружать компьютер, но необходимо будет перезапустить интерпретатор Python, если к моменту внесения изме нений он уже был запущен (он воспринимает настройки пути только во время запуска). Если вы опытный пользователь Windows, вы можете также настроить путь с помощью редактора реестра Windows. Выберите пункт меню « Старт →Выполнить…» («Start→Run…») и введите команду regedit. Если этот инструмент редактирования установлен у вас на компьютере, вы сможе те с его помощью отыскать записи, имеющие отношение к Python, и вы полнить необходимые изменения. Это достаточно сложная процедура, при выполнении которой легко ошибиться, поэтому если вы не знако мы с реестром, я рекомендую использовать другие возможности. Файлы путей Наконец, если для настройки пути поиска модулей вы решили исполь зовать файл .pth, а не переменную окружения PYTHONPATH, в операцион ной системе Windows можно создать текстовый файл со следующим содержимым (файл C:\Python25\mypath.pth): c:\pycode\utilities d:\pycode\package1 Его содержимое будет отличаться для разных платформ, а каталог его размещения может отличаться как в зависимости от платформы, так и в зависимости от версии Python. Интерпретатор отыскивает эти фай лы автоматически во время запуска. Имена каталогов в файлах пути могут быть абсолютными или относи тельными по отношению к каталогу, где находится файл пути. Допус кается использовать несколько файлов .pth (все каталоги, перечислен ные в них, будут добавлены в путь поиска), а сами файлы .pth могут размещаться в любых каталогах, которые проверяются автоматиче ски, в зависимости от используемой платформы и версии Python. На пример, Python 2.5 пытается отыскать такие файлы в каталогах C:\Python25 и C:\Python25\Lib\site+packages в операционной системе Windows и в каталогах /usr/local/lib/python2.5/site+packages and /usr/ local/lib/site+python в Unix и Linux. Поскольку эти настройки часто бывают необязательными и эта книга не описывает командные оболочки операционных систем, я оставляю освещение подробностей другим источникам информации. За более подробными сведениями обращайтесь к страницам справочного руко водства своей командной оболочки или к другой документации. Если вы испытываете затруднения в определении того, какие настройки вам следует выполнить, обратитесь за помощью к своему системному администратору или другому опытному товарищу. |