автордың кітабын онлайн тегін оқу Внутри CPYTHON: гид по интерпретатору Python
Переводчики Е. Матвеев
Энтони Шоу
Внутри CPYTHON: гид по интерпретатору Python. — СПб.: Питер, 2023.
ISBN 978-5-4461-1925-7
© ООО Издательство "Питер", 2023
Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.
От издательства
Ваши замечания, предложения, вопросы отправляйте на comp@piter.com (издательство «Питер», компьютерная редакция).
Мы будем рады узнать ваше мнение!
На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.
Что говорят читатели о книге «Внутри CPython»
Мне бы очень хотелось, чтобы такая книга была у меня много лет назад, когда я только изучала Python. После чтения этой книги ваша квалификация повысится, и вы сможете решать еще более сложные задачи, которые улучшат наш мир.
Кэрол Уиллинг, ключевой разработчик CPython и участница управляющего совета CPython
Глава «Параллелизм и конкурентность» — одна из моих любимых. Я уже давно старался глубже разобраться в теме, и ваша книга оказалась чрезвычайно полезной.
Конечно, после чтения этой главы я не смог устоять перед искушением прочитать остальное. С нетерпением жду свой печатный экземпляр, когда он выйдет! Ранее я прочитал вашу статью «Guide to the CPython Source Code», которая разожгла во мне желание больше узнать о внутреннем устройстве CPython.
О Python написаны десятки обучающих книг, но я еще не встречал ни одной, которая объясняла бы самым любознательным тонкости внутреннего устройства.
В настоящее время я сам обучаю языку Python свою дочь, и эта книга входит в ее список обязательного чтения. Сейчас она изучает информационные системы в Университете штата Джорджия.
Милан Пател, вице-президент (крупного инвестиционного банка)
В книге Энтони меня больше всего впечатляет то, как все шаги по внесению изменений в кодовую базу CPython объединяются в доступную и понятную процедуру. Книга воспринимается как своего рода «недостающее руководство». Разобраться в языке C, основе Python, было очень интересно, и я нашел для себя ответы на некоторые давнишние вопросы. Особенно много полезного — в главе, посвященной управлению памятью в CPython. «Внутри CPython» — превосходный (и уникальный) ресурс для всех, кто желает вывести свои знания Python на более высокий уровень.
Дэн Бейдер, автор книги «Python Tricks»1 и редактор сайта Real Python
Книга помогла мне лучше понять, как работает лексический анализ и парсинг в Python. Я рекомендую ее, если вы действительно хотите разобраться в теме.
Флориан Далиц, питонист
Исчерпывающее описание внутренних механизмов Python. Как ни странно, по этой теме почти нет хороших источников информации. Материал излагается доступно как для начинающих, так и для опытных пользователей Python.
Абхишек Шарма, специалист по Data Science
Об авторе
Энтони Шоу — заядлый питонист, участник Python Software Foundation.
Энтони занимался программированием с 12 лет. Любовь к Python он обрел спустя 15 лет, когда ему пришлось какое-то время просидеть в отеле в Сиэттле (штат Вашингтон). С тех пор Энтони исследует Python, пишет о нем и создает учебные курсы, забыв обо всех остальных языках, которые он прежде изучал.
Энтони также участвует в малых и больших проектах с открытым исходным кодом, включая CPython, и является участником Apache Software Foundation.
Страсть Энтони — разбираться в сложных системах, упрощать их и обучать других людей.
О группе редакторов
Джим Андерсон давно программирует на разных языках. Он работал над встроенными системами, разрабатывал распределенные системы сборки, занимался управлением сторонними исполнителями и участвовал во многих, многих собраниях.
Джоанна Яблонски — редактор сайта Real Python. Естественные языки интересуют ее не меньше, чем языки программирования. Ее любовь к головоломкам, поиску закономерностей и всевозможным мелочам привела к тому, что она выбрала карьеру переводчика. Прошло совсем немного времени, и она влюбилась в новый язык — Python! Джоанна присоединилась к команде Real Python в 2018 году и с тех пор помогает питонистам повышать их профессиональный уровень.
Джейкоб Шмитт уже много лет занимается редактированием академических и технологических образовательных материалов — как в печатном виде, так и в интернете. После присоединения к команде Real Python в 2020 году он редактирует учебники, статьи и книги, написанные разносторонней командой талантливых писателей и разработчиков.
1 Бейдер Д. Чистый Python. Тонкости программирования для профи. — СПб.: Питер.
Бейдер Д. Чистый Python. Тонкости программирования для профи. — СПб.: Питер.
Дэн Бейдер, автор книги «Python Tricks»1 и редактор сайта Real Python
Предисловие
Язык программирования, созданный сообществом, способствует счастью своих пользователей по всему миру.
Гвидо ван Россум, «Речь в День короля»2
Мне нравится создавать инструменты, которые помогают нам учиться, наделяют нас возможностью творить и стимулируют обмениваться знаниями и идеями с другими людьми. Я испытываю трепет, благодарность и гордость, когда слышу, что эти инструменты и Python помогают в решении проблем реального мира — например, изменения климата или борьбы с болезнью Альцгеймера.
Я полюбила программирование 40 лет назад. Все эти годы я училась, писала много кода и делилась своими идеями с другими. Я видела кардинальные изменения в технологии, когда мир переходил от мейнфреймов к мобильным технологиям и повсеместному распространению чудес Всемирной паутины и облачных вычислений. У всех этих технологий, включая Python, есть нечто общее.
В какой-то момент все эти успешные нововведения были всего лишь идеей. Творцам — таким, как Гвидо, — приходилось идти на риск и действовать наудачу, чтобы двигаться вперед. Преданность делу, изучение методом проб и ошибок и совместное преодоление многих неудач заложили прочную основу для успеха и дальнейшего роста.
«Внутри CPython» поведет вас по пути исследования невероятно успешного языка программирования Python. Эта книга поможет разобраться, как работают внутренние механизмы CPython. Она даст представление о том, как ключевые разработчики создавали язык.
К сильным сторонам Python относится удобочитаемость кода и дружелюбное сообщество, посвятившее себя распространению знаний. Энтони учитывает эти сильные стороны при объяснении CPython, подталкивая вас к чтению исходного кода и объясняя структурные элементы языка.
Почему я хочу поделиться с вами книгой «Внутри CPython»? Мне бы очень хотелось, чтобы такая книга была у меня много лет назад, когда я только изучала Python. Но что еще важнее, я верю, что у нас, участников сообщества Python, есть уникальная возможность применить наш опыт в деле и помочь в решении сложных задач реального мира.
Я уверена, что после чтения этой книги ваша квалификация вырастет и вы сможете решать еще более сложные задачи и улучшать наш мир.
Надеюсь, что вам захочется больше узнать о Python, создать нечто новое, и вы обретете уверенность, чтобы поделиться своими творениями с миром.
«Сейчас лучше, чем никогда».
Тим Питерс, «Дзен Python»
Последуйте мудрому совету Тима и беритесь за дело.
С наилучшими пожеланиями,
Кэрол Уиллинг, ключевой разработчик CPython и участница управляющего совета CPython
2 http://neopythonic.blogspot.com/2016/04/.
Гвидо ван Россум, «Речь в День короля»2
http://neopythonic.blogspot.com/2016/04/.
Введение
Некоторые операции Python кажутся каким-то волшебством — почему поиск элементов по словарю выполняется намного быстрее, чем перебор по списку? Как генератор запоминает состояние переменных каждый раз, когда он возвращает значение командой yield? Почему нам не приходится выделять память, как в других языках?
Дело в том, что CPython, самая популярная реализация Python, написана на удобочитаемых языках C и Python.
CPython абстрагируется от сложностей операционной системы и лежащей в его основе платформы C. В CPython многопоточное выполнение становится прямолинейным и кроссплатформенным. Среда берет на себя все трудности управления памятью и упрощает его.
CPython предоставляет платформу для создания масштабируемых и высокопроизводительных приложений. На какой-то стадии вашего становления Python-разработчиком необходимо будет разобраться в том, как работает CPython. Абстракции не идеальны, и иногда приходится заглядывать внутрь.
А когда вы поймете, как работает CPython, это позволит вам в полной мере использовать его мощь и оптимизировать приложения. В книге объясняются понятия, идеи и технические детали CPython.
Вы разберетесь с основными концепциями внутреннего устройства CPython. В частности, научитесь:
• читать исходный код и ориентироваться в нем;
• компилировать CPython из исходного кода;
• вносить изменения в синтаксис Python и компилировать их в вашу версию CPython;
• понимать внутреннюю реализацию таких структур, как списки, словари и генераторы;
• управлять памятью CPython;
• масштабировать код Python за счет параллелизма и конкурентного выполнения;
• дополнять базовые типы новой функциональностью;
• выполнять наборы тестов;
• профилировать и проводить бенчмарк Python-кода и исполнительной среды;
• отлаживать код C и Python на профессиональном уровне;
• изменять или обновлять компоненты библиотеки CPython, чтобы они могли использоваться в будущих версиях.
Не торопитесь с чтением, опробуйте демоприложения и интерактивные элементы. А когда вы усвоите основные концепции, которые сделают вас более успешным программистом, вы будете вполне оправданно гордиться своими достижениями!
Как использовать эту книгу
Вся суть книги — обучение в процессе работы, поэтому обязательно начните с настройки IDE: прочитайте инструкции, загрузите код и напишите примеры.
Чтобы достигнуть наилучших результатов, старайтесь избегать копирования примеров кода. Приведенные в книге примеры неоднократно перерабатывались, чтобы добиться их правильной работы, и они иногда могут содержать ошибки.
Ошибки и умение исправлять их — часть процесса обучения. Возможно, вы найдете более эффективные способы реализации примеров; попробуйте изменить их и посмотрите, как это повлияет на результат.
При достаточной практике вы освоите весь материал. Приятного путешествия!
Нужно ли быть квалифицированным Python-разработчиком для работы с книгой?
Книга предназначена для Python-разработчиков среднего и высокого уровня. Мы старались, чтобы примеры кода были доступными, но в них время от времени встречаются приемы, которые могут быть непонятны начинающим.
Нужно ли знать C для работы с книгой?
Хорошее знание C не обязательно для чтения. Если у вас нет опыта программирования на C, ознакомьтесь с кратким введением в язык в приложении «Введение в C для Python-программистов».
Сколько времени займет чтение книги?
Мы не рекомендуем торопиться с чтением. Попробуйте читать ее по одной главе, практикуйтесь на примерах после каждой главы и одновременно анализируйте код. А когда вы закончите читать книгу, она станет полезным справочным руководством, к которому вы сможете время от времени возвращаться.
Не устареет ли материал книги?
Python существует уже более 30 лет. Некоторые части кода Python не изменялись с того момента, когда они были впервые написаны. Многие принципы, описанные в книге, оставались без изменений уже более 10 лет.
Более того, в ходе работы над книгой мы обнаружили, что многие строки кода были написаны Гвидо ван Россумом (автором Python) и остались неизменными с первой версии Python.
Некоторые концепции, представленные в книге, появились совсем недавно. Некоторые даже остаются в экспериментальном статусе. Работая над книгой, мы столкнулись с дефектами в исходном коде и ошибками в CPython, которые позднее были исправлены или доработаны3. Это часть феномена CPython как энергично развивающегося проекта с открытым исходным кодом.
Навыки, которые вы получите при работе с книгой, помогут вам читать и понимать код текущих и будущих версий CPython. Изменения происходят постоянно, и вместе с ними приходит опыт.
Дополнительные материалы и учебные ресурсы
К книге прилагается ряд бесплатных дополнительных ресурсов, доступных по адресу realpython.com/cpython-internals/resources/.
На этой веб-странице вы также сможете скачать примеры исходного кода.
Там же вы найдете список опечаток с исправлениями, которые ведет группа Real Python.
Лицензия на примеры кода
Сценарии Python, имеющие отношение к книге, распространяются на условиях лицензии CC0 (Creative Commons Public Domain)4. Это означает, что вы можете свободно использовать в своих программах любые части кода для любых целей.
CPython распространяется на условиях лицензии Python Software Foundation 2.0 (PSF 2.0)5. Сниппеты и примеры исходного кода CPython, приведенные в книге, соответствуют PSF 2.0.
| ПРИМЕЧАНИЕ |
| Код, приведенный в книге, был протестирован с Python 3.9 для Windows 10, macOS 10.15 и Linux. |
Обратная связь и опечатки
Мы приветствуем идеи, предложения, обратную связь, а порой и критику. Тема показалась вам непонятной? Вы нашли ошибку в тексте или в коде? Мы пропустили тему, о которой вам хотелось бы узнать больше?
Мы всегда рады возможности улучшить свои учебные материалы. Пожалуйста, обращайтесь со своими замечаниями по адресу realpython.com/cpython-internals/feedback.
О Real Python
На сайте Real Python можно изучать реальные навыки программирования в сообществе профессиональных питонистов со всего мира. Веб-сайт realpython.com был запущен в 2012 году; в настоящее время он помогает более чем трем миллионам Python-разработчиков со всего мира своими книгами, учебниками по программированию и другими материалами.
Источники информации Real Python в интернете:
• realpython.com;
• Real Python Newsletter (https://realpython.com/newsletter);
• Real Python Podcast (https://realpython.com/podcast).
Некоторые концепции, представленные в книге, появились совсем недавно. Некоторые даже остаются в экспериментальном статусе. Работая над книгой, мы столкнулись с дефектами в исходном коде и ошибками в CPython, которые позднее были исправлены или доработаны3. Это часть феномена CPython как энергично развивающегося проекта с открытым исходным кодом.
https://realpython.com/cpython-fixes.
https://github.com/python/cpython/blob/master/LICENSE.
https://creativecommons.org/publicdomain/zero/1.0/.
Сценарии Python, имеющие отношение к книге, распространяются на условиях лицензии CC0 (Creative Commons Public Domain)4. Это означает, что вы можете свободно использовать в своих программах любые части кода для любых целей.
CPython распространяется на условиях лицензии Python Software Foundation 2.0 (PSF 2.0)5. Сниппеты и примеры исходного кода CPython, приведенные в книге, соответствуют PSF 2.0.
Загрузка исходного кода CPython
Когда вы вводите команду python в консоли или устанавливаете дистрибутив Python с сайта Python.org, запускается CPython. CPython — одна из многих реализаций Python, разработкой и сопровождением которой занимаются разные команды разработчиков. Возможно, вам также доводилось слышать о таких альтернативах, как PyPy, Cython и Jython.
У CPython есть одна уникальная особенность: эта реализация содержит как среду выполнения, так и общую спецификацию языка, которая используется всеми остальными реализациями Python. CPython является официальной (или эталонной) реализацией Python.
Спецификация языка Python6 представляет собой документ с описанием языка Python. Например, в ней сказано, что assert — ключевое слово, а [] используется для индексирования, срезов и создания пустых списков.
Подумайте, какую функциональность вы ожидаете от дистрибутива Python:
• Отображение интерактивного приглашения (REPL) при вводе команды python без указания файла или модуля.
• Импортирование встроенных модулей (таких, как json, csv и collections) из стандартной библиотеки.
• Установка пакетов из интернета командой pip.
• Тестирование приложений с использованием встроенной библиотеки unittest.
Все эти компоненты входят в дистрибутив CPython, который содержит намного больше, чем просто компилятор.
В этой книге будут рассмотрены разные элементы дистрибутива CPython:
• Спецификация языка.
• Компилятор.
• Модули стандартной библиотеки.
• Основные типы.
• Средства тестирования.
Что в исходном коде?
Дистрибутив с исходным кодом CPython включает обширный набор инструментов, библиотек и компонентов, которые будут рассмотрены в этой книге.
| ПРИМЕЧАНИЕ |
| В этой книге описана версия 3.91 исходного кода CPython. |
Чтобы загрузить копию последней версии исходного кода CPython, можно воспользоваться git:
$ git clone --branch 3.9 https://github.com/python/cpython
$ cd cpython
Примеры этой книги основаны на Python версии 3.9.
| ВАЖНО |
| Переход на ветку 3.9 — очень важный шаг. Master-ветка обновляется ежечасно. Многие примеры и упражнения, приведенные в книге, вряд ли будут работать на master-ветке. |
| ПРИМЕЧАНИЕ |
| Если на вашем компьютере нет Git, установите его с сайта git-scm.com. Также можно загрузить ZIP-файл2 исходного кода CPython прямо с веб-сайта GitHub. Если исходный код будет загружен в виде ZIP-файла, то в нем не будет данных истории, тегов или веток. |
В только что загруженном каталоге cpython находятся следующие подкаталоги:
На следующем шаге мы займемся настройкой среды разработки.
6 У Python нет спецификации в точном смысле слова, как для других языков программирования, но есть справочное руководство, которое описывает синтаксис и основную семантику языка: https://docs.python.org/3/reference/. — Примеч. ред.
7 https://github.com/python/cpython/tree/3.9.
8 https://github.com/python/cpython/archive/3.9.zip.
У Python нет спецификации в точном смысле слова, как для других языков программирования, но есть справочное руководство, которое описывает синтаксис и основную семантику языка: https://docs.python.org/3/reference/. — Примеч. ред.
https://github.com/python/cpython/tree/3.9.
https://github.com/python/cpython/archive/3.9.zip.
8
Спецификация языка Python6 представляет собой документ с описанием языка Python. Например, в ней сказано, что assert — ключевое слово, а [] используется для индексирования, срезов и создания пустых списков.
7
Настройка среды разработки
В этой главе мы будем работать как с кодом C, так и с кодом Python. Очень важно, чтобы среда разработки была настроена для обоих языков.
Исходный код CPython примерно на 65 % написан на Python (его значительную часть составляют тесты) и на 24 % — на языке C. Оставшуюся часть составляет смесь других языков.
IDE или редактор?
Если вы еще не решили, какую среду разработки использовать, сначала необходимо принять принципиальное решение: выбрать интегрированную среду разработки (IDE) или редактор кода?
• IDE предназначены для конкретного языка и инструментария. Во многих IDE имеются интегрированные средства тестирования, проверки синтаксиса, контроля версий и компиляции.
• Редактор кода позволяет править файлы с программным кодом независимо от языка. Многие редакторы кода представляют собой простые текстовые редакторы с подсветкой синтаксиса.
Из-за своей полнофункциональной природы IDE часто потребляют больше аппаратных ресурсов. Таким образом, при ограниченном объеме памяти (менее 8 Гбайт) рекомендуется использовать редактор кода.
Кроме того, запуск IDE занимает больше времени. Если вам нужно быстро отредактировать файл, то, пожалуй, редактор кода для этого подойдет лучше.
Существуют сотни платных и бесплатных редакторов и IDE. Вот ряд примеров для работы с кодом CPython:
| Приложение |
Назначение |
Поддерживается |
| Microsoft Visual Studio Code |
Редактор |
Windows, macOS и Linux |
| Atom |
Редактор |
Windows, macOS и Linux |
| Sublime Text |
Редактор |
Windows, macOS и Linux |
| Vim |
Редактор |
Windows, macOS и Linux |
| Emacs |
Редактор |
Windows, macOS и Linux |
| Microsoft Visual Studio |
IDE (C, Python и др.) |
Windows |
| PyCharm by JetBrains |
IDE (Python и др.) |
Windows, macOS и Linux |
| CLion by JetBrains |
IDE (C и др.) |
Windows, macOS и Linux |
Версия Microsoft Visual Studio также доступна для Mac, но она не поддерживает плагин Python Tools для Visual Studio и компиляцию C.
В следующих разделах будут рассмотрены подготовительные действия для нескольких редакторов и IDE:
• Microsoft Visual Studio
• Microsoft Visual Studio Code
• JetBrains CLion
• Vim
Перейдите к разделу для выбранного вами приложения или прочитайте все, чтобы сравнить разные варианты.
Настройка Visual Studio
Новейшая версия Visual Studio — Visual Studio 2019 — имеет встроенную поддержку Python и исходного кода C для Windows. Я рекомендую использовать ее для примеров и упражнений этой книги. Если на вашем компьютере уже установлена версия Visual Studio 2017, она тоже подойдет.
| ПРИМЕЧАНИЕ |
| Никакие платные возможности Visual Studio не обязательны для компиляции CPython или чтения книги. Вы можете использовать бесплатное издание Community Edition. Тем не менее для профильной оптимизации (profile-guided optimization) потребуется издание Professional Edition и выше. |
Редактор Visual Studio можно бесплатно загрузить с веб-сайта Microsoft Visual Studio9.
После того как вы загрузите программу установки Visual Studio, вам будет предложено выбрать устанавливаемые компоненты. Для книги понадобятся следующие компоненты:
• Рабочая конфигурация разработки Python (Python development).
• Необязательные средства нативной разработки Python (Python native development tools).
• Python 3, 64-разрядная версия (3.7.2).
Если у вас уже установлена версия Python 3.7, вы можете убрать галочку напротив Python 3 (3.7.2). Также можно отказаться от установки любых необязательных средств, если вы захотите сэкономить место на диске.
Программа установки загружает и устанавливает все необходимые компоненты. Установка может занять до часа; возможно, вам стоит продолжить чтение и вернуться к этому разделу после ее завершения.
Когда установка будет завершена, щелкните на кнопке Launch, чтобы запустить Visual Studio. Вам будет предложено войти в систему. Если у вас имеется учетная запись Microsoft, вы можете выполнить вход или пропустить этот шаг.
Затем будет предложено открыть проект. Также можно клонировать Git-репозиторий CPython прямо из Visual Studio — для этого выберите вариант Clone or check out code.
В поле расположения репозитория введите адрес https://github.com/python/cpython, выберите локальную папку для установки и нажмите Clone.
Visual Studio загружает копию CPython с GitHub, для чего используется версия Git, входящая в поставку Visual Studio. Этот шаг также избавляет вас от хлопот с установкой Git в Windows. Загрузка может занять до десяти минут.
| ВАЖНО |
| Visual Studio автоматически встает на master-ветку. Прежде чем переходить к компиляции, убедитесь в том, что вы переключились на ветку 3.9 в окне TeamExplorer. Переключение на ветку 3.9 — важный шаг. Master-ветка изменяется ежечасно, и многие примеры и упражнения в книге вряд ли будут работать на ней. |
После того как проект будет загружен, необходимо передать Visual Studio информацию о файле решения PCBuildpcbuild.sln, выбрав команду Solutions and Projectspcbuild.sln:
Итак, среда Visual Studio настроена, а исходный код загружен. Можно переходить к компиляции CPython на Windows; эта процедура рассматривается в следующей главе.
Настройка Visual Studio Code
Microsoft Visual Studio Code — расширяемый редактор кода с онлайн-магазином плагинов.
Он прекрасно подходит для работы с CPython, поскольку поддерживает как C, так и Python, а также имеет встроенный интерфейс Git.
Установка
Редактор Visual Studio Code, часто называемый VS Code, загружается с сайта code.visualstudio.com в виде простой программы установки.
В исходной конфигурации VS Code содержит все необходимое для редактирования кода, однако с установкой расширений (extensions) возможностей становится больше.
Панель Extensions находится в верхнем меню: ViewExtensions:
На панели Extensions возможен поиск расширений как по имени, так и по уникальному идентификатору (например, ms-vscode.cpptools). В отдельных случаях может быть несколько плагинов с одинаковым именем; чтобы быть уверенным в том, что вы устанавливаете именно тот, который вам нужен, используйте уникальный идентификатор.
Рекомендуемые расширения для этой книги
Некоторые полезные расширения для работы с CPython:
• C/C++ (ms-vscode.cpptools) обеспечивает поддержку C/C++, включая IntelliSense, отладку и подсветку синтаксиса.
• Python (ms-python.python) дает богатые возможности для редактирования, отладки и чтения кода Python.
• reStructuredText (lextudio.restructuredtext) предоставляет разностороннюю поддержку reStructuredText — формата, использованного в документации CPython.
• Task Explorer (spmeesseman.vscode-taskexplorer) добавляет на вкладку Explorer панель Task Explorer, упрощающую выполнение некоторых операций.
После установки этих расширений необходимо перезагрузить редактор.
Многие задачи, описанные в книге, требуют использования командной строки. Чтобы интегрировать терминал в VS Code, выберите команду TerminalNew Terminal. Терминал открывается под редактором кода:
Расширенная навигация и развертывание кода
С установленными плагинами появляются новые возможности расширенной навигации в коде.
Например, если щелкнуть правой кнопкой мыши на вызове функции в файле C и выбрать команду Go to References, то VS Code найдет другие ссылки на эту функцию в кодовой базе:
Команда Go to References очень удобна для нахождения правильной формы вызова функции.
Если щелкнуть или навести указатель мыши на макрос C, то редактор развернет макрос в скомпилированный код:
Чтобы перейти к определению функции, наведите указатель мыши на любой ее вызов, зажмите Cmd (macOS) или Ctrl (Linux и Windows) и кликните.
Конфигурирование файлов команд и запуска
VS Code использует папку .vscode в каталоге рабочего пространства. Если эта папка не существует, создайте ее. В ней можно сформировать следующие файлы:
• tasks.json для определения сокращенных команд, запускающих ваш проект;
• launch.json для настройки отладчика (см. главу «Отладка»);
• другие файлы, относящиеся к плагинам.
Создайте файл tasks.json в каталоге .vscode, если он еще не существует. Следующего описания команд в tasks.json будет достаточно для начала работы:
cpython-book-samples11tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"group": {
"kind": "build",
"isDefault": true
},
"windows": {
"command": "PCBuild/build.bat",
"args": ["-p", "x64", "-c", "Debug"]
},
"linux": {
"command": "make -j2 -s"
},
"osx": {
"command": "make -j2 -s"
}
}
]
}
При использовании плагина Task Explorer список настроенных команд будет отображаться в группе vscode:
В следующей главе процесс сборки при компиляции CPython будет рассмотрен более подробно.
Настройка JetBrains CLion
У компании JetBrains есть IDE как для Python (PyCharm), так и для C/C++ (CLion).
В CPython используется код и на C, и на Python. Встроить поддержку C/C++ в PyCharm не удастся, а CLion поддерживает Python.
| ВАЖНО |
| Поддержка make-файлов (makefile) доступна только в CLion версий 2020.2 и выше. |
| ВАЖНО |
| Для этого шага необходимо как сгенерировать makefile, запустив configure, так и cкомпилировать CPython. Прочитайте главу «Компиляция CPython» для вашей операционной системы, а потом вернитесь к этой главе. |
После первой компиляции CPython в корне каталога с исходным кодом появится makefile.
Откройте CLion и выберите на заставке вариант Open or Import. Перейдите в каталог c исходным кодом, выберите makefile и щелкните по кнопке Open.
CLion спросит, хотите ли вы открыть каталог или импортировать makefile как новый проект. Выберите вариант Open as Project, чтобы импортировать файл как проект:
Перед импортированием CLion спросит, какую make-цель следует запустить. Оставьте вариант по умолчанию clean и продолжите выполнение:
Затем убедитесь в том, что вы можете собрать исполняемый файл CPython из CLion. Выберите в верхнем меню команду BuildBuild Project.
В строке состояния должен появиться индикатор прогресса сборки проекта.
Когда задача выполнена, скомпилированный двоичный файл можно будет выбрать в конфигурации запуска/отладки.
Выберите команду RunEdit Conigurations, чтобы открыть окно конфигурации запуска/отладки (Run/Debug Configurations). В окне выберите команду +Makefile Application и выполните следующие действия:
1. Введите в поле Name имя cpython.
2. Оставьте в поле Target цель all.
3. В поле Executable откройте выпадающий список и выберите Select Other, затем найдите cкомпилированный двоичный файл CPython в каталоге с исходным кодом. Он будет называться python или python.exe.
4. В поле Program Arguments ведите аргументы программы, которые должны передаваться всегда (например, -X dev для включения режима разработки). Эти флаги будут рассмотрены позднее в разделе «Настройка конфигурации времени выполнения в командной строке».
5. В поле Working Directory введите макрос CLion $ProjectFileDir$:
Щелкните по кнопке OK, чтобы добавить данную конфигурацию. Этот шаг можно повторить сколько угодно раз для всех make-целей CPython. За полной информацией обращайтесь к разделу «Make-цели CPython» в главе «Компиляция CPython».
После этого конфигурация сборки cpython будет доступна справа наверху в окне CLion:
Чтобы протестировать ее, щелкните по кнопке со стрелкой или выберите команду RunRun ’cpython’ в верхнем меню. Снизу в окне CLion должна появиться панель REPL:
Отлично! Теперь вы сможете вносить изменения и быстро их применять командами Build и Run. Если в коде C установлены точки останова, вместо Run следует выбирать Debug.
В редакторе кода зажатие клавиши Cmd (macOS) или Ctrl (Windows и Linux) и щелчок мышью вызывает внутренние средства навигации:
Настройка Vim
Vim — мощный консольный текстовый редактор. Чтобы процесс разработки с Vim был особенно эффективным, разместите пальцы на базовых клавишах (home keys10) клавиатуры. Все необходимые сокращения и команды будут у вас прямо под рукой.
| ПРИМЕЧАНИЕ |
| В большинстве дистрибутивов Linux и в терминале macOS для vim определен синоним vi. В книге будет использоваться команда vim, но команда vi тоже будет работать, если в вашей системе этот синоним существует. |
В исходном состоянии Vim обладает базовой функциональностью и практически не превосходит такой текстовый редактор, как «Блокнот» (Notepad). Однако с некоторыми конфигурациями и расширениями Vim превращается в мощный инструмент для редактирования кода Python и C.
Расширения Vim хранятся в разных местах, включая GitHub. Для упрощения настройки и установки плагинов с GitHub можно воспользоваться менеджером плагинов, например Vundle.
Чтобы установить Vundle, выполните в терминале следующую команду:
$ git clone https://github.com/VundleVim/Vundle.vim.git \
~/.vim/bundle/Vundle.vim
После установки менеджера Vundle необходимо настроить Vim для загрузки ядра Vundle.
Мы установим два плагина:
1. Fugitive: строка состояния для Git с множеством сокращений для выполнения операций Git.
2. Tagbar: панель, упрощающая переход к функциям, методам и классам.
Чтобы установить эти плагины, сначала измените содержимое файла конфигурации Vim (обычно HOME.vimrc) и включите в него следующие строки:
cpython-book-samples11.vimrc
syntax on
set nocompatible " отключить совместимость с Vi, обязательно
filetype off " обязательно
" установка пути среды выполнения для включения Vundle и инициализация
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" Разрешить Vundle управление Vundle, обязательно
Plugin 'VundleVim/Vundle.vim'
" Ниже приводятся примеры различных поддерживаемых форматов.
" Команды Plugin должны располагаться между vundle#begin/end.
" Плагин в репозитории GitHub
Plugin 'tpope/vim-fugitive'
Plugin 'majutsushi/tagbar'
" Все команды Plugin должны быть добавлены до этой строки
call vundle#end() " обязательно
filetype plugin indent on " обязательно
" Автоматически открывать панель tagbar в файлах C, не обязательно
autocmd FileType c call tagbar#autoopen(0)
" Автоматически открывать панель tagbar в файлах Python, не обязательно
autocmd FileType python call tagbar#autoopen(0)
" Вывести строку состояния, не обязательно
set laststatus=2
" Установить статус как git status (branch), не обязательно
set statusline=%{FugitiveStatusline()}
Чтобы загрузить и установить эти плагины, выполните следующие команды:
$ vim +PluginInstall +qall
На экране должны появиться сообщения о загрузке и установке плагинов, заданных в файле конфигурации.
В ходе редактирования и анализа исходного кода CPython обычно возникает необходимость в быстром переключении между методами, функциями и макросами. Простой поиск по тексту не отличит вызов или определение функции от ее реализации. Однако вы можете воспользоваться приложением ctags11 и проиндексировать исходные файлы на разных языках в базу данных с обычным текстом. Чтобы проиндексировать заголовки CPython для всех файлов C и Python в стандартной библиотеке, выполните следующий код:
$./configure
$ make tags
Теперь откройте файл Python ceval.c в Vim:
$ vim Python/ceval.c
Статус Git должен отображаться в нижней строке, а справа в окне появляется список функций, макросов и переменных:
Откройте файл Python — например, Libsubprocess.py:
$ vim Lib/subprocess.py
На панели tagbar будет выведена информация об импортированных именах, классах, методах и функциях:
В Vim можно переключаться между окнами клавишами Ctrl+W, перемещаться на правую панель клавишей L и использовать клавиши со стрелками для перемещения вверх и вниз между функциями.
Нажмите Enter, чтобы перейти к реализации любой функции. Чтобы вернуться к панели редактора, нажмите Ctrl+W, а затем H. 12
| См. также |
| На сайте VIM Adventures1 представлен занятный способ изучения и запоминания команд Vim. |
Выводы
Если вы еще не решили, какую среду разработки выбрать, не обязательно принимать решение прямо сейчас. Мы использовали разные среды во время работы над книгой и при внесении изменений в CPython.
Отладка становится одним из критических факторов эффективной работы, так что надежный отладчик, в котором можно проверить состояние среды выполнения и понять причины ошибок, сэкономит немало времени. Если вы привыкли к отладке в Python с использованием команд print(), обратите внимание, что в C такой подход не работает. Более подробно отладка рассматривается далее в книге.
Редактор Visual Studio можно бесплатно загрузить с веб-сайта Microsoft Visual Studio9.
Клавиши «A», «S», «D», «F» — левая рука и «J», «K», «L» — правая. — Примеч. ред.
https://vim-adventures.com/.
http://ctags.sourceforge.net/.
https://visualstudio.microsoft.com/vs/.
Компиляция CPython
После того как вы загрузили среду разработки и настроили ее, можно скомпилировать исходный код CPython в исполняемый интерпретатор.
В отличие от файлов Python, исходный код C необходимо заново компилировать при каждом изменении. Вероятно, вам стоит положить закладку на этой главе и запомнить некоторые шаги, потому что они будут неоднократно повторяться.
В предыдущей главе вы видели, как настроить среду разработки с возможностью запуска процесса сборки, который перекомпилирует CPython. Но чтобы операции сборки заработали, вам понадобится компилятор C и некоторые инструменты.
Выбор инструментов зависит от операционной системы, поэтому перейдите к разделу, в котором рассматривается ваша ОС.
| ПРИМЕЧАНИЕ |
| Если вас беспокоит, что какие-либо из этих действий отразятся на уже установленных версиях CPython, не тревожьтесь. Каталог исходного кода CPython ведет себя как виртуальная среда. При компиляции CPython или изменении исходного кода стандартной библиотеки все остается в изолированной среде («песочнице») каталога с исходным кодом. Если вы захотите установить нестандартную версию, читайте дальше — этот шаг рассматривается в данной главе. |
Компиляция CPython на macOS
Компиляция CPython на macOS потребует дополнительных приложений и библиотек. Прежде всего вам понадобится основной тулкит компилятора C. Command Line Tools — приложение, которое можно обновлять в macOS через App Store. Исходная установка должна выполняться в терминале.
| ПРИМЕЧАНИЕ |
| Чтобы открыть терминал в macOS, выберите команду Applications OtherTerminal. Приложение лучше сохранить в Dock, поэтому зажмите Ctrl, кликните по иконке и выберите команду Keep in Dock. |
В терминале установите компилятор C и тулкит следующей командой:
$ xcode-select --install
После выполнения команды вам будет предложено загрузить и установить набор инструментов, включая Git, Make и компилятор GNU C.
Кроме того, потребуется рабочая копия OpenSSL для загрузки пакетов с веб-сайта PyPI. Если вы планируете использовать эту сборку для установки дополнительных библиотек, потребуется проверка SSL-сертификата.
Чтобы установить OpenSSL в macOS, проще всего воспользоваться менеджером пакетов Homebrew.
