Wprowadzenie

„Pustaka Python” berisi beberapa jenis komponen.

Ini berisi tipe data yang biasanya dianggap bagian „inti” dari bahasa, seperti angka dan daftar list. Untuk tipe ini, inti bahasa Python mendefinisikan bentuk literal dan menempatkan beberapa batasan pada semantiknya, tetapi tidak sepenuhnya mendefinisikan semantik. (Di sisi lain, inti bahasa mendefinisikan properti sintaksis seperti ejaan dan prioritas operator.)

Pustaka juga berisi fungsi dan pengecualian bawaan — objek yang dapat digunakan oleh semua kode Python tanpa memerlukan pernyataan import. Beberapa di antaranya didefinisikan oleh bahasa inti, tetapi banyak yang tidak esensial untuk semantik inti dan hanya dijelaskan di sini.

Namun, sebagian besar pustaka terdiri dari kumpulan modul. Ada banyak cara untuk membedah koleksi ini. Beberapa modul ditulis dalam C dan dibangun ke dalam interpreter Python; yang lain ditulis dengan Python dan diimpor dalam bentuk sumber. Beberapa modul menyediakan antarmuka yang sangat spesifik untuk Python, seperti mencetak tumpukan jejak stack trace; beberapa menyediakan antarmuka yang khusus untuk sistem operasi tertentu, seperti akses ke perangkat keras tertentu; yang lain menyediakan antarmuka yang khusus untuk domain aplikasi tertentu, seperti World Wide Web. Beberapa modul tersedia di semua versi dan port dari Python; yang lain hanya tersedia ketika sistem yang mendasarinya mendukung atau membutuhkannya; yang lain hanya tersedia ketika opsi konfigurasi tertentu dipilih pada saat Python dikompilasi dan diinstal.

Manual ini disusun „dari dalam ke luar:” pertama-tama menggambarkan fungsi bawaan, tipe data dan pengecualian, dan akhirnya modul, dikelompokkan dalam bab-bab modul terkait.

Ini berarti bahwa jika Anda mulai membaca manual ini dari awal, dan melompat ke bab berikutnya ketika Anda bosan, Anda akan mendapatkan gambaran umum yang masuk akal dari modul yang tersedia dan area aplikasi yang didukung oleh pustaka Python. Tentu saja, Anda tidak harus membacanya seperti novel — Anda juga dapat menelusuri daftar isi (di depan manual), atau mencari fungsi, modul, atau istilah tertentu dalam indeks (dalam bagian belakang). Dan akhirnya, jika Anda menikmati belajar tentang subjek acak, Anda memilih nomor halaman acak (lihat modul random) dan baca satu atau dua bagian. Terlepas dari urutan di mana Anda membaca bagian-bagian dari manual ini, ada baiknya untuk memulai dengan bab Wbudowane funkcje, karena sisa manual mengasumsikan terbiasa dengan materi ini.

Biarkan pertunjukan dimulai!

Catatan tentang ketersediaan

  • Catatan „Ketersediaan: Unix” berarti bahwa fungsi ini biasanya ditemukan pada sistem Unix. Itu tidak membuat klaim tentang keberadaannya pada sistem operasi tertentu.

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

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

Платформы веб-сборки

Платформы 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 обеспечивает доступ к API-интерфейсам JavaScript и DOM браузеров, а также ограниченные сетевые возможности с помощью API-интерфейсов XMLHttpRequest и Fetch JavaScript.

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

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

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

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

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

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

  • Мобильные платформы могут использовать Python только во «встроенном» режиме. Не существует Python REPL и нет возможности использовать отдельные исполняемые файлы, такие как python или pip. Чтобы добавить код Python в свое мобильное приложение, вы должны использовать API встраивания Python. Более подробную информацию см. в разделах Using Python on Android и Using Python on iOS.

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

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

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

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

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

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

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

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

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