He estado tratando de implementar un sistema de prueba de fuente única que permita realizar pruebas automatizadas en múltiples versiones de Python usando tox + nosetests.python - Ejecutando tox + nosetests en Python 3.2 testenv
El problema es que no puedo hacerlo funcionar cada vez que pruebo en Python 3.2. Todo funciona bien si excluyo Python 3.2.
Aquí es mi tox.ini
:
[tox]
envlist = py25,py26,py27,py32,pypy,jython
[testenv]
commands =
nosetests []
deps =
nose
mock
[testenv:py32]
commands =
nosetests []
y mi ~/.noserc
:
[nosetests]
verbosity=2
with-doctest=1
He puesto la bandera use_2to3
-True
en mi setup.py, pero este error sigue apareciendo: NameError: global name 'basestring' is not defined
. Parece que me falta algo de configuración que debería hacer que 2to3
funcione, pero no sé qué es.
Además, he intentado reemplazar nosetests []
con en la configuración testenv:py32
. Desafortunadamente, no solo sigue apareciendo el mismo error, sino que también presenta otro error: Error in atexit._run_exitfuncs: TypeError: 'NoneType' object is not callable
.
¿Alguna sugerencia?
EDIT: añadido el código en setup.py
, en caso de que sea útil:
# handle python 3
if sys.version_info >= (3,):
use_2to3 = True
else:
use_2to3 = False
y en algún lugar setup()
: use_2to3 = use_2to3
Si está utilizando 2to3, necesita asegurarse de que ejecuta 'setup.py' y las pruebas contra la versión que crea, en lugar de probar contra la fuente principal. No he usado 'tox', pero generalmente puedes ejecutar' python setup.py build', luego cambiar al directorio de compilación y ejecutar nosetest. –
Creo que eso es lo que está haciendo tox. Hace virtualenvs aislados para estas versiones/implementaciones de python separadas. Por ejemplo, arroja un error si no incluyo '' from __future__ import with_statement'' en un env python2.5, pero no en python2.7. La conversión '' 2to3'' parece estar funcionando, pero por alguna razón '' tox'' no está probando en su contra automáticamente ... – bow
Asegúrate de que no esté ejecutando 'nosetests' desde el directorio fuente, que tendrá el código no traducido. –