2008-12-22 25 views
5

Tengo un pequeño proyecto que quiero probar portar a Python 3 - ¿Cómo hago esto?¿Flujo de trabajo de Python 3?

He hecho que el código se ejecute sin advertencias usando python2.6 -3 (eliminando en su mayoría llamadas .has_key()), pero no estoy seguro de la mejor manera de usar la herramienta 2to3.

Utilice la herramienta 2to3 para convertir este código fuente a la sintaxis 3.0. ¡No edite manualmente la salida!

Corriendo 2to3 something.py produce un diff, que no es útil por sí mismo. Usando la bandera --write sobrescribe something.py y crea una copia de seguridad .. Parece como si tuviera que hacer ..

2to3 something.py 
python3.0 something.py 
mv something.py.bak something.py 
vim something.py 
# repeat 

..which es un poco redonda-a-pelea - idealmente podría hacer algo como ..

mv something.py py2.6_something.py # once 

2to3 py2.6_something.py --write-file something.py 
vim py2.6_something.py 
# repeat 

Respuesta

5

Aha, que puede canalizar la salida 2to3 al comando patch, que puede escribir el archivo modificado a un nuevo archivo:

mv something.py py2.6_something.py 
2to3 py2.6_something.py | patch -o something.py 
+1

use cp en lugar de mv para que funcione. – nosklo

+0

@nosklo: no. parche lee la salida diff por 2to3 – Yktula

0

2.x debe ser su base de código de developme activa nt, entonces 2to3 realmente debería ejecutarse en una rama o directorio temporal. No estoy seguro de por qué querría tener las versiones 2.xy 3.x en el mismo directorio. distutils tiene una secuencia de comandos build_2to3 que ejecutará 2to3 en una instalación 3.0.

+0

Para que pueda editar rápida/fácilmente la versión 2.x, ejecutar 2to3, ejecutar las pruebas en 3.x (y repetir). Si tengo una rama para 3.x, ¿cómo hago cambios rápidos a la rama 2.x y vuelvo a generar el código 2to3? – dbr

+0

En general, haría todos los cambios en la rama 2.x, y simplemente usaría 2to3 cuando estuviera distribuyendo o intentando portar su biblioteca. –

+0

He hecho la pregunta un poco más clara. Hice la rama py3 para contener los cambios que tuve que hacer en el código py2.6, por lo que sería 2to3 sin errores – dbr

Cuestiones relacionadas