はじめに

この "Python ライブラリ" には様々な内容が収録されています。

このライブラリには、数値型やリスト型のような、通常は言語の "核" をなす部分とみなされるデータ型が含まれています。Python 言語のコア部分では、これらの型に対してリテラル表現形式を与え、意味づけ上のいくつかの制約を与えていますが、完全にその意味づけを定義しているわけではありません。(一方で、言語のコア部分では演算子のスペルや優先順位のような構文法的な属性を定義しています。)

このライブラリにはまた、組み込み関数と例外が納められています --- 組み込み関数および例外は、全ての Python で書かれたコード上で、 import 文を使わずに使うことができるオブジェクトです。これらの組み込み要素のうちいくつかは言語のコア部分で定義されていますが、大半は言語コアの意味づけ上不可欠なものではないのでここでしか記述されていません。

とはいえ、このライブラリの大部分に収録されているのはモジュールのコレクションです。このコレクションを細分化する方法はいろいろあります。あるモジュールは C 言語で書かれ、Python インタプリタに組み込まれています; 一方別のモジュールは Python で書かれ、ソースコードの形式で取り込まれます。またあるモジュールは、例えば実行スタックの追跡結果を出力するといった、Python に非常に特化したインターフェースを提供し、一方他のモジュールでは、特定のハードウェアにアクセスするといった、特定のオペレーティングシステムに特化したインターフェースを提供し、さらに別のモジュールでは WWW (ワールドワイドウェブ) のような特定のアプリケーション分野に特化したインターフェースを提供しています。モジュールによっては全てのバージョン、全ての移植版の Python で利用することができたり、背後にあるシステムがサポートしている場合にのみ使えたり、Python をコンパイルしてインストールする際に特定の設定オプションを選んだときにのみ利用できたりします。

このマニュアルは "内部から外部へ" と構成されています。つまり、最初に組み込みの関数を記述し、組み込みのデータ型、例外、そして最後に各モジュールと続きます。モジュールは関係のあるものでグループ化して一つの章にしています。

つまり、このマニュアルを最初から読み始め、読み飽きたところで次の章に進めば、 Python ライブラリで利用できるモジュールやサポートしているアプリケーション領域の概要をそこそこ理解できるということです。もちろん、このマニュアルを小説のように読む必要は ありません --- (マニュアルの先頭部分にある) 目次にざっと目を通したり、 (最後尾にある) 索引でお目当ての関数やモジュール、用語を探すことだってできます。もしランダムな項目について勉強してみたいのなら、ランダムにページを選び (random 参照)、そこから 1, 2 節読むこともできます。このマニュアルの各節をどんな順番で読むかに関わらず、 組み込み関数 の章から始めるとよいでしょう。マニュアルの他の部分は、この節の内容について知っているものとして書かれているからです。

それでは、ショーの始まりです!

利用可能性について

  • 「利用できる環境 : Unix 」の意味はこの関数が Unix システムにあることが多いということです。このことは特定の OS における存在を主張するものではありません。

  • 特に記述がない場合、「利用できる環境 : Unix 」と書かれている関数は、ともに Unix をコアにしている macOS と iOS でも利用することができます。

  • 利用可能性の注釈に最小カーネルバージョンと最小 libc バージョンの両方が含まれている場合は、両方の条件を満たさなければなりません。例えば、 Availability: Linux >= 3.17 with glibc >= 2.27 という注釈付きの機能には、 Linux 3.17 以上と、 glibc 2.27 以上の両方が必要です。

WebAssembly プラットフォーム

WebAssembly プラットフォームである wasm32-emscripten (Emscripten) と wasm32-wasi (WASI) は、 POSIX API のサブセットを提供します。 WebAssembly ランタイムとブラウザーはサンドボックス化されており、ホストや外部リソースへのアクセスが制限されています。プロセス、スレッド、ネットワーク、シグナル、または他の形のプロセス間通信 (IPC) を使用する標準ライブラリモジュールは、利用不可か、他の Unix ライクなシステムのようには動作しません。ファイル I/O 、ファイルシステム、 Unix の権限関係の機能も制限されています。 Emscripten はブロッキング I/O を許可しません。 sleep() のような他のブロッキング操作は、ブラウザーのイベントループをブロックします。

WebAssembly プラットフォーム上での Python の 性質と振る舞いは、 Emscripten-SDK や WASI-SDK のバージョン、 WASM ランタイム (ブラウザ、 NodeJS 、 wasmtime) 、Python のビルド時フラグによって決まります。 WebAssembly や Emscripten 、 WASI は標準を発展させており、ネットワークなどの機能は将来的にサポートされるかもしれません

ブラウザ上の Python では、ユーザーは PyodidePyScript を検討すべきでしょう。 PyScript は、 Pyodide をもとにして構築されており、 Pyodide 自体は CPython や Emscripten 上に構築されています。 Pyodide は、ブラウザの JavaScript と DOM API だけでなく、 JavaScript の XMLHttpRequestFetch API による制限されたネットワーク機能へのアクセスを提供します。

  • プロセス関連の API は利用不可能か、常にエラーにより失敗します。これには、新しいプロセスを作成 (fork()execve()) 、プロセスを待機 (waitpid()) 、シグナルを送信 (kill()) 、もしくはプロセスと通信する API が含まれます。 subprocess はインポート可能ですが、機能しません。

  • The socket module is available, but is limited and behaves differently from other platforms. On Emscripten, sockets are always non-blocking and require additional JavaScript code and helpers on the server to proxy TCP through WebSockets; see Emscripten Networking for more information. WASI snapshot preview 1 only permits sockets from an existing file descriptor.

  • Some functions are stubs that either don't do anything and always return hardcoded values.

  • Functions related to file descriptors, file permissions, file ownership, and links are limited and don't support some operations. For example, WASI does not permit symlinks with absolute file names.

iOS

ほとんどの点において、 iOS は POSIX オペレーティングシステムです。ファイル I/Oやソケット処理、スレッドは全て POSIX オペレーティングシステム上と同様に動作します。しかし、 iOS と他のPOSIX システムの間には、いくつかの大きな違いがあります。

  • iOS では、 "埋め込み" モードの Python のみが有効です。 Python の REPL は存在せず、通常の Python 開発の一部である、 pip のように、バイナリを実行する能力もありません。 Python のコードを iOS アプリに追加するためには、 Python 埋め込み API を使用して、 Xcode で作成された iOS アプリに Python インタープリターを追加する必要があります。詳細は、iOS 使用ガイド にあります。

  • iOS アプリは、どのような形であっても、サブプロセスやバックグラウンドプロセス、プロセス間通信を使用することはできません。 iOS アプリがサブプロセスを作成しようと試みると、サブプロセスを作成するプロセスは、ロックアップまたはクラッシュします。 iOS アプリには、この目的のために存在する iOS 固有の API 以外には、実行中の他のアプリケーションの可視性も、実行中の他のアプリケーションと通信する機能もありません。

  • iOS アプリでは、 (システム時計のような) システムリソースを変更することは制限されています。これらのリソースは読み込み可能であることがよくありますが、リソースの変更は大抵失敗します。

  • iOS アプリには、コンソールの入出力に関して限られた概念しかありません。 stdoutstderr は存在し、 stdoutstderr に書き出されたコンテンツは Xcode で実行中にログに表示されますが、システムログには記録されません。もしアプリをインストールしたユーザーが診断補助としてアプリのログを提供する場合は、 stdout または stderr に書き込まれた詳細は含まれません。

    iOS アプリには、 stdin の概念はまったくありません。 iOS アプリではキーボードが使用可能な場合もありますが、これはソフトウェアの機能であり、 stdin に属するものではありません。

    このため、コンソール操作に関係する Python ライブラリ (cursesreadline) は iOS では使用可能ではありません。