- •Об авторе
- •О группе редакторов
- •Предисловие
- •Введение
- •Как использовать эту книгу
- •Загрузка исходного кода CPython
- •Что в исходном коде?
- •Настройка среды разработки
- •IDE или редактор?
- •Настройка Visual Studio
- •Настройка Visual Studio Code
- •Настройка Vim
- •Выводы
- •Компиляция CPython
- •Компиляция CPython на macOS
- •Компиляция CPython на Linux
- •Установка специализированной версии
- •Знакомство с Make
- •Make-цели CPython
- •Компиляция CPython на Windows
- •Профильная оптимизация
- •Выводы
- •Грамматика и язык Python
- •Спецификация языка Python
- •Генератор парсеров
- •Повторное генерирование грамматики
- •Выводы
- •Конфигурация и ввод
- •Конфигурация состояния
- •Структура данных конфигурации среды выполнения
- •Конфигурация сборки
- •Сборка модуля из входных данных
- •Выводы
- •Генерирование конкретного синтаксического дерева
- •Парсер/токенизатор CPython
- •Абстрактные синтаксические деревья
- •Важные термины
- •Пример: добавление оператора «почти равно»
- •Выводы
- •Компилятор
- •Исходные файлы
- •Важные термины
- •Создание экземпляра компилятора
- •Флаги будущей функциональности и флаги компилятора
- •Таблицы символических имен
- •Основная компиляция
- •Ассемблер
- •Создание объекта кода
- •Использование Instaviz для вывода объекта кода
- •Пример: реализация оператора «почти равно»
- •Выводы
- •Цикл вычисления
- •Исходные файлы
- •Важные термины
- •Построение состояния потока
- •Построение объектов кадров
- •Выполнение кадра
- •Стек значений
- •Пример: добавление элемента в список
- •Выводы
- •Управление памятью
- •Выделение памяти в C
- •Проектирование системы управления памятью Python
- •Аллокаторы памяти CPython
- •Область выделения объектной памяти и PyMem
- •Область выделения сырой памяти
- •Нестандартные области выделения памяти
- •Санитайзеры выделенной памяти
- •Арена памяти PyArena
- •Подсчет ссылок
- •Сборка мусора
- •Выводы
- •Параллелизм и конкурентность
- •Модели параллелизма и конкурентности
- •Структура процесса
- •Многопроцессорный параллелизм
- •Многопоточность
- •Асинхронное программирование
- •Генераторы
- •Сопрограммы
- •Асинхронные генераторы
- •Субинтерпретаторы
- •Выводы
- •Объекты и типы
- •Примеры этой главы
- •Встроенные типы
- •Типы объектов
- •Тип type
- •Типы bool и long
- •Тип строки Юникода
- •Словари
- •Выводы
- •Стандартная библиотека
- •Модули Python
- •Модули Python и C
- •Набор тестов
- •Запуск набора тестов в Windows
- •Запуск набора тестов в Linux или macOS
- •Флаги тестирования
- •Запуск конкретных тестов
- •Модули тестирования
- •Вспомогательные средства тестирования
- •Выводы
- •Отладка
- •Обработчик сбоев
- •Компиляция поддержки отладки
- •LLDB для macOS
- •Отладчик Visual Studio
- •Отладчик CLion
- •Выводы
- •Бенчмаркинг, профилирование и трассировка
- •Использование timeit для микробенчмарка
- •Использование набора тестов производительности Python
- •Профилирование кода Python с использованием cProfile
- •Выводы
- •Что дальше?
- •Создание расширений C для CPython
- •Улучшение приложений Python
- •Участие в проекте CPython
- •Дальнейшее обучение
- •Препроцессор C
- •Базовый синтаксис C
- •Выводы
- •Благодарности
|
Компиляция CPython на Windows 51 |
|
|
ЦЕЛЬ |
НАЗНАЧЕНИЕ |
recheck |
Повторное выполнение configure c теми же параметрами, ко- |
|
торые применялись в последний раз |
smelly |
Проверка того, что имена экспортируемых символических |
|
имен начинаются с Py или _Py (см. PEP 7) |
tags |
Создание файла tags для vi |
TAGS |
Создание файла tags для Emacs |
КОМПИЛЯЦИЯ CPYTHON НА WINDOWS
Существуют два способа компиляции двоичных файлов и библиотек CPython на Windows:
1.Компиляция из командной строки. Для этого варианта потребуется компилятор Microsoft Visual C++, входящий в поставку Visual Studio.
2.Прямая сборка через PCbuild pcbuild.sln в Visual Studio.
Вследующих разделах рассматриваются оба варианта.
Установка зависимостей
Как при компиляции из командной строки, так и через Visual Studio необходимо установить ряд дополнительных инструментов, библиотек и заголовков C.
В папке PCbuild находится файл .bat, автоматизирующий этот процесс. Откройте окно командной строки в PCbuild и выполните команду PCbuild get_externals.bat:
> get_externals.bat
Using py -3.7 (found 3.7 with py.exe)
Fetching external libraries...
Fetching bzip2-1.0.6...
Fetching sqlite-3.28.0.0...
Fetching xz-5.2.2...
Fetching zlib-1.2.11...
Fetching external binaries...
Fetching openssl-bin-1.1.1d...
Fetching tcltk-8.6.9.0...
Finished.
Теперь можно выполнить компиляцию из командной строки или Visual Studio.
Книги для программистов: https://t.me/booksforits
52 Компиляция CPython
Компиляция из командной строки
Чтобы выполнить компиляцию из командной строки, необходимо выбрать архитектуру процессора, для которого компилируется программа. По умолчанию используется архитектура win32, но вполне вероятно, что вам понадобится 64-разрядный двоичный файл (amd64).
Если вы занимаетесь отладкой, то отладочная сборка включает возможность установки точек останова в исходном коде. Чтобы включить отладочную сборку, добавьте параметр -c Debug для определения отладочной конфигурации.
По умолчанию build.bat загружает внешние зависимости, но поскольку этот шаг уже выполнен, выведется сообщение о пропуске загрузки:
> build.bat -p x64 -c Debug
Команда создает двоичный файл Python PCbuild amd64 python_d.exe. Запустите его прямо из командной строки:
> amd64\python_d.exe
Python 3.9 (tags/v3.9:9cf67522, Oct 5 2020, 10:00:00) [MSC v.1922 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Теперь вы находитесь в REPL скомпилированного двоичного файла CPython.
Чтобы скомпилировать окончательный двоичный файл, используйте следующую команду:
> build.bat -p x64 -c Release
Команда создаст двоичный файл PCbuild amd64 python.exe.
ПРИМЕЧАНИЕ
Суффикс _d указывает,что CPython собран в отладочной конфигурации.
Двоичные файлы на Python.org скомпилированы в конфигурации про фильной оптимизации (PGO, Profile-Guided Optimization). За дополни тельной информацией о PGO обращайтесь к разделу «Профильная оп тимизация» в конце этой главы.
Книги для программистов: https://t.me/booksforits
Компиляция CPython на Windows 53
Аргументы
Для build.bat доступны следующие аргументы.
ФЛАГ |
НАЗНАЧЕНИЕ |
ОЖИДАЕМОЕ ЗНАЧЕНИЕ |
-p |
Архитектура процессора |
x64, Win32 (по умолчанию), ARM, ARM64 |
-c |
Конфигурация сборки |
Release (по умолчанию), Debug, |
|
|
PGInstrument или PGUpdate |
-t |
Цель сборки |
Build (по умолчанию), Rebuild, Clean, |
|
|
CleanAll |
Флаги
Некоторые дополнительные флаги, которые могут использоваться с build.bat.
ФЛАГ |
НАЗНАЧЕНИЕ |
-v |
Режим расширенного вывода: вывод информационных сообщений |
|
в процессе сборки |
-vv |
Режим подробного расширенного вывода: вывод подробных со- |
|
общений в процессе сборки |
-q |
Тихий режим: вывод только предупреждений и ошибок в процессе |
|
сборки |
-e |
Загрузка и установка внешних зависимостей (по умолчанию) |
-E |
Отказ от загрузки и установки внешних зависимостей |
--pgo |
Сборка с профильной оптимизацией |
--regen |
Повторное генерирование всей грамматики и токенов (использует- |
|
ся при обновлении языка) |
Чтобы просмотреть полный список, выполните команду build.bat -h.
Компиляция из Visual Studio
В папке PCbuild находится файл решения Visual Studio PCbuild pcbuild.sln, предназначенный для сборки и анализа исходного кода CPython.
При загрузке файла решения вам будет предложено переопределить цель проектов внутри данного решения в соответствии с установленной версией
Книги для программистов: https://t.me/booksforits
54 Компиляция CPython
компилятора C/C++. Visual Studio также ориентируется на установленную версию Windows SDK.
Не забудьте заменить версию Windows SDK последней установленной версией. Набор инструментов платформы тоже должен иметь новейшую версию. Если вы пропустили это окно, щелкните правой кнопкой мыши на файле решения в окне Solutions and Projects и выберите команду Retarget Solution.
Перейдите к окну Build Configuration Manager. Убедитесь в том, что в выпадающем списке Active Solution Configuration выбран вариант Debug, а в списке Active Solution Platform — вариант x64 для 64-разрядной архитектуры процессора или win32 для 32-разрядной.
Затем соберите CPython комбинацией клавиш Ctrl+Shift+B или командой Build Build Solution. Если вы получите ошибки, сообщающие об отсутствии Windows SDK, убедитесь в том, что вы выбрали правильные настройки цели
вокне Re-target Solution. Также в меню Пуск должна быть папка Windows Kits,
вкоторой находится Windows Software Development Kit.
В первый раз сборка может занять десять минут и более. После завершения сборки могут появиться предупреждения, на которые можно не обращать внимания. Чтобы запустить отладочную версию CPython, нажмите F5; CPython запустит REPL в отладочном режиме:
Чтобы запустить сборку в окончательной версии, замените конфигурацию сборки Debug на Release в верхней строке меню и снова выполните команду Build Build Solution. Теперь у вас имеются как отладочная, так и окончательная версии двоичного файла CPython в папке PCbuild amd64.
Чтобы настроить Visual Studio для открытия REPL с окончательной или отладочной версией, выберите команду Tools Python Python Environments в верхнем меню. На панели Python Environments щелкните по кнопке Add Environment, а затем
Книги для программистов: https://t.me/booksforits
Компиляция CPython на Windows 55
выберите двоичный файл в нужной версии. Отладочный двоичный файл завершается суффиксом _d.exe (например, python_d.exe или pythonw_d.exe).
Вам стоит использовать отладочный двоичный файл — он содержит поддержку отладки в Visual Studio и пригодится вам в ходе чтения книги.
В окне Add Environment выберите интерпретатор python_d.exe в поле Interpreter Path и оконный интерпретатор pythonw_d.exe в поле Windowed Interpreter (optional):
Запустите сеанс REPL при помощи кнопки Open Interactive Window в окне Python Environments. Откроется REPL скомпилированной версии Python:
Книги для программистов: https://t.me/booksforits