Введение

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

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

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

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

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

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

Пусть шоу начнется!

Примечания по наличию

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

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

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

Платформы WebAssembly

Платформы WebAssembly wasm32-emscripten (Emscripten) и wasm32-wasi (WASI) предоставляют подмножество POSIX API. Исполнители и браузеры 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 и DOM API браузеров, а также ограниченные сетевые возможности с помощью XMLHttpRequest и Fetch JavaScript. API.

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

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

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

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

iOS

iOS - это, в большинстве своем, операционная система POSIX. Файловый ввод/вывод, работа с сокетами и создание потоков - все они ведут себя так же, как и в любой POSIX-операционной системе. Однако есть несколько основных различий между iOS и другими POSIX-системами.

  • iOS может использовать Python только во «встроенном» режиме. В ней нет ни Python REPL, ни возможности запускать двоичные файлы, которые являются частью обычного опыта разработчиков Python, например pip. Чтобы добавить код Python в приложение для iOS, вы должны использовать Python embedding API для добавления интерпретатора Python в приложение для iOS, созданное с помощью Xcode. Более подробную информацию см. в разделе iOS usage guide.

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

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

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

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

    В результате библиотеки Python, предполагающие работу с консолью (например, curses и readline), недоступны на iOS.