2012-06-01 13 views
6

Tengo un setup.py que necesita para apoyar tanto Python 2 y 3.Las pruebas no están cubiertas por 2to3 en setup.py?

El código actualmente funciona y es instalable en Python 2.x

Si añado la cláusula use_2to3 = True a mi setup.py, entonces el módulo puede ser instalado en Python 3, sin embargo, hacer un:

python setup.py test 

causa un fracaso como una de las pruebas se utiliza la clase StringIO, y la línea de importación goofs en Python 3 (que es actualmente from StringIO import StringIO, donde en Python3 debería ser from io import StringIO

Pensé sin embargo que una vez que agregaste la palabra clave use_2to3 todas las pruebas (incluyendo pruebas unitarias) fueron procesadas por 2to3 antes de ser probadas.

¿Qué me estoy perdiendo? En caso de que ayuda, la mayor parte de mi setup.py parece:

from setuptools import setup 

setup(
    name='myproject', 
    version='1.0', 
    description='My Cool project', 
    classifiers = [ 
     'Programming Language :: Python', 
     'Programming Language :: Python :: 3', 
    ], 

    py_modules=['mymodule'], 
    test_suite='test_mymodule', 
    zip_safe=False, 
    use_2to3 = True, 
) 

edición: la razón por la que siento como si 2to3 no está siendo ejecutado en un python setup.py test es que explota & la parte inferior de la StackTrace lee:

File "/home/aparkin/temp/mymodule/test_mymodule.py", line 18, in <module> 
    from StringIO import StringIO 

Pero si corría 2to3 en test_mymodule.py, después de que la línea de importación debería haber sido revisado a fin de:

from io import StringIO 

Y (en el peor) las pruebas sólo debe ind ividualmente fallan

Respuesta

1

Para distribuir distribuir su módulo y ejecutarlo a través de 2to3, debe aparecer en py_modules. Por lo que cambiar a:

py_modules=['mymodule', 'test_mymodule'], 

Desafortunadamente esto tiene un efecto secundario de la instalación de test_mymodule al instalar el proyecto, que es probable que no desee. En casos como este generalmente convertiré el proyecto en un paquete con un sub-paquete mymodule.tests. De esta forma, las pruebas pueden ser "instalables" sin agregar desorden adicional.

+1

¿Qué quiere decir con el sub-paquete mymodule.tests? –

+0

Me refiero a crear un paquete llamado "mymodule" y crear un directorio llamado "tests" y poner todos sus módulos de prueba debajo, recordando incluir un '__init __. Py' para que las pruebas sean un subpaquete de mymodule (de ahí mymodule.tests) – Iguananaut

Cuestiones relacionadas