Question

Cette question a déjà une réponse ici :

Ainsi, avec les versions finales de Python 3.0 (et maintenant 3.1), de nombreuses personnes se demandent comment effectuer une mise à niveau sans perdre la moitié de leur base de code en raison d'une incompatibilité ascendante.

Quels sont les meilleurs conseils pour éviter les nombreux pièges qui résulteront presque inévitablement du passage à la nouvelle génération de Python ?

Un bon point de départ est probablement "utilisez 2to3 pour convertir votre code python 2.x en 3.x" :-)

Était-ce utile?

La solution

Premièrement, cette question est très similaire à Comment comptez-vous gérer la migration vers Python 3 ?.Vérifiez les réponses ici.

Il y a aussi section dans le Wiki Python sur le portage d'applications vers Python 3.x

Le Notes de version pour Python 3.0 contient une section sur le portage.Je cite ici les conseils :

  1. (Prérequis :) Commencez avec une excellente couverture de test.
  2. Portage vers Python 2.6.Cela ne devrait pas représenter plus de travail que la moyenne des jours. de Python 2.x à Python 2. (x+1).Assurez-vous que tous vos tests réussissent.
  3. (Toujours en utilisant 2.6 :) Activez le commutateur de ligne de commande -3.Cela permet d’obtenir des avertissements sur les fonctionnalités qui seront supprimé (ou modifié) dans la version 3.0.Exécutez votre test suite à nouveau, et corrigez le code qui vous recevez des avertissements jusqu’à ce qu’il y ait Plus d’avertissements, et tous vos tests passent quand même.
  4. Exécutez le traducteur source à source 2to3 sur votre arborescence de code source.(Voir 2to3 - Python automatisé 2 à 3 Code Translation pour plus d’informations à ce sujet l’outil.) Exécutez le résultat de l’opération traduction sous Python 3.0.Manuellement résoudre tous les problèmes restants, en résolvant jusqu’à ce que tous les tests réussissent à nouveau.

Il n’est pas recommandé d’essayer d’écrire code source qui s’exécute inchangé sous Python 2.6 et 3.0 ;Il faudrait que vous le fassiez utiliser un style de codage très tordu, p. ex.éviter d’imprimer des relevés, métaclasses, et bien plus encore.Si vous êtes la mise à jour d’une bibliothèque qui a besoin d’être prendre en charge Python 2.6 et Python 3.0, la meilleure approche consiste à modifier l’étape 3 ci-dessus en éditant le fichier 2.6 version du code source et en cours d’exécution le traducteur 2to3 à nouveau, plutôt que Modification de la version 3.0 de la source code.

Autres conseils

J'écris un livre gratuit à ce sujet. Vous pouvez le lire ici:

http://python3porting.com/

En bref:

  1. Assurez-vous que toutes vos bibliothèques tierces sont disponibles pour Python 3.
  2. Préparer votre code en supprimant les ambiguïtés communes:
    • Utilisez // si vous voulez vraiment la division entière.
    • Assurez-vous que vous marquez des fichiers binaires avec le drapeau « b » lorsque vous les ouvrez, à clairement Indiquez si vous voulez dire que les données soient binaires ou non.
  3. votre couverture de test est plus élevé, mieux.
  4. Assurez-vous qu'il fonctionne sans avertissements sous la rubrique "Python 2.7 -3".
  5. Maintenant, exécutez 2to3.
  6. Correction des bugs.

Ca y est, plus ou moins.

Sans une raison vraiment convaincante pour mettre à niveau, je tiendrais avec ce qui fonctionne. Je regardais la mise à niveau des scripts que j'utilise tous les jours et il était trop de travail pour aucun avantage que je pouvais voir.

« Si ce n'est pas cassé, ne le répare pas! »

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top