Марк Лутц - Изучаем Python, Четвертое издание (1184811), страница 20
Текст из файла (страница 20)
Чтобы датьвам общее представление об области применения этих инструментов, замечу,что py2exe может создавать автономные программы, использующие библиотеки tkinter, PMW, wxPython и PyGTK для создания графического интерфейса;программы, использующие инструментальные средства создания игр pygame;клиентские программы win32com и многие другие.Фиксированные двоичные файлы – это не то же самое, что получается в результате работы настоящего компилятора, потому что они выполняют байткод с помощью виртуальной машины. Следовательно, программы в фиксированных двоичных файлах исполняются с той же скоростью, что и обычныефайлы с исходными текстами программ, разве что улучшен способ их запуска.Фиксированные двоичные файлы имеют немалый размер (они содержат в себеPVM���������������������������������������������������������������������), но по современным меркам их все же нельзя назвать необычно большими. Так как интерпретатор Python встроен непосредственно в фиксированныедвоичные файлы, его установка не является обязательным требованием длязапуска программ на принимающей стороне.
Более того, поскольку программ-74Глава 2. Как Python запускает программыный код упакован в фиксированный двоичный файл, он надежно скрыт от получателя.Такая схема упаковки программ в единственный файл особенно подходит длянужд разработчиков коммерческого программного обеспечения. Например,программа с графическим интерфейсом на базе tkinter может быть упакованав исполняемый файл и распространяться как самостоятельная программа наCD���������������������������������������������������������������������или через Интернет. Конечному пользователю не нужно будет устанавливать �����������������������������������������������������������������������Python�����������������������������������������������������������������(и даже знать о том, что это такое), чтобы запустить распространяемую программу.Другие способы выполненияСуществуют также другие схемы выполнения программ на языке Python, преследующие узкоспециализированные цели:•• Система Stackless Python – это разновидность стандартной реализацииCPython����������������������������������������������������������������, которая не использует стек вызовов языка C�����������������������������������������.
Она упрощает перенос �����������������������������������������������������������������Python�����������������������������������������������������������на архитектуры с небольшим объемом стека, обеспечивает дополнительные возможности параллельной обработки данных и поощряетиспользование новейших инструментов языка, таких как сопрограммы.•• Система Cython (расширенная версия проекта Pyrex) – это гибридныйязык, дополняющий язык Python возможностью вызывать функции наязыке C�������������������������������������������������������������������������������������������������������������������������������и использовать объявления типов переменных, аргументов и атрибутов классов на языке C. Исходные тексты на языке Cython могут бытьскомпилированы в программный код на языке C, использующий Python/CAPI, который в свою очередь может быть скомпилирован в машинный код.Несмотря на то, что получающийся программный код не полностью совместим со стандартным языком Python����������������������������������������������������������������������, ������������������������������Cython������������������������может оказаться как полезным инструментом для создания оберток вокруг внешних библиотек наязыке C, так и эффективным средством разработки расширений на C дляязыка Python.Дополнительные подробности об этих системах вы без труда найдете в Интернете.Будущие возможностиВ заключение обратите внимание, что модель выполнения, обсуждавшаясяздесь, в действительности является лишь отражением текущей реализацииинтерпретатора Python, но не самого языка программирования.
Например,вполне возможно, что в течение времени, пока эта книга будет сохранять актуальность (едва ли она сохранится у кого-нибудь через десять лет), появитсятрадиционный компилятор для трансляции исходного текста на языке Pythonв машинный код. Кроме того, в будущем могут появиться новые варианты реализации интерпретатора и разновидности байт-кода.
Например:•• Проект Parrot поставил перед собой цель выработать единый формат байткода, единую виртуальную машину и методики оптимизации для различных языков программирования (подробности на сайте http://www.python.org). Стандартная виртуальная машина PVM в интерпретаторе пока выполняет программный код быстрее, чем Parrot, но пока неясно, как будет развиваться этот проект.В заключение75•• Проект PyPy – попытка реализовать ��������������������������������PVM�����������������������������непосредственно на языке Py���thon, что позволит использовать новые приемы программирования.
Егоцель – создать быструю и гибкую реализацию Python.•• Проект Unladen Swallow, поддерживаемый компанией Google����������������������������������, поставил перед собой задачу повысить производительность стандартного интерпретатора Python по меньшей мере в 5 раз, что позволит использовать его в качествезамены языку C во многих проектах. Предполагается, что в результате этойоптимизации будет создана полностью совместимая версия CPython���������������������, которая выполняется гораздо быстрее. Участники этого проекта также надеются удалить глобальную блокировку Python (Global Interpreter Lock, GIL),которая препятствует возможности одновременного выполнения нескольких потоков управления. В настоящее время этот проект разрабатываетсяинженерами из ������������������������������������������������������Google������������������������������������������������как проект с открытыми исходными текстами – изначально за основу в нем была принята версия Python 2.6, однако вполневозможно, что изменения смогут быть внесены и в версию 3.0.
Дополнительные подробности вы найдете на сайте компании Google.Подобные грядущие схемы реализации могут несколько изменить схему времени выполнения интерпретатора Python, однако, скорее всего компиляторбайт-кода останется стандартом еще какое-то время. Переносимость и гибкость байт-кода во время выполнения – это очень важные качества многих реализаций Python��������������������������������������������������������������������������������������������������������������������������. Более того, добавление в язык конструкций объявления типов с целью обеспечения статической компиляции только повредит гибкости,осмысленности, простоте и общему духу языка Python.
Из-за динамическойприроды языка Python любые реализации в будущем, скорее всего, сохранятнекоторые черты нынешней PVM.В заключениеВ этой главе была представлена модель выполнения Python������������������������������������������(как Python������������������запускает программы) и исследованы некоторые наиболее известные разновидности этой модели (динамические компиляторы и тому подобное).
Чтобы писатьсценарии на языке Python, вам необязательно знать внутреннюю организациюинтерпретатора и, тем не менее, некоторое знакомство с темой этой главы поможет вам понять, как выполняются ваши программы. В следующей главе выначнете выполнять свой собственный программный код. А теперь – обычныеконтрольные вопросы.Закрепление пройденногоКонтрольные вопросы1. Что такое интерпретатор Python?2. Что такое исходный программный код?3. Что такое байт-код?4.
Что такое PVM?5. Назовите две разновидности стандартной модели выполнения Python.6. В чем заключаются различия между CPython, Jython и IronPython?76Глава 2. Как Python запускает программыОтветы1. Интерпретатор Python – это программа, которая выполняет программы наязыке Python.2. Исходный программный код – это инструкции, составляющие программу.Он состоит из текста в текстовых файлах, имена которых обычно имеютрасширение .py.3. Байт-код – это низкоуровневое представление программы после ее компиляции. Python автоматически сохраняет полученный байт-код в файлахс расширением .pyc.4. PVM – это Python Virtual Machine (виртуальная машина Python) – механизм Python, который интерпретирует компилированный программныйкод.5.
Psyco, Shedskin и фиксированные двоичные файлы – все это разновидностимодели выполнения.6. CPython – это стандартная реализация языка. Jython и IronPython реализуют поддержку программирования на языке Python в среде Java и .NETсоответственно; они являются альтернативными компиляторами языкаPython.Глава 3.Как пользователь запускает программыИтак, настал момент запустить какой-нибудь программный код. Теперь, когдавы получили представление, как выполняются программы, вы готовы приступать к программированию на языке Python. С этого момента я буду предполагать, что интерпретатор Python уже установлен у вас на компьютере, в противном случае вернитесь к предыдущей главе, а также прочитайте приложение A,где приводятся советы по установке и настройке интерпретатора.Существует несколько способов заставить интерпретатор Python выполнитьпрограмму, которую вы написали.