Python 2 est mort ! Vive Python !

Apple avait annoncé la suppression du binaire Python 2. C'est fait. Découvrez les prochaines étapes.

Février 11 2022 Par

Armin Briegel

MacBook

Python est-il installé sur Mac ?

Oui. Apple avait d'ailleurs annoncé la suppression du binaire Python 2 préinstallé, intégré au système Mac depuis le Mac OS X Jaguar 10.2, dans une « future version de macOS » depuis la publication des remarques sur la sortie de la version bêta initiales de macOS Catalina. Apple a également ajouté que les moteurs d'exécution de scripts, tels que Python, Ruby et Perl ne seraient plus intégrés dans les versions ultérieures de macOS. Nous conseillons aux développeurs d'inclure tous les moteurs d'exécution dont leurs solutions dépendent dans leurs apps.

Pourquoi ce changement est-il nécessaire ?

Depuis janvier 2020, l'organisation qui gère le développement et les versions de Python lance officiellement la version 2.7 de Python en faveur de versions plus récentes et plus sécurisées de Python 3 et les versions ultérieures. Cela signifie qu'à partir de maintenant, les mises à jour, les correctifs d'erreurs et les mises à jour de sécurité prendront uniquement en charge Python 3.x, puisque Python 2 n'existe plus.

Bien que Python 3 soit le successeur officiel, la mise à jour du code en Python de la version 2.x à 3.x n'est pas une tâche insignifiante. Il ne suffit pas de simplement remplacer le moteur d'exécution par une nouvelle version et de s'attendre à ce que tout fonctionne tout seul. Il en va de même pour les diverses versions mineures de Python 3, prises en charge en parallèle, comme le montre le Python 3.7-3.10 actuellement utilisé alors que Pyhton 3.11 est une version bêta.

En plus de l'avertissement écrit adressé aux développeurs dans les remarques de sortie de macOS, Apple a ajouté des messages d'information lorsque les utilisateurs tentent d'utiliser des moteurs d'exécution Python 2 dépréciés dans macOS Monterey. Il se peut que l'utilisateur final ait du mal à comprendre ces avertissements, car ils sont essentiellement destinés aux développeurs et aux administrateurs afin qu'ils puissent suivre les applications et les scripts qui nécessitent une mise à jour. Dans les remarques sur la sortie de la version bêta de macOS Monterey 12.3, Apple stipule également que le répertoire /usr/bin/python sera intégralement supprimé.

Malgré tous les avertissements formulés au fil des années, la suppression d'une fonctionnalité à cette échelle dans une mise à jour pourrait générer des problèmes pour les utilisateurs, les administrateurs et les développeurs. Même si cette suppression intervient pour renforcer la sécurité en supprimant les moteurs d'exécution de programmation obsolète de macOS. Même si Apple a un historique bien documenté des fonctionnalités ajoutées pour l'utilisateur final et les administrateurs dans ses « Mises à jour de printemps », les suppressions de fonctionnalité dans une mise à jour mineure sont hors normes et, par conséquent, inattendues.

Pour compliquer les choses, la période bêta d'une mise à jour mineure est bien plus courte (6 à 8 semaines) que la période bêta du lancement des principaux systèmes (4 à 5 mois). À cause de cette difficulté supplémentaire, les développeurs et les administrateurs disposent de beaucoup moins de temps pour mettre à jour le code, tester les mises à jour et les déployer sur les appareils des utilisateurs.

Par exemple, les boîtes de dialogue d'avertissement intégrées dans macOS Monterey ont forcé les administrateurs à mettre à jour leurs scripts et leurs outils pour être compatibles avec la dépréciation de Python 2.7. Néanmoins, des demandes de retour à l'ancien moteur d'exécution Python 2.7 peuvent se manifester à des endroits inattendus.

Scripts de Jamf

Tout d'abord, les scripts de règle et les attributs d'extension dans Jamf Pro peuvent être entièrement écrits sous Python 2.7. Vous pouvez identifier ces scripts avec un # ! /usr/bin/python ou # ! Shebang en Pyhton /usr/bin/env dans la première ligne de script. Les scripts en Shell peuvent également demander à Python d'utiliser une certaine fonctionnalité du système. Le script de Laurent Pertois utilise l'API Jamf pour rechercher dans tous les scripts et les attributs d'extension les utilisations de la commande Python. Cela vous permettra d'avoir une liste des emplacements à vérifier pour voir si Python y est utilisé.

Communément, Python est notamment utilisé pour déterminer l'utilisateur actuellement connecté. Pour cela, il existe un remplacement en shell-only, ainsi que Javascript pour Automation (JXA) qui est également une solution pratique pour les formules les plus courantes en Python. Vous pouvez également trouver des formules de remplacement utiles pour de nombreuses utilisations administratives sous Python sur Jamf Nation ou dans le canal Slack de MacAdmins.

Python dans les scripts d'installation

Souvent, dans les paquets d'installation, vous trouverez également des scripts ou des demandes en Python dans les scripts de pré- et post-installation. Étant donné que les paquets sont généralement fabriqués par le fournisseur de logiciels, il se peut que vous n'ayez aucune connaissance de ces scripts en Python. J'ai écrit un script nommé pkgcheck qui effectue une recherche récursive dans un dossier des paquets d'installation et répertorie tous les scripts qui utilisent un Shebang en Python ou l'outil Python dans leur code. Ce script vous aidera incontestablement à identifier les paquets d'installation tiers qui pourraient occasionner des problèmes par la suite.

Lorsque vous identifiez un paquet avec un script qui utilise Python, vous pourrez plus facilement informer un fournisseur que son programme d'installation ne sera pas compatible avec macOS 12.3 et les versions ultérieures. Si, malgré tous vos efforts, le fournisseur de logiciels est dans l'incapacité de fournir une mise à jour à temps, vous pouvez tirer parti des Groupes intelligents de Jamf Pro pour empêcher l'installation de ce paquet sur vos Macs mis à jour à la version macOS 12.3 et ultérieures. Vous pourrez ainsi contourner tous les problèmes qui auraient un éventuel impact négatif sur la performance de l'utilisateur final. Vous pouvez également tenter de mettre à jour les scripts Python concernés vous-même et remballer les logiciels pour leur déploiement, mais selon les fonctions des scripts d'installation, cette tâche peut s'avérer être difficile.

Autres outils

Les outils open-source destinés aux administrateurs Mac sont souvent entièrement écrits en Python 2. Vous pouvez les identifier avec le Shebang, comme nous l'avons précédemment mentionné. Lorsque le Shebang est /usr/bin/python, il utilise donc le Python 2 intégré qui posera un problème sous macOS 12.3 En vérifiant le répertoire GitHub des développeurs ou le site web de l'outil en question, vous pourriez y trouver des mises à jour et des instructions sur la manière d'obtenir ces outils d'exploitation sous macOS 12.3 et les versions ultérieures. Vous pouvez également demander à vos collègues administrateurs de Mac dans Jamf Nation ou le canal Slack de MacAdmins s'ils n'ont pas de solutions alternatives à vous proposer.

L'outil DockUtil est un exemple de types de solutions disponibles pour votre problème particulier. Alors que les développeurs travaillent sur la nouvelle version de Python 3, vous pouvez trouver un outil alternatif dans DockLib qui prend déjà en charge Python 3.

Longue vie à Python 3

Bien que Python 3 n'est pas une solution directe de remplacement de Python 2, il s'agit de la solution la plus logique à adopter. Il existe un binaire Python 3 dans macOS. Cependant, il ne s'agit que d'un binaire de remplacement qui redirige vers le moteur d'exécution installé avec Xcode ou invite l'utilisateur à installer les outils de ligne de commande de développeur. Le binaire Python 3 inclus dans macOS n'est pas une bonne alternative au Python 2 déprécié.

Comme Apple l'avait recommandé dans les remarques de sortie de macOS Catalina, lorsque vous souhaitez avoir une version Python dont vous pouvez dépendre, la meilleure solution est d'en créer une qui vous soit propre.

L'auteur de DockLib recommande l'utilisation de la version en Python pour MacAdmins. Ce projet open source permet d'obtenir un programme d'installation de paquets pour Python 3, préconfiguré avec un ensemble de modules Python utiles préinstallés. Il s'installe également dans une localisation inhabituelle du système de fichier pour empêcher tout conflit avec les autres versions de Python que les développeurs peuvent utiliser.

Une excellence solution si vous souhaitez continuer à utiliser Python pour vos outils d'admin. Vous disposez d'une autre option pratique, créer votre propre Python personnalisé avec des modules, en utilisant l'outil de Greg Neagle, Relocatable-Python.

Quel que soit le Python que vous utiliserez, n'oubliez pas que vous êtes désormais chargé de le maintenir et le mettre à jour, également.

La maîtrise des Pythons

Même avec la meilleure préparation, cette transition générera certains problèmes. Vous devrez contrôler, mettre à jour et vérifier vos propres scripts, tout en avertissant les fournisseurs et développeurs d'outils qu'ils devraient mettre à jour leurs paquets d'installation pour refléter les changements de rupture d'outil avec la dépréciation de Python 2.

Il vous faudra peut-être également utiliser Jamf Pro et les groupes intelligents pour différer l'installation de logiciels et de mises à jour des apps qui utilisent encore des demandes en Python dans macOS 12.3. Si les logiciels sont essentiels à votre business, vous pourriez juger nécessaire de différer la mise à jour vers 12.3 jusqu'à la correction des logiciels dépendants de Python 2. Si vous souhaitez continuer à utiliser Pyhton pour vos outils propres ou open source, la meilleure solution serait de suivre la recommandation originale d'Apple : concevoir et gérer votre propre version.

S’abonner au blog de Jamf

Recevez les tendances du marché, les mises à jour d'Apple et les dernières nouvelles de Jamf directement dans votre boîte mails.

Pour en savoir plus sur la manière dont nous collectons, utilisons, partageons, transférons et protégeant vos informations personnelles, veuillez consulter notre Politique de confidentialité.