Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Внутри CPython гид по интерпретатору Python.pdf
Скачиваний:
4
Добавлен:
07.04.2024
Размер:
8.59 Mб
Скачать

Конфигурация и ввод

После рассмотрения грамматики Python давайте разберемся, как код переходит в исполняемое состояние.

Существует много способов выполнения Python-кода в CPython. Несколько наиболее популярных:

1.Выполнение команды python -c со строкой Python.

2.Выполнение команды python -m с именем модуля.

3.Выполнение команды python <файл> с путем к файлу, содержащему Python-код.

4.Передача Python-кода исполняемому файлу python через stdin — например, cat <файл> | python.

5.Запуск REPL и выполнение команд по очереди.

6.Использование C API и Python как встроенной среды.

СМ. ТАКЖЕ

Обилие способов выполнения скриптов Python ошеломляет. За допол­ нительной информацией о выполнении скриптов Python обратитесь к статье «How to Run Your Python Scripts»1 на сайте Real Python.

1 https://realpython.com/run-python-scripts/.

Книги для программистов: https://t.me/booksforits

74    Конфигурация и ввод

Для выполнения любого Python-кода интерпретатору понадобятся три элемента:

1.Модуль, который должен быть выполнен.

2.Состояние для хранения информации (например, переменных).

3.Конфигурация (активные настройки).

Сэтими тремя компонентами интерпретатор может выполнить код и предоставить вывод:

 

 

 

 

 

 

 

 

 

 

ПРИМЕЧАНИЕ

По аналогии с руководством по стилю PEP 8 для Python-кода существу­ ет руководство PEP 7 для кода C в CPython. Оно включает следующие стандарты выбора имен для исходного кода C:

Префикс Py для общедоступных функций (и никогда для статиче­ ских).

Префикс Py_ для глобальных служебных процедур — таких, как Py_FatalError. Конкретные группы функций (например, API кон­ кретных объектных типов) должны использовать более длинный префикс — например, PyString_ для строковых функций.

Имена общедоступных функций и переменных должны запи­ сываться в смешанном регистре с разделением слов нижним подчеркиванием — например, PyObject_GetAttr(), Py_BuildValue() и PyExc_TypeError().

Книги для программистов: https://t.me/booksforits

Конфигурация состояния    75

Префикс _Py должен быть зарезервирован для внутренних функ­ ций, которые должны быть видимыми для загрузчика, например

_PyObject_Dump().

Имена макросов должны иметь префикс в смешанном регистре, все остальные слова должны быть в верхнем регистре и разде­ лены нижним подчеркиванием, например PyString_AS_STRING

и Py_PRINT_RAW.

Существует не так много программных инструментов для проверки соблюдения руководства PEP 7 (в отличие от PEP 8). Эта задача должна решаться разработчиками входе код-ревью.Как илюбой процесс,управ­ ляемыйчеловеком,такойкод-ревьюнеизбавленотошибок,поэтомувам, скорее всего, попадется код, не соответствующий PEP 7. Единственный инструмент автоматизации этого процесса, входящий в дистрибутив, — скрипт smelly.py,который можно выполнить командой make smelly вLinux или macOS либо запустить из командной строки:

$ ./python Tools/scripts/smelly.py

Скрипт выдает сообщения об ошибках для всех символических имен в libpython (общей библиотеке CPython), не начинающихся с Py или _Py.

КОНФИГУРАЦИЯ СОСТОЯНИЯ

Прежде чем выполнять какой-либо Python-код, среда выполнения CPython сначала устанавливает конфигурацию среды выполнения Python с учетом всех параметров, переданных пользователем.

Согласно определению из PEP 587, данные конфигурации среды выполнения хранятся в трех местах:

1. PyPreConfig — данные конфигурации для предварительной инициализации.

2.PyConfig — данные конфигурации среды выполнения.

3.Скомпилированная конфигурация интерпретатора CPython.

Обе структуры данных, PyPreConfig и PyConfig, определяются в Include cpython initconfig.h.

Книги для программистов: https://t.me/booksforits

76    Конфигурация и ввод

Конфигурация предварительной инициализации

Конфигурация предварительной инициализации существует отдельно от конфигурации среды выполнения, так как ее свойства относятся к операционной системе или окружению пользователя.

PyPreConfig имеет три основные функции:

1.Настройка распределителя памяти Python.

2.Настройка локали LC_CTYPE системной или предпочитаемой пользователем локалью.

3.Настройка режима UTF-8 (PEP 540).

Тип PyPreConfig содержит следующие поля (все они относятся к типу int):

zz allocator: выбор распределителя памяти — например, PYMEM_ALLOCATOR_ MALLOC. Чтобы получить дополнительную информацию о распределителе памяти, выполните команду ./configure --help.

zz configure_locale: LC_CTYPE присваивается локаль, выбранная пользователем. Если значение равно 0, то coerce_c_locale и coerce_c_locale_warn

также присваивается 0.

zz coerce_c_locale: если поле содержит 2, принудительно ввести локаль C. Если значение равно 1, прочитать локальный контекст LC_CTYPE, чтобы принять решение о его принудительном использовании.

zz coerce_c_locale_warn: если значение отлично от нуля, при принудительном применении локали C выдается предупреждение.

zz dev_mode: включение режима разработки.

zz isolated: включение изолированного режима. sys.path не содержит ни каталог скрипта, ни каталог веб-пакетов пользователя.

zz legacy_windows_fs_encoding (только для Windows): если значение отлично от нуля, режим UTF-8 отключается, а для кодировки файловой системы Python устанавливается значение mbcs.

zz parse_argv: если значение отлично от нуля, использовать аргументы командной строки.

zz use_environment: если значение больше нуля, использовать переменные среды.

zz utf8_mode: если значение отлично от нуля, включить режим UTF-8.

Книги для программистов: https://t.me/booksforits