Avec plus de 30 ans au compteur, Python a eu le temps d'étoffer sa bibliothèque standard. Le langage de développement a même accumulé un vaste et puissant ensemble de modules que les développeurs utilisent pour effectuer de nombreuses tâches courantes. C’est ce que les fans de Python appellent le langage batteries included. Mais au fil des années, certaines sont en bout de course, c'est-à-dire qu'elles n'ont plus été entretenues ou qu'elles ont été utilisées pour des technologies aujourd'hui obsolètes.
Certaines de ces « batteries » en fin de vie ont été dépréciées dans Python 3.12 et seront entièrement supprimées dans l'itération 3.13. Le Python Enhancement Proposals PEP 594 décrit ces dépréciations en détail, mais il peut être difficile de savoir d'un coup d'œil quelles sont les plus importantes. Voici donc un récapitulatif - par ordre décroissant d'importance - des modules de la bibliothèque standard qui seront supprimés dans Python 3.13, en précisant la fonction de chacun et le nouveau module qui l'a remplacé (le cas échéant).
Des modules Python obsolètes mais pas pour tout le monde
Voici les modules les plus importants de la bibliothèque standard caducs. Ce sont ceux que certains utilisent probablement encore dans des applications existantes.
cgi, cgitb
Le standard CGI pour les applications web est depuis longtemps obsolète, mais son support a perduré dans Python pour deux raisons : les nombreux frameworks d'applications web qui supportent encore CGI, et les composants de cgi et cgitb qui sont encore utilisés ailleurs.
Voici les fonctionnalités ou composants cgi que certains utilisent peut-être, même si ils ne s’en rendent pas forcément compte, et les solutions de remplacement, conformément au PEP 594 :
• cgi.parse : à remplacer par urllib.parse.parse_qs
• cgi.parse_header : à remplacer par email.message.EmailMessage
• cgi.parse_multipart : à remplacer par email.message.EmailMessage
De plus, ceux qui utilisent des requêtes POST et PUT pour des charges utiles potentiellement importantes, devront peut-être remplacer cgi.FieldStorage par un module tiers comme multipart. Pour des charges utiles plus petites, les éléments de parsing liés dans email.message peuvent suffire.
Pour les requêtes GET et HEAD, il est possible d’utiliser urllib.parse.parse_qsl.
smtpd, telnetlib, nntpli
Ces modules travaillent avec les protocoles de mail, de news et de connexion réseau. Dans tous les cas, ils sont désormais remplacés par d'autres modules :
• smtpd, pour travailler avec le protocole de mail SMTP, peut être remplacé par aiosmtpd, qui a l'avantage supplémentaire d'être asynchrone.
• nntp, pour travailler avec le protocole de news USENET, peut être remplacé par pynntp.
• telnetlib, pour travailler avec le protocole de connectivité Telnet, peut être remplacé par telnetlib3, qui a l’avantage d’être un client de plus haut niveau et d’être compatible avec asyncio.
msilib
Uniquement disponible sur Microsoft Windows, msilib sert à créer des paquets Microsoft Installer (MSI). distutils, également obsolète, utilisait ce module pour créer des installateurs MSI. Pour justifier sa suppression, les développeurs de Python ont fait valoir que la maintenance de msilib représentait une charge importante (avec relativement peu d'utilisateurs dans le monde réel).
pipes
pipes reconditionne une partie des fonctionnalités de os.popen pour rediriger l'entrée d'une commande vers la sortie d'une autre commande. Il faut désormais utiliser subprocess dans la bibliothèque standard pour gérer ce genre de choses.
D'autres modules Python aussi écartés
Il y a très peu de chance que certains développeurs utilisent encore ces modules dans les programmes qu’ils écrivent ou maintiennent, mais il est préférable de savoir qu'ils ont été dépréciés.
• asynchat/asyncore : Pour les opérations réseau asynchrones. Remplacé par asyncio depuis Python 3.6.
• imghdr/sndhdr : Utilisé pour faire des suppositions sur le contenu des fichiers image ou son en se basant sur leurs en-têtes. Remplacé par des bibliothèques tierces comme Pillow (pour les images) ou python-magic (pour tous les types de fichiers).
• uu : Pour encoder et décoder des données en utilisant le protocole uuencode ; obsolète depuis la création du format MIME. Ceux qui auraient toujours besoin du codec uu pour une raison quelconque peuvent utiliser le module binascii de la stdlib qui le prend en charge.
• mailcap : Utilisé pour lire les fichiers de capacité de mail, comme moyen de travailler avec les pièces jointes des courriers électroniques. Les programmes ont rarement besoin de le faire eux-mêmes.