Installing
Installing
Version 3.7.1
1 Vocabulaire 3
2 Utilisation de base 5
3 Comment puis-je … ? 7
3.1 … Installer pip avec une version de Python antérieures à la 3.4 ? . . . . . . . . . . . . . . . . 7
3.2 … Installer des paquets juste pour l’utilisateur actuel ? . . . . . . . . . . . . . . . . . . . . . . 7
3.3 … Installer des paquets Python scientifiques ? . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.4 … Travailler avec plusieurs versions de Python installés en parallèle ? . . . . . . . . . . . . . . 7
A Glossaire 11
C Histoire et licence 27
C.1 Histoire du logiciel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
C.2 Conditions générales pour accéder à, ou utiliser, Python . . . . . . . . . . . . . . . . . . . . . 28
C.3 Licences et Remerciements pour les logiciels inclus . . . . . . . . . . . . . . . . . . . . . . . . 31
D Copyright 45
Index 47
i
ii
Installing Python Modules, Version 3.7.1
Email distutils-sig@[Link]
En tant que logiciel libre populaire, Python bénéficie d’une communauté active de contributeurs et d’uti-
lisateurs qui rendent à leur tour leurs logiciels disponibles, sous licence libre, pour les autres développeurs
Python.
Cela permet aux utilisateurs de Python de partager et de collaborer efficacement, bénéficiant des solutions
que les autres ont déjà crées pour résoudre les problèmes communs (ou même, parfois, rares !), aussi que de
partager leurs propres solutions à tous.
Ce guide couvre la partie installation. Pour un guide sur la création et le partage de vos propres projets
Python, voyez le guide de distribution.
Note : Pour les entreprises et autres institutions, gardez en tête que certaines organisations ont leur propres
règles sur l’utilisation et la contribution au logiciel libre. Prenez ces règles en compte lorsque vous utilisez
les outils de distribution et d’installation fournis par Python.
Vocabulaire
— pip est l’outil d’installation de prédilection. À partir de Python 3.4, il est inclus par défaut avec
l’installateur de Python.
— Un environnement virtuel est un environnement Python semi-isolé qui autorise les paquets à être
installés pour une application particulière, plutôt que d’être installés au niveau du système.
— venv est l’outil standard pour créer des environnements virtuels, et est intégré à Python depuis la
version 3.3. Depuis Python 3.4, il installe aussi pip dans tous les environnements virtuels créés.
— virtualenv est une alternative tierce à venv (et son prédécesseur). Elle permet la création d’envi-
ronnements virtuels pour les versions de Python antérieures à 3.4, qui ne fournissent pas de venv, ou
ne sont pas capables d’installer automatiquement pip dans les environnements créés.
— L”Index des Paquets Python est un dépôt public des paquets sous licence ouverte disponibles pour
tous les utilisateurs Python.
— l”Autorité des Paquets Python est le groupe de développeurs et d’auteurs de documentation res-
ponsable de la maintenance et l’évolution des outils d’empaquetage standards et des métadonnées
associées, ainsi que des standards sur les formats de fichiers. Ils maintiennent une multitude d’outils,
documentations, et des systèmes de tickets sur GitHub et BitBucket.
— distutils est le premier système de construction et de distribution ajouté à la bibliothèque standard
en 1998. Bien que l’utilisation directe de distutils soit progressivement supprimée, elle reste le
fondement de l’infrastructure actuelle de construction de paquet et de distribution. Au delà de rester
dans la bibliothèque standard, son nom vit aussi sous d’autres formes, tel que la liste de diffusion
utilisée pour coordonner le développement et les standards de la création de paquet.
Obsolète depuis la version 3.6 : pyvenv était l’outil recommandé pour créer des environnements sous Python
3.3 et 3.4, et est obsolète depuis Python 3.6.
Modifié dans la version 3.5 : L’utilisation de venv est maintenant recommandée pour créer vos environnements
virtuels.
Voir aussi :
Guide Utilisateur de l’Empaquetage Python : Créer et utiliser des environnements virtuels
3
Installing Python Modules, Version 3.7.1
4 Chapitre 1. Vocabulaire
CHAPITRE 2
Utilisation de base
Les outils standards de création de paquets sont tous conçus pour être utilisés à partir de la ligne de
commande.
La commande suivante va installer la dernière version d’un module et ses dépendances depuis le Python
Package Index :
Note : Pour les utilisateurs POSIX (y compris Mac OS X et Linux), les exemples de ce guide supposent
l’utilisation d’un environnement virtuel.
Pour les utilisateurs de Windows, les exemples de ce guide supposent que l’option proposant de modifier la
variable d’environnement PATH à été cochée lors de l’installation de Python.
Il est aussi possible de préciser une version minimum exacte directement depuis la ligne de commande.
Utiliser des caractères de comparaison tel que >, < ou d’autres caractères spéciaux qui sont interprétés par
le shell, le nom du paquet et la version doivent être mis entre guillemets :
Normalement, si un module approprié est déjà installé, l’installer à nouveau n’aura aucun effet. La mise à
jour de modules existants doit être demandée explicitement :
Plus d’informations et de ressources concernant pip et ses capacités peuvent être trouvées dans le Python
Packaging User Guide.
La création d’environnements virtuels est réalisée grâce au module venv. Installer des paquets au sein de
l’environnement virtuel courant utilise les commandes montrées précédemment.
Voir aussi :
5
Installing Python Modules, Version 3.7.1
Comment puis-je … ?
Ce sont des réponses rapides ou des liens pour certaines tâches courantes.
7
Installing Python Modules, Version 3.7.1
Les versions appropriées des commandes pip peuvent aussi être disponibles.
Sous Windows, utilisez le lanceur Python py en combinaison avec l’option -m :
9
Installing Python Modules, Version 3.7.1
Glossaire
>>> L’invite de commande utilisée par défaut dans l’interpréteur interactif. On la voit souvent dans des
exemples de code qui peuvent être exécutés interactivement dans l’interpréteur.
... L’invite de commande utilisée par défaut dans l’interpréteur interactif lorsqu’on entre un bloc de
code indenté, dans des délimiteurs fonctionnant par paires (parenthèses, crochets, accolades, triple
guillemets), ou après un décorateur.
2to3 Outil qui essaie de convertir du code pour Python 2.x en code pour Python 3.x en gérant la
plupart des incompatibilités qui peuvent être détectées en analysant la source et parcourant son arbre
syntaxique.
2to3 est disponible dans la bibliothèque standard sous le nom de lib2to3 ; un point d’entrée indé-
pendant est fourni via Tools/scripts/2to3. Cf. 2to3-reference.
classe de base abstraite Les classes de base abstraites (ABC, suivant l’abréviation anglaise Abstract
Base Class) complètent le duck-typing en fournissant un moyen de définir des interfaces pour les cas où
d’autres techniques comme hasattr() seraient inélégantes ou subitement fausses (par exemple avec
les méthodes magiques). Les ABC introduisent des sous-classes virtuelles qui n’héritent pas d’une
classe mais qui sont quand même reconnues par isinstance() ou issubclass() (voir la documen-
tation du module abc). Python contient de nombreuses ABC pour les structures de données (dans le
module [Link]), les nombres (dans le module numbers), les flux (dans le module io) et les
chercheurs-chargeurs du système d’importation (dans le module [Link]). Vous pouvez créer
vos propres ABC avec le module abc.
annotation Étiquette associée à une variable, un attribut de classe, un paramètre de fonction ou une
valeur de retour. Elle est utilisé par convention comme type hint.
Les annotations de variables locales ne sont pas accessibles au moment de l’exécution, mais les anno-
tations de variables globales, d’attributs de classe et de fonctions sont stockées dans l’attribut spécial
__annotations__ des modules, classes et fonctions, respectivement.
Voir variable annotation, function annotation, PEP 484 et PEP 526, qui décrivent cette fonction-
nalité.
argument Valeur, donnée à une fonction ou à une méthode lors de son appel. Il existe deux types
d’arguments :
— argument nommé : un argument précédé d’un identifiant (comme name=) ou un dictionnaire précédé
de **, lors d’un appel de fonction. Par exemple, 3 et 5 sont tous les deux des arguments nommés
dans l’appel à complex() ici :
11
Installing Python Modules, Version 3.7.1
complex(real=3, imag=5)
complex(**{'real': 3, 'imag': 5})
— argument positionnel : Un argument qui n’est pas nommé. Les arguments positionnels apparaissent
au début de la liste des arguments, ou donnés sous forme d’un itérable précédé par *. Par exemple,
3 et 5 sont tous les deux des arguments positionnels dans les appels suivants :
complex(3, 5)
complex(*(3, 5))
Les arguments se retrouvent dans le corps de la fonction appelée parmi les variables locales. Voir
la section calls à propos des règles dictant cette affectation. Syntaxiquement, toute expression est
acceptée comme argument, et c’est la valeur résultante de l’expression qui sera affectée à la variable
locale.
Voir aussi parameter dans le glossaire, la question Différence entre argument et paramètre de la FAQ
et la PEP 362.
gestionnaire de contexte asynchrone (asynchronous context manager en anglais) Objet contrôlant
l’environnement à l’intérieur d’une instruction with en définissant les méthodes __aenter__() et
__aexit__(). A été Introduit par la PEP 492.
générateur asynchrone Fonction qui renvoie un asynchronous generator iterator. Cela ressemble à une
coroutine définie par async def, sauf qu’elle contient une ou des expressions yield produisant ainsi
uns série de valeurs utilisables dans une boucle async for.
Générateur asynchrone fait généralement référence à une fonction, mais peut faire référence à un
itérateur de générateur asynchrone dans certains contextes. Dans les cas où le sens voulu n’est pas
clair, utiliser l’ensemble des termes lève l’ambiguïté.
Un générateur asynchrone peut contenir des expressions await ainsi que des instructions async for,
et async with.
itérateur de générateur asynchrone Objet créé par une fonction asynchronous generator.
C’est un asynchronous iterator qui, lorsqu’il est appelé via la méthode __anext__() renvoie un objet
awaitable qui exécutera le corps de la fonction du générateur asynchrone jusqu’au prochain yield.
Chaque yield suspend temporairement l’exécution, en gardant en mémoire l’endroit et l’état de
l’exécution (ce qui inclut les variables locales et les try en cours). Lorsque l’exécution de l’itérateur
de générateur asynchrone reprend avec un nouvel awaitable renvoyé par __anext__(), elle repart de
là où elle s’était arrêtée. Voir la PEP 492 et la PEP 525.
itérable asynchrone Objet qui peut être utilisé dans une instruction async for. Sa méthode
__aiter__() doit renvoyer un asynchronous iterator. A été introduit par la PEP 492.
itérateur asynchrone Objet qui implémente les méthodes __aiter__() et __anext__(). __anext__
doit renvoyer un objet awaitable. Tant que la méthode __anext__() produit des objets awaitable, le
async for appelant les consomme. L’itérateur asynchrone lève une exception StopAsyncIteration
pour signifier la fin de l’itération. A été introduit par la PEP 492.
attribut Valeur associée à un objet et désignée par son nom via une notation utilisant des points. Par
exemple, si un objet o possède un attribut a, il sera référencé par o.a.
awaitable Objet pouvant être utilisé dans une expression await. Peut être une coroutine ou un objet
avec une méthode __await__(). Voir aussi la PEP 492.
BDFL Dictateur bienveillant à vie (Benevolent Dictator For Life en anglais). Pseudonyme de Guido
van Rossum, le créateur de Python.
fichier binaire Un file object capable de lire et d’écrire des bytes-like objects. Des fichiers binaires sont,
par exemple, les fichiers ouverts en mode binaire ('rb', 'wb', ou 'rb+'), [Link], sys.
[Link], les instances de [Link] ou de [Link].
Consultez fichier texte, un objet fichier capable de lire et d’écrire des objets str.
12 Annexe A. Glossaire
Installing Python Modules, Version 3.7.1
Objet bytes-compatible Un objet gérant les bufferobjects et pouvant exporter un tampon (buffer en
anglais) C-contiguous. Cela inclut les objets bytes, bytearray et [Link], ainsi que beaucoup
d’objets memoryview. Les objets bytes-compatibles peuvent être utilisés pour diverses opérations sur
des données binaires, comme la compression, la sauvegarde dans un fichier binaire ou l’envoi sur le
réseau.
Certaines opérations nécessitent de travailler sur des données binaires variables. La documentation
parle de ceux-ci comme des read-write bytes-like objects. Par exemple, bytearray ou une memoryview
d’un bytearray en font partie. D’autres opérations nécessitent de travailler sur des données bi-
naires stockées dans des objets immuables (« read-only bytes-like objects »), par exemples bytes
ou memoryview d’un objet byte.
code intermédiaire (bytecode) Le code source, en Python, est compilé en un code intermédiaire (byte-
code en anglais), la représentation interne à CPython d’un programme Python. Le code intermédiaire
est mis en cache dans un fichier .pyc de manière à ce qu’une seconde exécution soit plus rapide (la
compilation en code intermédiaire a déjà été faite). On dit que ce langage intermédiaire est exécuté
sur une virtual machine qui exécute des instructions machine pour chaque instruction du code in-
termédiaire. Notez que le code intermédiaire n’a pas vocation à fonctionner sur différentes machines
virtuelles Python ou à être stable entre différentes versions de Python.
La documentation du module dis fournit une liste des instructions du code intermédiaire.
classe Modèle pour créer des objets définis par l’utilisateur. Une définition de classe (class) contient
normalement des définitions de méthodes qui agissent sur les instances de la classe.
variable de classe Une variable définie dans une classe et destinée à être modifiée uniquement au niveau
de la classe (c’est-à-dire, pas dans une instance de la classe).
coercition Conversion implicite d’une instance d’un type vers un autre lors d’une opération dont les
deux opérandes doivent être de même type. Par exemple int(3.15) convertit explicitement le nombre
à virgule flottante en nombre entier 3. Mais dans l’opération 3 + 4.5, les deux opérandes sont d’un
type différent, alors qu’elles doivent avoir le même type pour être additionnées (sinon une exception
TypeError serait levée). Sans coercition, toutes les opérandes, même de types compatibles, devraient
être converties (on parle aussi de cast) explicitement par le développeur, par exemple : float(3) +
4.5 au lieu du simple 3 + 4.5.
nombre complexe Extension des nombres réels familiers, dans laquelle tous les nombres sont exprimés
sous la forme d’une somme d’une partie réelle et d’une partie imaginaire. Les nombres imaginaires
sont les nombres réels multipliés par l’unité imaginaire (la racine carrée de -1, souvent écrite i en
mathématiques ou j par les ingénieurs). Python comprend nativement les nombres complexes, écrits
avec cette dernière notation : la partie imaginaire est écrite avec un suffixe j, exemple, 3+1j. Pour
utiliser les équivalents complexes de math, utilisez cmath. Les nombres complexes sont un concept
assez avancé en mathématiques. Si vous ne connaissez pas ce concept, vous pouvez tranquillement les
ignorer.
gestionnaire de contexte Objet contrôlant l’environnement à l’intérieur d’un bloc with en définissant
les méthodes __enter__() et __exit__(). Consultez la PEP 343.
contigu Un tampon (buffer en anglais) est considéré comme contigu s’il est soit C-contigu soit Fortran-
contigu. Les tampons de dimension zéro sont C-contigus et Fortran-contigus. Pour un tableau à une
dimension, ses éléments doivent être placés en mémoire l’un à côté de l’autre, dans l’ordre croissant de
leur indice, en commençant à zéro. Pour qu’un tableau multidimensionnel soit C-contigu, le dernier
indice doit être celui qui varie le plus rapidement lors du parcours de ses éléments dans l’ordre de leur
adresse mémoire. À l’inverse, dans les tableaux Fortran-contigu, c’est le premier indice qui doit varier
le plus rapidement.
coroutine Les coroutines sont une forme généralisées des fonctions. On entre dans une fonction en un
point et on en sort en un autre point. On peut entrer, sortir et reprendre l’exécution d’une coroutine
en plusieurs points. Elles peuvent être implémentées en utilisant l’instruction async def. Voir aussi
la PEP 492.
fonction coroutine Fonction qui renvoie un objet coroutine. Une fonction coroutine peut être définie
par l’instruction async def et peut contenir les mots clés await, async for ainsi que async with.
13
Installing Python Modules, Version 3.7.1
def f(...):
...
f = staticmethod(f)
@staticmethod
def f(...):
...
Quoique moins fréquemment utilisé, le même concept existe pour les classes. Consultez la documen-
tation définitions de fonctions et définitions de classes pour en savoir plus sur les décorateurs.
descripteur N’importe quel objet définissant les méthodes __get__(), __set__(), ou __delete__().
Lorsque l’attribut d’une classe est un descripteur, son comportement spécial est déclenché lors de la
recherche des attributs. Normalement, lorsque vous écrivez a.b pour obtenir, affecter ou effacer un
attribut, Python recherche l’objet nommé b dans le dictionnaire de la classe de a. Mais si b est un
descripteur, c’est la méthode de ce descripteur qui est alors appelée. Comprendre les descripteurs est
requis pour avoir une compréhension approfondie de Python, ils sont la base de nombre de ses carac-
téristiques notamment les fonctions, méthodes, propriétés, méthodes de classes, méthodes statiques
et les références aux classes parentes.
Pour plus d’informations sur les méthodes des descripteurs, consultez descriptors.
dictionnaire Structure de donnée associant des clés à des valeurs. Les clés peuvent être n’importe
quel objet possédant les méthodes __hash__() et __eq__(). En Perl, les dictionnaires sont appelés
« hash ».
vue de dictionnaire Objets retournés par les méthodes [Link](), [Link]() et dict.
items(). Ils fournissent des vues dynamiques des entrées du dictionnaire, ce qui signifie que lorsque le
dictionnaire change, la vue change. Pour transformer une vue en vraie liste, utilisez list(dictview).
Voir dict-views.
docstring Première chaîne littérale qui apparaît dans l’expression d’une classe, fonction, ou module.
Bien qu’ignorée à l’exécution, elles est reconnue par le compilateur et placée dans l’attribut __doc__
de la classe, de la fonction ou du module. Comme cette chaîne est disponible par introspection, c’est
l’endroit idéal pour documenter l’objet.
duck-typing Style de programmation qui ne prend pas en compte le type d’un objet pour déterminer
s’il respecte une interface, mais qui appelle simplement la méthode ou l’attribut (Si ça a un bec
et que ça cancane, ça doit être un canard, duck signifie canard en anglais). En se concentrant sur
les interfaces plutôt que les types, du code bien construit améliore sa flexibilité en autorisant des
substitutions polymorphiques. Le duck-typing évite de vérifier les types via type() ou isinstance(),
Notez cependant que le duck-typing peut travailler de pair avec les classes de base abstraites. À la
place, le duck-typing utilise plutôt hasattr() ou la programmation EAFP.
EAFP Il est plus simple de demander pardon que demander la permission (Easier to Ask for Forgiveness
than Permission en anglais). Ce style de développement Python fait l’hypothèse que le code est valide
et traite les exceptions si cette hypothèse s’avère fausse. Ce style, propre et efficace, est caractérisé
par la présence de beaucoup de mots clés try et except. Cette technique de programmation contraste
avec le style LBYL utilisé couramment dans les langages tels que C.
14 Annexe A. Glossaire
Installing Python Modules, Version 3.7.1
expression Suite logique de termes et chiffres conformes à la syntaxe Python dont l’évaluation fournit
une valeur. En d’autres termes, une expression est une suite d’éléments tels que des noms, opérateurs,
littéraux, accès d’attributs, méthodes ou fonctions qui aboutissent à une valeur. Contrairement à
beaucoup d’autres langages, les différentes constructions du langage ne sont pas toutes des expressions.
On trouve également des instructions qui ne peuvent pas être utilisées comme expressions, tel que if.
Les affectations sont également des instructions et non des expressions.
module d’extension Module écrit en C ou C++, utilisant l’API C de Python pour interagir avec
Python et le code de l’utilisateur.
f-string Chaîne littérale préfixée de 'f' ou 'F'. Les « f-strings » sont un raccourci pour formatted string
literals. Voir la PEP 498.
objet fichier Objet exposant une ressource via une API orientée fichier (avec les méthodes read() ou
write()). En fonction de la manière dont il a été créé, un objet fichier peut interfacer l’accès à
un fichier sur le disque ou à un autre type de stockage ou de communication (typiquement l’entrée
standard, la sortie standard, un tampon en mémoire, une socket réseau, …). Les objets fichiers sont
aussi appelés file-like-objects ou streams.
Il existe en réalité trois catégories de fichiers objets : les fichiers binaires bruts, les fichiers binaires
avec tampon (buffer) et les fichiers textes. Leurs interfaces sont définies dans le module io. Le moyen
le plus simple et direct de créer un objet fichier est d’utiliser la fonction open().
objet fichier-compatible Synonyme de objet fichier.
chercheur Objet qui essaie de trouver un chargeur pour le module en cours d’importation.
Depuis Python 3.3, il existe deux types de chercheurs : les chercheurs dans les méta-chemins à utiliser
avec sys.meta_path ; les chercheurs d’entrée dans path à utiliser avec sys.path_hooks.
Voir les PEP 302, PEP 420 et PEP 451 pour plus de détails.
division entière Division mathématique arrondissant à l’entier inférieur. L’opérateur de la division
entière est //. Par exemple l’expression 11 // 4 vaut 2, contrairement à 11 / 4 qui vaut 2.75.
Notez que (-11) // 4 vaut -3 car l’arrondi se fait à l’entier inférieur. Voir la PEP 328.
fonction Suite d’instructions qui renvoie une valeur à son appelant. On peut lui passer des arguments
qui pourront être utilisés dans le corps de la fonction. Voir aussi paramètre, méthode et function.
annotation de fonction annotation d’un paramètre de fonction ou valeur de retour
Les annotations de fonctions sont généralement utilisées pour des indications de types : par exemple,
cette fonction devrait prendre deux arguments int et devrait également avoir une valeur de retour
de type int
15
Installing Python Modules, Version 3.7.1
générateur Fonction qui renvoie un itérateur de générateur. Cela ressemble à une fonction normale, en
dehors du fait qu’elle contient une ou des expressions yield produisant une série de valeurs utilisable
dans une boucle for ou récupérées une à une via la fonction next().
Fait généralement référence à une fonction générateur mais peut faire référence à un itérateur de
générateur dans certains contextes. Dans les cas où le sens voulu n’est pas clair, utiliser les termes
complets lève l’ambigüité.
itérateur de générateur Objet créé par une fonction générateur.
Chaque yield suspend temporairement l’exécution, en se rappelant l’endroit et l’état de l’exécution
(y compris les variables locales et les try en cours). Lorsque l’itérateur de générateur reprend, il repart
là où il en était (contrairement à une fonction qui prendrait un nouveau départ à chaque invocation).
expression génératrice Expression qui donne un itérateur. Elle ressemble à une expression normale,
suivie d’une expression for définissant une variable de boucle, un intervalle et une expression if
optionnelle. Toute cette expression génère des valeurs pour la fonction qui l’entoure :
fonction générique Fonction composée de plusieurs fonctions implémentant les mêmes opérations pour
différents types. L’implémentation à utiliser est déterminée lors de l’appel par l’algorithme de répar-
tition.
Voir aussi single dispatch, le décorateur [Link]() et la PEP 443.
GIL Voir global interpreter lock.
verrou global de l’interpréteur (global interpreter lock en anglais) Mécanisme utilisé par l’interpré-
teur CPython pour s’assurer qu’un seul fil d’exécution (thread en anglais) n’exécute le bytecode à la
fois. Cela simplifie l’implémentation de CPython en rendant le modèle objet (incluant des parties
critiques comme la classe native dict) implicitement protégé contre les accès concourants. Verrouiller
l’interpréteur entier rend plus facile l’implémentation de multiples fils d’exécution (multi-thread en
anglais), au détriment malheureusement de beaucoup du parallélisme possible sur les machines ayant
plusieurs processeurs.
Cependant, certains modules d’extension, standards ou non, sont conçus de manière à libérer le GIL
lorsqu’ils effectuent des tâches lourdes tel que la compression ou le hachage. De la même manière, le
GIL est toujours libéré lors des entrées / sorties.
Les tentatives précédentes d’implémenter un interpréteur Python avec une granularité de verrouillage
plus fine ont toutes échouées, à cause de leurs mauvaises performances dans le cas d’un processeur
unique. Il est admis que corriger ce problème de performance induit mènerait à une implémentation
beaucoup plus compliquée et donc plus coûteuse à maintenir.
pyc utilisant le hachage Un fichier de cache de code intermédiaire (bytecode en anglais) qui utilise le
hachage plutôt que l’heure de dernière modification du fichier source correspondant pour déterminer
sa validité. Voir pyc-invalidation.
hachable Un objet est hachable s’il a une empreinte (hash) qui ne change jamais (il doit donc implémen-
ter une méthode __hash__()) et s’il peut être comparé à d’autres objets (avec la méthode __eq__()).
Les objets hachables dont la comparaison par __eq__ est vraie doivent avoir la même empreinte.
La hachabilité permet à un objet d’être utilisé comme clé de dictionnaire ou en tant que membre d’un
ensemble (type set), car ces structures de données utilisent ce hash.
Tous les types immuables natifs de Python sont hachables, mais les conteneurs muables (comme les
listes ou les dictionnaires) ne le sont pas. Toutes les instances de classes définies par les utilisateurs
sont hachables par défaut. Elles sont toutes considérées différentes (sauf avec elles-mêmes) et leur
valeur de hachage est calculée à partir de leur id().
IDLE Environnement de développement intégré pour Python. IDLE est un éditeur basique et un inter-
préteur livré avec la distribution standard de Python.
immuable Objet dont la valeur ne change pas. Les nombres, les chaînes et les n-uplets sont immuables.
Ils ne peuvent être modifiés. Un nouvel objet doit être créé si une valeur différente doit être stockée.
16 Annexe A. Glossaire
Installing Python Modules, Version 3.7.1
Ils jouent un rôle important quand une valeur de hash constante est requise, typiquement en clé de
dictionnaire.
chemin des imports Liste de entrées dans lesquelles le chercheur basé sur les chemins cherche les
modules à importer. Typiquement, lors d’une importation, cette liste vient de [Link] ; pour les
sous-paquets, elle peut aussi venir de l’attribut __path__ du paquet parent.
importer Processus rendant le code Python d’un module disponible dans un autre.
importateur Objet qui trouve et charge un module, en même temps un chercheur et un chargeur.
interactif Python a un interpréteur interactif, ce qui signifie que vous pouvez écrire des expressions et
des instructions à l’invite de l’interpréteur. L’interpréteur Python va les exécuter immédiatement et
vous en présenter le résultat. Démarrez juste python (probablement depuis le menu principal de votre
ordinateur). C’est un moyen puissant pour tester de nouvelles idées ou étudier de nouveaux modules
(souvenez-vous de help(x)).
interprété Python est un langage interprété, en opposition aux langages compilés, bien que la frontière
soit floue en raison de la présence d’un compilateur en code intermédiaire. Cela signifie que les fichiers
sources peuvent être exécutés directement, sans avoir à compiler un fichier exécutable intermédiaire.
Les langages interprétés ont généralement un cycle de développement / débogage plus court que les
langages compilés. Cependant, ils s’exécutent généralement plus lentement. Voir aussi interactif .
arrêt de l’interpréteur Lorsqu’on lui demande de s’arrêter, l’interpréteur Python entre dans une phase
spéciale où il libère graduellement les ressources allouées, comme les modules ou quelques structures
de données internes. Il fait aussi quelques appels au ramasse-miettes. Cela peut déclencher l’exécution
de code dans des destructeurs ou des fonctions de rappels de weakrefs. Le code exécuté lors de l’arrêt
peut rencontrer quelques exception puisque les ressources auxquelles il fait appel pourraient ne plus
fonctionner, (typiquement les modules des bibliothèques ou le mécanisme de warning).
La principale raison d’arrêt de l’interpréteur est que le module __main__ ou le script en cours d’exé-
cution a terminé de s’exécuter.
itérable Objet capable de renvoyer ses éléments un à un. Par exemple, tous les types séquence (comme
list, str, et tuple), quelques autres types comme dict, objets fichiers ou tout objet d’une classe
ayant une méthode __iter__() ou __getitem__() qui implémente la sémantique d’une Sequence.
Les itérables peuvent être utilisés dans des boucles for et à beaucoup d’autres endroits où une
séquence est requise (zip(), map(), …). Lorsqu’un itérable est passé comme argument à la fonction
native iter(), celle-ci fournit en retour un itérateur sur cet itérable. Cet itérateur n’est valable que
pour une seule passe sur le jeu de valeurs. Lors de l’utilisation d’itérables, il n’est habituellement pas
nécessaire d’appeler iter() ou de s’occuper soi-même des objets itérateurs. L’instruction for le fait
automatiquement pour vous, créant une variable temporaire anonyme pour garder l’itérateur durant
la boucle. Voir aussi itérateur, séquence et générateur.
itérateur Objet représentant un flux de donnée. Des appels successifs à la méthode __next__() de
l’itérateur (ou le passer à la fonction native next()) donne successivement les objets du flux. Lorsque
plus aucune donnée n’est disponible, une exception StopIteration est levée. À ce point, l’itéra-
teur est épuisé et tous les appels suivants à sa méthode __next__() lèveront encore une exception
StopIteration. Les itérateurs doivent avoir une méthode __iter__() qui renvoie l’objet itérateur
lui même, de façon à ce que chaque itérateur soit aussi itérable et puisse être utilisé dans la plupart
des endroits où d’autres itérables sont attendus. Une exception notable est un code qui tente plusieurs
itérations complètes. Un objet conteneur, (tel que list) produit un nouvel itérateur neuf à chaque fois
qu’il est passé à la fonction iter() ou s’il est utilisé dans une boucle for. Faire ceci sur un itérateur
donnerait simplement le même objet itérateur épuisé utilisé dans son itération précédente, le faisant
ressembler à un conteneur vide.
Vous trouverez davantage d’informations dans typeiter.
fonction clé Une fonction clé est un objet appelable qui renvoie une valeur à fins de tri ou de classement.
Par exemple, la fonction [Link]() est utilisée pour générer une clé de classement prenant
en compte les conventions de classement spécifiques aux paramètres régionaux courants.
17
Installing Python Modules, Version 3.7.1
Plusieurs outils dans Python acceptent des fonctions clés pour déterminer comment les éléments sont
classés ou groupés. On peut citer les fonctions min(), max(), sorted(), [Link](), [Link](),
[Link](), [Link]() et [Link]().
Il existe plusieurs moyens de créer une fonction clé. Par exemple, la méthode [Link]() peut
servir de fonction clé pour effectuer des recherches insensibles à la casse. Aussi, il est possible de créer
des fonctions clés avec des expressions lambda, comme lambda r: (r[0], r[2]). Vous noterez que
le module operator propose des constructeurs de fonctions clefs : attrgetter(), itemgetter() et
methodcaller(). Voir Comment Trier pour des exemples de création et d’utilisation de fonctions
clefs.
argument nommé Voir argument.
lambda Fonction anonyme sous la forme d’une expression et ne contenant qu’une seule expression,
exécutée lorsque la fonction est appelée. La syntaxe pour créer des fonctions lambda est : lambda
[parameters]: expression
LBYL Regarde devant avant de tomber, (Look before you leap en anglais). Ce style de programmation
consiste à vérifier des conditions avant d’effectuer des appels ou des accès. Ce style contraste avec le
style EAFP et se caractérise par la présence de beaucoup d’instructions if.
Dans un environnement avec plusieurs fils d’exécution (multi-threaded en anglais), le style LBYL peut
engendrer un séquencement critique (race condition en anglais) entre le « regarde » et le « tomber ».
Par exemple, le code if key in mapping: return mapping[key] peut échouer si un autre fil d’exé-
cution supprime la clé key du mapping après le test mais avant l’accès. Ce problème peut être résolu
avec des verrous (locks) ou avec l’approche EAFP.
list Un type natif de sequence dans Python. En dépit de son nom, une list ressemble plus à un tableau
(array dans la plupart des langages) qu’à une liste chaînée puisque les accès se font en O(1).
liste en compréhension (ou liste en intension) Écriture concise pour manipuler tout ou partie
des éléments d’une séquence et renvoyer une liste contenant les résultats. result = ['{:#04x}'.
format(x) for x in range(256) if x % 2 == 0] génère la liste composée des nombres pairs de 0
à 255 écrits sous formes de chaînes de caractères et en hexadécimal (0x…). La clause if est optionnelle.
Si elle est omise, tous les éléments du range(256) seront utilisés.
chargeur Objet qui charge un module. Il doit définir une méthode nommée load_module(). Un chargeur
est typiquement donné par un chercheur. Voir la PEP 302 pour plus de détails et [Link].
Loader pour sa classe de base abstraite.
Tableau de correspondances (mapping en anglais) Conteneur permettant de rechercher des élé-
ments à partir de clés et implémentant les méthodes spécifiées dans les classes de base abs-
traites [Link] ou [Link]. Les classes suivantes sont
des exemples de tableaux de correspondances : dict, [Link], collections.
OrderedDict et [Link].
chercheur dans les méta-chemins Un chercheur renvoyé par une recherche dans sys.meta_path. Les
chercheurs dans les méta-chemins ressemblent, mais sont différents des chercheurs d’entrée dans path.
Voir [Link] pour les méthodes que les chercheurs dans les méta-chemins
doivent implémenter.
métaclasse Classe d’une classe. Les définitions de classe créent un nom pour la classe, un dictionnaire
de classe et une liste de classes parentes. La métaclasse a pour rôle de réunir ces trois paramètres pour
construire la classe. La plupart des langages orientés objet fournissent une implémentation par défaut.
La particularité de Python est la possibilité de créer des métaclasses personnalisées. La plupart des
utilisateurs n’aura jamais besoin de cet outil, mais lorsque le besoin survient, les métaclasses offrent
des solutions élégantes et puissantes. Elles sont utilisées pour journaliser les accès à des propriétés,
rendre sûr les environnements multi-threads, suivre la création d’objets, implémenter des singletons
et bien d’autres tâches.
Plus d’informations sont disponibles dans : metaclasses.
méthode Fonction définie à l’intérieur d’une classe. Lorsqu’elle est appelée comme un attribut d’une
instance de cette classe, la méthode reçoit l’instance en premier argument (qui, par convention, est
habituellement nommé self). Voir function et nested scope.
18 Annexe A. Glossaire
Installing Python Modules, Version 3.7.1
ordre de résolution des méthodes L’ordre de résolution des méthodes (MRO pour Method Resolu-
tion Order en anglais) est, lors de la recherche d’un attribut dans les classes parentes, la façon dont
l’interpréteur Python classe ces classes parentes. Voir The Python 2.3 Method Resolution Order pour
plus de détails sur l’algorithme utilisé par l’interpréteur Python depuis la version 2.3.
module Objet utilisé pour organiser une portion unitaire de code en Python. Les modules ont un espace
de noms et peuvent contenir n’importe quels objets Python. Charger des modules est appelé importer.
Voir aussi paquet.
spécificateur de module Espace de noms contenant les informations, relatives à l’importation, utilisées
pour charger un module. C’est une instance de la classe [Link].
MRO Voir ordre de résolution des méthodes.
muable Un objet muable peut changer de valeur tout en gardant le même id(). Voir aussi immuable.
n-uplet nommé (named-tuple en anglais) Classe qui, comme un n-uplet (tuple en anglais), a ses éléments
accessibles par leur indice. Et en plus, les éléments sont accessibles par leur nom. Par exemple, time.
localtime() donne un objet ressemblant à un n-uplet, dont year est accessible par son indice : t[0]
ou par son nom : t.tm_year).
Un n-uplet nommé peut être un type natif tel que time.struct_time ou il peut être construit comme
une simple classe. Un n-uplet nommé complet peut aussi être créé via la fonction collections.
namedtuple(). Cette dernière approche fournit automatiquement des fonctionnalités supplémentaires,
tel qu’une représentation lisible comme Employee(name='jones', title='programmer').
espace de noms L’endroit où une variable est stockée. Les espaces de noms sont implémentés avec des
dictionnaires. Il existe des espaces de noms globaux, natifs ou imbriqués dans les objets (dans les
méthodes). Les espaces de noms favorisent la modularité car ils permettent d’éviter les conflits de
noms. Par exemple, les fonctions [Link] et [Link]() sont différenciées par leurs espaces
de nom. Les espaces de noms aident aussi à la lisibilité et la maintenabilité en rendant clair quel
module implémente une fonction. Par exemple, écrire [Link]() ou [Link]() affiche
clairement que ces fonctions sont implémentées respectivement dans les modules random et itertools.
paquet-espace de noms Un paquet tel que défini dans la PEP 421 qui ne sert qu’à contenir des
sous-paquets. Les paquets-espace de noms peuvent n’avoir aucune représentation physique et, plus
spécifiquement, ne sont pas comme un paquet classique puisqu’ils n’ont pas de fichier __init__.py.
Voir aussi module.
portée imbriquée Possibilité de faire référence à une variable déclarée dans une définition englobante.
Typiquement, une fonction définie à l’intérieur d’une autre fonction a accès aux variables de cette
dernière. Souvenez-vous cependant que cela ne fonctionne que pour accéder à des variables, pas pour
les assigner. Les variables locales sont lues et assignées dans l’espace de noms le plus proche. Tout
comme les variables globales qui sont stockés dans l’espace de noms global, le mot clef nonlocal
permet d’écrire dans l’espace de noms dans lequel est déclarée la variable.
nouvelle classe Ancien nom pour l’implémentation actuelle des classes, pour tous les objets. Dans les
anciennes versions de Python, seules les nouvelles classes pouvaient utiliser les nouvelles fonctionnalités
telles que __slots__, les descripteurs, les propriétés, __getattribute__(), les méthodes de classe et
les méthodes statiques.
objet N’importe quelle donnée comportant des états (sous forme d’attributs ou d’une valeur) et un com-
portement (des méthodes). C’est aussi (object) l’ancêtre commun à absolument toutes les nouvelles
classes.
paquet module Python qui peut contenir des sous-modules ou des sous-paquets. Techniquement, un
paquet est un module qui possède un attribut __path__.
Voir aussi paquet classique et namespace package.
paramètre Entité nommée dans la définition d’une fonction (ou méthode), décrivant un argument (ou
dans certains cas des arguments) que la fonction accepte. Il existe cinq sortes de paramètres :
— positional-or-keyword : l’argument peut être passé soit par sa position, soit en tant que argument
nommé. C’est le type de paramètre par défaut. Par exemple, foo et bar dans l’exemple suivant :
19
Installing Python Modules, Version 3.7.1
20 Annexe A. Glossaire
Installing Python Modules, Version 3.7.1
API provisoire Une API provisoire est une API qui n’offre aucune garantie de rétrocompatibilité (la
bibliothèque standard exige la rétrocompatibilité). Bien que des changements majeurs d’une telle
interface ne soient pas attendus, tant qu’elle est étiquetée provisoire, des changement cassant la
rétrocompatibilité (y compris sa suppression complète) peuvent survenir si les développeurs principaux
le jugent nécessaire. Ces modifications ne surviendront que si de sérieux problèmes sont découverts et
qu’ils n’avaient pas été identifiés avant l’ajout de l’API.
Même pour les API provisoires, les changement cassant la rétrocompatibilité sont considérées comme
des « solutions de dernier recours ». Tout ce qui est possible sera fait pour tenter de résoudre les
problème en conservant la rétrocompatibilité.
Ce processus permet à la bibliothèque standard de continuer à évoluer avec le temps, sans se bloquer
longtemps sur des erreurs d’architecture. Voir la PEP 411 pour plus de détails.
paquet provisoire Voir provisional API .
Python 3000 Surnom donné à la série des Python 3.x (très vieux surnom donné à l’époque où Python
3 représentait un futur lointain). Aussi abrégé Py3k.
Pythonique Idée, ou bout de code, qui colle aux idiomes de Python plutôt qu’aux concepts communs
rencontrés dans d’autres langages. Par exemple, il est idiomatique en Python de parcourir les éléments
d’un itérable en utilisant for. Beaucoup d’autres langages n’ont pas cette possibilité, donc les gens
qui ne sont pas habitués à Python utilisent parfois un compteur numérique à la place :
for i in range(len(food)):
print(food[i])
nom qualifié Nom, comprenant des points, montrant le « chemin » de l’espace de noms global d’un
module vers une classe, fonction ou méthode définie dans ce module, tel que défini dans la PEP 3155.
Pour les fonctions et classes de premier niveau, le nom qualifié est le même que le nom de l’objet :
>>> class C:
... class D:
... def meth(self):
... pass
...
>>> C.__qualname__
'C'
>>> C.D.__qualname__
'C.D'
>>> [Link].__qualname__
'[Link]'
Lorsqu’il est utilisé pour nommer des modules, le nom qualifié complet (fully qualified name - FQN
en anglais) signifie le chemin complet (séparé par des points) vers le module, incluant tous les paquets
parents. Par exemple : [Link] :
21
Installing Python Modules, Version 3.7.1
paquet classique paquet traditionnel, tel qu’un dossier contenant un fichier __init__.py.
Voir aussi paquet-espace de noms.
__slots__ Déclaration dans une classe qui économise de la mémoire en pré-allouant de l’espace pour les
attributs des instances et qui élimine le dictionnaire (des attributs) des instances. Bien que populaire,
cette technique est difficile à maîtriser et devrait être réservée à de rares cas où un grand nombre
d’instances dans une application devient un sujet critique pour la mémoire.
séquence itérable qui offre un accès efficace à ses éléments par un indice sous forme de nombre entier
via la méthode spéciale __getitem__() et qui définit une méthode __len__() donnant sa taille. Voici
quelques séquences natives : list, str, tuple, et bytes. Notez que dict possède aussi une méthode
__getitem__() et une méthode __len__(), mais il est considéré comme un mapping plutôt qu’une
séquence, car ses accès se font par une clé arbitraire immuable plutôt qu’un nombre entier.
La classe abstraite de base [Link] définit une interface plus riche qui va au-
delà des simples __getitem__() et __len__(), en ajoutant count(), index(), __contains__() et
__reversed__(). Les types qui implémentent cette interface étendue peuvent s’enregistrer explicite-
ment en utilisant register().
distribution simple Forme de distribution, comme les fonction génériques, où l’implémentation est
choisie en fonction du type d’un seul argument.
tranche (slice en anglais), un objet contenant habituellement une portion de séquence. Une tranche est
créée en utilisant la notation [] avec des : entre les nombres lorsque plusieurs sont fournis, comme
dans variable_name[1:3:5]. Cette notation utilise des objets slice en interne.
méthode spéciale (special method en anglais) Méthode appelée implicitement par Python pour exécuter
une opération sur un type, comme une addition. De telles méthodes ont des noms commençant et
terminant par des doubles tirets bas. Les méthodes spéciales sont documentées dans specialnames.
instruction Une instruction (statement en anglais) est un composant d’un « bloc » de code. Une ins-
truction est soit une expression, soit une ou plusieurs constructions basées sur un mot-clé, comme if,
while ou for.
struct sequence Un n-uplet (tuple en anglais) dont les éléments sont nommés. Les struct sequences
exposent une interface similaire au n-uplet nommé car on peut accéder à leurs éléments par un nom
d’attribut ou par un indice. Cependant, elles n’ont aucune des méthodes du n-uplet nommé : ni
[Link]._make() ou _asdict(). Par exemple sys.float_info ou les valeurs
données par [Link]() sont des struct sequence.
encodage de texte Codec (codeur-décodeur) qui convertit des chaînes de caractères Unicode en octets
(classe bytes).
fichier texte file object capable de lire et d’écrire des objets str. Souvent, un fichier texte (text file
en anglais) accède en fait à un flux de donnée en octets et gère l”text encoding automatiquement.
Des exemples de fichiers textes sont les fichiers ouverts en mode texte ('r' ou 'w'), [Link],
[Link] et les instances de [Link].
Voir aussi binary file pour un objet fichier capable de lire et d’écrire bytes-like objects.
chaîne entre triple guillemets Chaîne qui est délimitée par trois guillemets simples (') ou trois guille-
mets doubles ("). Bien qu’elle ne fournisse aucune fonctionnalité qui ne soit pas disponible avec une
chaîne entre guillemets, elle est utile pour de nombreuses raisons. Elle vous autorise à insérer des
guillemets simples et doubles dans une chaîne sans avoir à les protéger et elle peut s’étendre sur
plusieurs lignes sans avoir à terminer chaque ligne par un \. Elle est ainsi particulièrement utile pour
les chaînes de documentation (docstrings).
type Le type d’un objet Python détermine quel genre d’objet c’est. Tous les objets ont un type. Le type
d’un objet peut être obtenu via son attribut __class__ ou via type(obj).
alias de type Synonyme d’un type, créé en affectant le type à un identifiant.
Les alias de types sont utiles pour simplifier les indications de types. Par exemple :
22 Annexe A. Glossaire
Installing Python Modules, Version 3.7.1
def remove_gray_shades(
colors: List[Tuple[int, int, int]]) -> List[Tuple[int, int, int]]:
pass
class C:
field: 'annotation'
Les annotations de variables sont généralement utilisées pour des indications de types : par exemple,
cette variable devrait prendre des valeurs de type int
count: int = 0
23
Installing Python Modules, Version 3.7.1
24 Annexe A. Glossaire
ANNEXE B
Ces documents sont générés à partir de sources en reStructuredText par Sphinx, un analyseur de documents
spécialement conçu pour la documentation Python.
Le développement de la documentation et de ses outils est entièrement basé sur le volontariat, tout comme
Python. Si vous voulez contribuer, allez voir la page reporting-bugs qui contient des informations pour vous
y aider. Les nouveaux volontaires sont toujours les bienvenus !
Merci beaucoup à :
— Fred L. Drake, Jr., créateur des outils originaux de la documentation Python et rédacteur de la plupart
de son contenu ;
— le projet Docutils pour avoir créé reStructuredText et la suite d’outils Docutils ;
— Fredrik Lundh pour son projet Alternative Python Reference, dont Sphinx a pris beaucoup de bonnes
idées.
25
Installing Python Modules, Version 3.7.1
Histoire et licence
27
Installing Python Modules, Version 3.7.1
Note : Compatible GPL ne signifie pas que nous distribuons Python sous licence GPL. Toutes les licences
Python, excepté la licence GPL, vous permettent la distribution d’une version modifiée sans rendre open
source ces changements. La licence « compatible GPL » rend possible la diffusion de Python avec un autre
logiciel qui est lui, diffusé sous la licence GPL ; les licences « non compatible GPL » ne le peuvent pas.
Merci aux nombreux bénévoles qui ont travaillé sous la direction de Guido pour rendre ces versions possibles.
2. Subject to the terms and conditions of this License Agreement, PSF hereby
grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
analyze, test, perform and/or display publicly, prepare derivative works,
distribute, and otherwise use Python 3.7.1 alone or in any derivative
version, provided, however, that PSF's License Agreement and PSF's notice of
copyright, i.e., "Copyright © 2001-2018 Python Software Foundation; All Rights
Reserved" are retained in Python 3.7.1 alone or in any derivative version
prepared by Licensee.
5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 3.7.1
FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF
MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 3.7.1, OR ANY DERIVATIVE
THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
2. Subject to the terms and conditions of this BeOpen Python License Agreement,
BeOpen hereby grants Licensee a non-exclusive, royalty-free, world-wide license
to reproduce, analyze, test, perform and/or display publicly, prepare derivative
works, distribute, and otherwise use the Software alone or in any derivative
version, provided, however, that the BeOpen Python License is retained in the
Software, alone or in any derivative version prepared by Licensee.
4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR
ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF USING,
MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF
ADVISED OF THE POSSIBILITY THEREOF.
2. Subject to the terms and conditions of this License Agreement, CNRI hereby
grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
(suite sur la page suivante)
4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" basis. CNRI
MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE,
BUT NOT LIMITATION, CNRI MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY
OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF
PYTHON 1.6.1 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 1.6.1 FOR
ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF
MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, OR ANY DERIVATIVE
THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted, provided that
the above copyright notice appear in all copies and that both that copyright
notice and this permission notice appear in supporting documentation, and that
the name of Stichting Mathematisch Centrum or CWI not be used in advertising or
publicity pertaining to distribution of the software without specific, written
prior permission.
THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
Permission to use, copy, modify, and distribute this Python software and
its associated documentation for any purpose without fee is hereby
granted, provided that the above copyright notice appears in all copies,
and that both that copyright notice and this permission notice appear in
supporting documentation, and that the name of neither Automatrix,
Bioreason or Mojam Media be used in advertising or publicity pertaining to
distribution of the software without specific, written prior permission.
C.3.7 Appel de procédures distantes en XML (RPC, pour Remote Procedure Call)
Le module [Link] contient la note suivante :
The XML-RPC client interface is
SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT-
ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR
BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
OF THIS SOFTWARE.
C.3.8 test_epoll
Le module test_epoll contient la note suivante :
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
C.3.10 SipHash24
Le fichier Python/pyhash.c contiens une implémentation par Marek Majkowski de l’algorithme SipHash24
de Dan Bernstein. Il contient la note suivante :
<MIT License>
Copyright (c) 2013 Marek Majkowski <marek@[Link]>
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
(suite sur la page suivante)
Original location:
[Link]
C.3.12 OpenSSL
Les modules hashlib, posix, ssl, et crypt utilisent la bibliothèque OpenSSL pour améliorer les perfor-
mances, si elle est disponible via le système d’exploitation. Aussi les outils d’installation sur Windows et
Mac OS X peuvent inclure une copie des bibliothèques d’OpenSSL, donc on colle une copie de la licence
d’OpenSSL ici :
LICENSE ISSUES
==============
The OpenSSL toolkit stays under a dual license, i.e. both the conditions of
the OpenSSL License and the original SSLeay license apply to the toolkit.
See below for the actual license texts. Actually both licenses are BSD-style
Open Source licenses. In case of any license issues related to OpenSSL
please contact openssl-core@[Link].
OpenSSL License
(suite sur la page suivante)
/* ====================================================================
* Copyright (c) 1998-2008 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. ([Link]
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* openssl-core@[Link].
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit ([Link]
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@[Link]). This product includes software written by Tim
(suite sur la page suivante)
C.3.13 expat
Le module pyexpat est compilé avec une copie des sources d”expat, sauf si la compilation est configurée avec
--with-system-expat :
Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
and Clark Cooper
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
C.3.14 libffi
Le module _ctypes est compilé en utilisant une copie des sources de la libffi, sauf si la compilation est
configurée avec --with-system-libffi :
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
C.3.15 zlib
Le module zlib est compilé en utilisant une copie du code source de zlib si la version de zlib trouvée sur le
système est trop vieille pour être utilisée :
Copyright (C) 1995-2011 Jean-loup Gailly and Mark Adler
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
C.3.16 cfuhash
L’implémentation des dictionnaires, utilisée par le module tracemalloc est basée sur le projet cfuhash :
Copyright (c) 2005 Don Owens
All rights reserved.
C.3.17 libmpdec
Le module _decimal est construit en incluant une copie de la bibliothèque libmpdec, sauf si elle est compilée
avec --with-system-libmpdec :
Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
(suite sur la page suivante)
Copyright
Voir Histoire et licence pour des informations complètes concernant la licence et les permissions.
45
Installing Python Modules, Version 3.7.1
46 Annexe D. Copyright
Index
Non-alphabetical D
..., 11 décorateur, 14
2to3, 11 descripteur, 14
>>>, 11 dictionnaire, 14
__future__, 15 distribution simple, 22
__slots__, 22 division entière, 15
docstring, 14
A duck-typing, 14
alias de type, 22
annotation, 11 E
annotation de fonction, 15 EAFP, 14
annotation de variable, 23 encodage de texte, 22
API provisoire, 21 entrée de chemin, 20
argument, 11 environnement virtuel, 23
argument nommé, 18 espace de noms, 19
argument positionnel, 20 expression, 15
arrêt de l’interpréteur, 17 expression génératrice, 16
attribut, 12
awaitable, 12 F
fichier binaire, 12
B fichier texte, 22
BDFL, 12 fonction, 15
fonction clé, 17
C fonction coroutine, 13
C-contiguous, 13 fonction générique, 16
chaîne entre triple guillemets, 22 Fortran contiguous, 13
chargeur, 18 f-string, 15
chemin des imports, 17
chercheur, 15 G
chercheur basé sur les chemins, 20 générateur, 16
chercheur dans les méta-chemins, 18 générateur asynchrone, 12
chercheur de chemins, 20 generator, 15
classe, 13 generator expression, 16
classe de base abstraite, 11 gestionnaire de contexte, 13
code intermédiaire (bytecode), 13 gestionnaire de contexte asynchrone, 12
coercition, 13 GIL, 16
contigu, 13
coroutine, 13 H
CPython, 14 hachable, 16
47
Installing Python Modules, Version 3.7.1
I paramètre, 19
IDLE, 16 PEP, 20
immuable, 16 point d’entrée pour la recherche dans path, 20
importateur, 17 portée imbriquée, 19
importer, 17 portion, 20
indication de type, 23 pyc utilisant le hachage, 16
instruction, 22 Python 3000, 21
interactif, 17 Python Enhancement Proposals
interprété, 17 PEP 1, 20
itérable, 17 PEP 278, 23
itérable asynchrone, 12 PEP 302, 15, 18
itérateur, 17 PEP 328, 15
itérateur asynchrone, 12 PEP 343, 13
itérateur de générateur, 16 PEP 362, 12, 20
itérateur de générateur asynchrone, 12 PEP 411, 21
PEP 420, 15, 20
L PEP 421, 19
lambda, 18 PEP 443, 16
LBYL, 18 PEP 451, 15
Le zen de Python, 23 PEP 484, 11, 23
list, 18 PEP 492, 1214
liste en compréhension (ou liste en intension), 18 PEP 498, 15
PEP 519, 20
M PEP 525, 12
PEP 526, 11, 23
machine virtuelle, 23 PEP 3116, 23
métaclasse, 18 PEP 3155, 21
méthode, 18 Pythonique, 21
méthode spéciale, 22
module, 19 R
module d’extension, 15
ramasse-miettes, 15
MRO, 19
retours à la ligne universels, 23
muable, 19
N S
nom qualifié, 21 séquence, 22
nombre complexe, 13 spécificateur de module, 19
nombre de références, 21 struct sequence, 22
nouvelle classe, 19
n-uplet nommé, 19
T
Tableau de correspondances, 18
O tranche, 22
type, 22
objet, 19
Objet bytes-compatible, 13
objet fichier, 15
V
objet fichier-compatible, 15 variable de classe, 13
objet simili-chemin, 20 verrou global de l’interpréteur, 16
ordre de résolution des méthodes, 19 vue de dictionnaire, 14
P
paquet, 19
paquet classique, 22
paquet provisoire, 21
paquet-espace de noms, 19
48 Index