Domanda

A questa domanda ha già una risposta qui:

Così, con la finale versioni di Python 3.0 (e ora 3.1), un sacco di persone sono di fronte a preoccuparsi di come aggiornare senza perdere metà del loro codebase dovuto all'indietro di incompatibilità.

Quali sono le persone migliori suggerimenti per evitare le numerose insidie che quasi inevitabilmente di passare alla prossima generazione di python?

Probabilmente un buon posto per iniziare è "uso 2to3 per convertire il vostro python 2.x codice a 3.x" :-)

È stato utile?

Soluzione

Primo, questa domanda è molto simile a Come pianificare la gestione la migrazione a Python 3?.Controllare le risposte.

C'è anche un sezione in Python Wiki su porting di applicazioni Python 3.x

Il Note di rilascio per python 3.0 contiene una sezione di porting.Cito i consigli c':

  1. (Prerequisito:) Inizio con eccellente copertura di test.
  2. Porta per Python 2.6.Questo dovrebbe essere non più di lavoro rispetto alla media del por da Python 2.x per Python 2.(x+1).Assicurarsi che tutte le prove superate.
  3. (Ancora utilizzando 2.6:) Accendere il -3 della riga di comando.Questo consente di avvisi sulle caratteristiche che saranno rimosso (o modificare) in 3.0.Eseguire il suite di test di nuovo, e correggere il codice che ottieni gli avvertimenti circa fino a che non ci sono nessun avvisi di sinistra, e tutti i test ancora passare.
  4. Eseguire il 2to3 sorgente a sorgente traduttore sopra il vostro codice sorgente.(Vedere 2to3 Automatizzati Python 2 a 3 traduzione di codice per saperne di più strumento). Esegui il risultato della traduzione in Python 3.0.Manualmente correggere eventuali problemi rimanenti, fissaggio problemi fino a quando tutti i test passano.

Non è raccomandato per provare a scrivere codice sorgente che viene eseguito invariato sotto sia Python 2.6 e 3.0;dovresti utilizzare un molto contorto stile di codifica, ad es.evitando di stampare le istruzioni metaclasses, e molto di più.Se si sono gestione di una libreria che ha bisogno di supporto sia Python 2.6 e Python 3.0, l'approccio migliore è quello di modificare il punto 3 di cui sopra, modificando il 2.6 versione del codice sorgente e l'esecuzione di il 2to3 traduttore di nuovo, piuttosto che modifica la versione 3.0 di origine codice.

Altri suggerimenti

Vorrei scrivere un libro su questo.Lo si può leggere qui:

http://python3porting.com/

In breve:

  1. Assicurarsi che tutte le librerie di terze parti sono disponibili per Python 3.
  2. Prepara il tuo codice, eliminando comune ambiguità:
    • Utilizzare // se si vuole veramente divisione di numeri interi.
    • Assicurarsi di contrassegnare i file binari con il flag 'b' quando si aprono, chiaramente indicare se intendi i dati binari o non.
  3. Maggiore è la copertura del test è, meglio è.
  4. Assicurarsi che venga eseguito senza avvisi di sotto "Python 2.7 -3".
  5. Ora eseguire 2to3.
  6. Correggere eventuali bug.

Che è, più o meno.

Senza davvero un valido motivo per aggiornare, vorrei bastone con ciò che funziona.Ho guardato l'aggiornamento di script che uso quotidianamente e che era troppo lavoro per nessun vantaggio che ho potuto vedere.

"If it ain't broke, don't fix it!"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top