Перейти к содержимому

IntroductionВведение

«Библиотека Python» содержит несколько различных видов компонентов.

Она содержит типы данных, которые обычно считаются частью «ядра» языка, такие как числа и списки. Для этих типов ядро языка Python определяет форму литералов и накладывает некоторые ограничения на их семантику, но не определяет семантику полностью. (С другой стороны, ядро языка определяет синтаксические свойства, такие как написание и приоритеты операторов.)

Библиотека также содержит встроенные функции и исключения – объекты, которые могут использоваться любым кодом Python без необходимости инструкции import. Некоторые из них определены ядром языка, но многие не являются существенными для его семантики и описаны только здесь.

Однако основная часть библиотеки состоит из набора модулей. Этот набор можно классифицировать по-разному. Некоторые модули написаны на C и встроены в интерпретатор Python; другие написаны на Python и импортируются в исходной форме. Одни модули предоставляют интерфейсы, специфичные для Python, например, печать стека вызовов; другие – интерфейсы, специфичные для конкретных операционных систем, такие как доступ к определённому оборудованию; третьи – интерфейсы, относящиеся к конкретной предметной области, например, к Всемирной паутине. Некоторые модули доступны во всех версиях и портах Python; другие – только если базовая система поддерживает или требует их; и наконец, третьи доступны только при выборе определённого параметра конфигурации во время компиляции и установки Python.

Данное руководство организовано «изнутри наружу»: сначала описываются встроенные функции, типы данных и исключения, а затем модули, сгруппированные по главам в соответствии с их тематикой.

Это означает, что при чтении руководства с начала и переходе к следующей главе, когда стало скучно, можно получить разумный обзор доступных модулей и областей применения, поддерживаемых библиотекой Python. Конечно, вы не обязаны читать его как роман – можно также просмотреть оглавление (в начале руководства) или найти конкретную функцию, модуль или термин в указателе (в конце). И наконец, если вам нравится изучать случайные темы, можно выбрать случайный номер страницы (см. модуль random) и прочитать один-два раздела. Независимо от порядка чтения разделов этого руководства, полезно начать с главы Встроенные функции, поскольку остальная часть руководства предполагает знакомство с этим материалом.

Приступим!

Notes on availabilityПримечания о доступности

  • Примечание «Availability: Unix» означает, что эта функция обычно встречается в системах Unix. Оно не даёт никаких гарантий её наличия в конкретной операционной системе.

  • Если не указано иное, все функции, заявляющие «Availability: Unix», поддерживаются на macOS, iOS и Android – все они основаны на ядре Unix.

  • Если примечание о доступности содержит и минимальную версию ядра, и минимальную версию libc, то оба условия должны выполняться. Например, возможность с примечанием Availability: Linux >= 3.17 with glibc >= 2.27 требует Linux 3.17 или новее и glibc 2.27 или новее.

WebAssembly platformsПлатформы WebAssembly

Платформы WebAssembly wasm32-emscripten (Emscripten) и wasm32-wasi (WASI) предоставляют подмножество API POSIX. Среды выполнения WebAssembly и браузеры изолированы (песочница) и имеют ограниченный доступ к хосту и внешним ресурсам. Любой модуль стандартной библиотеки Python, использующий процессы, потоки, сеть, сигналы или другие формы межпроцессного взаимодействия (IPC), либо недоступен, либо может работать не так, как в других Unix-подобных системах. Функции ввода-вывода файлов, файловой системы и прав доступа Unix также ограничены. Emscripten не допускает блокирующего ввода-вывода. Другие блокирующие операции, такие как sleep(), блокируют цикл событий браузера.

Свойства и поведение Python на платформах WebAssembly зависят от версии Emscripten-SDK или WASI-SDK, сред выполнения WASM (браузер, NodeJS, wasmtime) и флагов сборки Python. WebAssembly, Emscripten и WASI являются развивающимися стандартами; некоторые функции, такие как работа с сетью, могут поддерживаться в будущем.

Для Python в браузере пользователям стоит рассмотреть Pyodide или PyScript. PyScript построен на основе Pyodide, который, в свою очередь, построен на основе CPython и Emscripten. Pyodide предоставляет доступ к JavaScript API браузера и DOM API, а также ограниченные сетевые возможности с помощью JavaScript API XMLHttpRequest и Fetch.

  • API, связанные с процессами, недоступны или всегда завершаются ошибкой. Сюда входят API для запуска новых процессов (fork(), execve()), ожидания процессов (waitpid()), отправки сигналов (kill()) или иного взаимодействия с процессами. subprocess импортируется, но не работает.

  • Модуль socket доступен, но ограничен и ведёт себя иначе, чем на других платформах. В Emscripten сокеты всегда неблокирующие и требуют дополнительного кода JavaScript и вспомогательных средств на сервере для проксирования TCP через WebSockets; см. Emscripten Networking для получения дополнительной информации. WASI snapshot preview 1 разрешает сокеты только из существующего файлового дескриптора.

  • Некоторые функции являются заглушками: они либо ничего не делают, либо всегда возвращают жёстко заданные значения.

  • Функции, связанные с файловыми дескрипторами, правами доступа к файлам, владельцами файлов и ссылками, ограничены и не поддерживают некоторые операции. Например, WASI не допускает символические ссылки с абсолютными именами файлов.

Mobile platformsМобильные платформы

Android и iOS в большинстве аспектов являются операционными системами POSIX. Ввод-вывод файлов, работа с сокетами и потоки ведут себя так же, как в любой другой POSIX-системе. Однако есть несколько существенных отличий:

  • Мобильные платформы могут использовать Python только в «встроенном» режиме (embedded). Нет REPL Python и возможности использовать отдельные исполняемые файлы, такие как python или pip. Чтобы добавить код Python в мобильное приложение, необходимо использовать API внедрения Python (Python embedding API). Для получения дополнительной информации см. Использование Python на Android и Использование Python на iOS.

  • Подпроцессы:

    • В Android создание подпроцессов возможно, но официально не поддерживается. В частности, Android не поддерживает никакую часть API System V IPC, поэтому multiprocessing недоступен.

    • Приложение iOS не может использовать никакие формы подпроцессов, многопроцессности или межпроцессного взаимодействия. Если приложение iOS попытается создать подпроцесс, процесс, создающий подпроцесс, либо зависнет, либо аварийно завершится. Приложение iOS не видит другие запущенные приложения и не имеет возможности взаимодействовать с ними, за исключением iOS-специфичных API, предназначенных для этой цели.

  • Мобильные приложения имеют ограниченный доступ к изменению системных ресурсов (например, системных часов). Эти ресурсы часто будут читаемыми, но попытки изменить их обычно завершаются неудачей.

  • Консольный ввод и вывод:

    • На Android нативные stdout и stderr ни к чему не подключены, поэтому Python устанавливает собственные потоки данных, которые перенаправляют сообщения в системный журнал. Их можно увидеть под тегами python.stdout и python.stderr соответственно.

    • В приложениях iOS концепция консольного вывода ограничена. stdout и stderr существуют, и содержимое, записанное в stdout и stderr, будет видно в журналах при запуске в Xcode, но это содержимое не будет записано в системный журнал. Если пользователь, установивший ваше приложение, предоставит журналы приложения в качестве диагностического средства, они не будут содержать никаких сведений, записанных в stdout или stderr.

    • В мобильных приложениях вообще нет полезного stdin. Хотя приложения могут отображать экранную клавиатуру, это программная возможность, а не то, что подключено к stdin.

      В результате модули Python, связанные с манипуляциями консолью (такие как curses и readline), недоступны на мобильных платформах.