Introduction

La « Bibliothèque Python » contient divers composants dans différentes catégories.

Elle contient des types de données qui seraient normalement considérés comme « fondamentaux » au langage, tel que les nombres et les listes. Pour ces types, le cœur du langage en définit les écritures littérales et impose quelques contraintes sémantiques, sans les définir exhaustivement. (Cependant le cœur du langage impose quelques propriétés comme l'orthographe des attributs ou les caractéristiques des opérateurs.)

La bibliothèque contient aussi des fonctions et des exceptions natives, pouvant être utilisées par tout code Python sans import. Certaines sont définies par le noyau de Python, bien qu'elles ne soient pas toutes essentielles.

La grande majorité de la bibliothèque consiste cependant en une collection de modules. Cette collection peut être parcourue de différentes manières. Certains modules sont rédigés en C et inclus dans l'interpréteur Python, d'autres sont écrits en Python et leur source est importée. Certains modules fournissent des interfaces extrêmement spécifiques à Python, tel que l'affichage d'une pile d'appels, d'autres fournissent des interfaces spécifiques à un système d'exploitation, comme l'accès à du matériel spécifique. D'autres fournissent des interfaces spécifiques à un domaine d'application, comme le World Wide Web. Certains modules sont disponibles dans toutes les versions et implémentations de Python, d'autres ne sont disponibles que si le système sous-jacent les gère ou en a besoin. Enfin, d'autres ne sont disponibles que si Python à été compilé avec une certaine option.

Cette documentation organise les modules « de l'intérieur vers l'extérieur », documentant en premier les fonctions natives, les types de données et exceptions, puis les modules, groupés par chapitre, par thématiques.

Ça signifie que si vous commencez à lire cette documentation du début, et sautez au chapitre suivant lorsqu'elle vous ennuie, vous aurez un aperçu global des modules et domaines couverts par cette bibliothèque. Bien sûr vous n'avez pas à la lire comme un roman, vous pouvez simplement survoler la table des matières (au début), ou chercher une fonction, un module, ou un mot dans l'index (à la fin). Et si vous appréciez apprendre sur des sujets au hasard, choisissez une page au hasard (avec le module random) et lisez un chapitre ou deux. Peu importe l'ordre que vous adopterez, commencez par le chapitre Fonctions natives, car les autres chapitres présument que vous en avez une bonne connaissance.

Que le spectacle commence !

Notes sur la disponibilité

  • Une note « Disponibilité : Unix » signifie que cette fonction est communément implémentée dans les systèmes Unix. Une telle note ne prétend pas l'existence de la fonction sur un système d'exploitation particulier.

  • If not separately noted, all functions that claim "Availability: Unix" are supported on macOS and iOS, both of which build on a Unix core.

  • Si une note de disponibilité contient à la fois une version minimale du noyau et une version minimale de la libc, les deux conditions doivent être remplies. Par exemple, une fonctionnalité avec la note Disponibilité : Linux >= 3.17 avec glibc >= 2.27 nécessite à la fois Linux 3.17 ou plus récent et glibc 2.27 ou plus récent.

Plateformes WebAssembly

Les plates-formes WebAssembly wasm32-emscripten (Emscripten) et wasm32-wasi (WASI) fournissent un sous-ensemble des API POSIX. Les environnements d'exécution WebAssembly et les navigateurs sont dans des bacs à sable et ont un accès limité à l'hôte et aux ressources externes. Tout module de bibliothèque standard Python qui utilise des processus, des threads, le réseau, des signaux ou d'autres formes de communication inter-processus (IPC) n'est pas disponible ou peut ne pas fonctionner comme sur d'autres systèmes de type Unix. Les entrées-sorties de fichiers, le système de fichiers et les fonctions liées aux autorisations Unix sont également restreintes. Emscripten ne permet pas d'effectuer des entrées-sorties bloquantes. D'autres opérations bloquantes comme sleep() bloquent la boucle d'événements du navigateur.

Les propriétés et le comportement de Python sur les plates-formes WebAssembly dépendent de la version du SDK Emscripten ou WASI, des programmes exécutables WASM (navigateur, NodeJS, wasmtime) et de la configuration de compilation de Python. WebAssembly, Emscripten et WASI sont des normes en évolution ; certaines fonctionnalités telles que la gestion du réseau pourraient être prises en charge à l'avenir.

Pour exécuter du Python dans le navigateur, les utilisateurs doivent envisager Pyodide ou PyScript. PyScript est construit sur Pyodide, qui est lui-même construit sur CPython et Emscripten. Pyodide donne accès aux API JavaScript et DOM des navigateurs ainsi qu'à des capacités réseau limitées avec les API XMLHttpRequest et Fetch de JavaScript.

  • Les API liées aux processus ne sont pas disponibles ou échouent toujours avec une erreur. Cela inclut les API qui génèrent de nouveaux processus (fork(), execve()), attendent des processus (waitpid()), envoient des signaux (kill()), ou interagissent d'une autre manière avec les processus. Le module subprocess peut être importé mais ne fonctionne pas.

  • Le module socket est disponible, mais est limité et n'a pas le même comportement que sur les autres plates-formes. Sur Emscripten, les connecteurs réseau sont toujours non bloquants et nécessitent du code JavaScript et du code supplémentaire sur le serveur pour faire mandataire TCP via WebSockets ; voir Emscripten Networking pour plus d'informations. La pré-version 1 de WASI n'autorise que les connecteurs réseau utilisant un descripteur de fichier déjà existant.

  • Certaines fonctions sont des émulations embryonnaires qui ne font rien et renvoient toujours des valeurs codées en dur.

  • Les fonctions liées aux descripteurs de fichiers, aux autorisations de fichiers, aux propriétaires des fichiers et aux liens sont limitées et ne prennent pas en charge certaines opérations. Par exemple, WASI n'autorise pas les liens symboliques avec des noms de fichiers absolus.

iOS

iOS is, in most respects, a POSIX operating system. File I/O, socket handling, and threading all behave as they would on any POSIX operating system. However, there are several major differences between iOS and other POSIX systems.

  • iOS can only use Python in "embedded" mode. There is no Python REPL, and no ability to execute binaries that are part of the normal Python developer experience, such as pip. To add Python code to your iOS app, you must use the Python embedding API to add a Python interpreter to an iOS app created with Xcode. See the iOS usage guide for more details.

  • An iOS app cannot use any form of subprocessing, background processing, or inter-process communication. If an iOS app attempts to create a subprocess, the process creating the subprocess will either lock up, or crash. An iOS app has no visibility of other applications that are running, nor any ability to communicate with other running applications, outside of the iOS-specific APIs that exist for this purpose.

  • iOS apps have limited access to modify system resources (such as the system clock). These resources will often be readable, but attempts to modify those resources will usually fail.

  • iOS apps have a limited concept of console input and output. stdout and stderr exist, and content written to stdout and stderr will be visible in logs when running in Xcode, but this content won't be recorded in the system log. If a user who has installed your app provides their app logs as a diagnostic aid, they will not include any detail written to stdout or stderr.

    iOS apps have no concept of stdin at all. While iOS apps can have a keyboard, this is a software feature, not something that is attached to stdin.

    As a result, Python library that involve console manipulation (such as curses and readline) are not available on iOS.