2010-10-28 18 views
16

Tengo problemas para usar doctest con importaciones relativas. La solución simple es simplemente deshacerse de las importaciones relativas. ¿Hay otros?Doctest e importaciones relativas

Decir que tengo un paquete llamado ejemplo contiene 2 archivos:

example/__init__.py

""" 
This package is entirely useless. 
>>> arnold = Aardvark() 
>>> arnold.talk() 
I am an aardvark. 
""" 

from .A import Aardvark 

if __name__ == "__main__": 
    import doctest 
    doctest.testmod() 

ejemplo/A.py

class Aardvark(object): 
    def talk(self): 
     print("I am an aardvark.") 

Si ahora intento

python example/__init__.py 

en cuando me siento el error

Traceback (most recent call last): 
    File "example/__init__.py", line 8, in <module> 
    from .A import Aardvark 
ValueError: Attempted relative import in non-package 
+0

Me gustaría deshacerme de las importaciones relativas, muchas guías de estilo de Python las desalientan fuertemente, la mayoría las prohíbe. –

+0

No me di cuenta de eso. Aclamaciones. –

Respuesta

11

crear otro archivo my_doctest_runner.py:

if __name__ == "__main__": 
    import doctest 
    import example 
    doctest.testmod(example) 

Ejecutar my_doctest_runner.py prueba unitaria para funcionar en example/__init__.py:

$ python2.7 my_doctest_runner.py 
********************************************************************** 
File "/tmp/example/__init__.py", line 4, in example 
Failed example: 
    arnold.talk() 
Expected: 
    I am an aaardvark. 
Got: 
    I am an aardvark. 
********************************************************************** 
1 items had failures: 
    1 of 2 in example 
***Test Failed*** 1 failures. 
+0

Gracias por la respuesta. Al final, terminé cambiando la importación relativa por una absoluta, (del ejemplo. Una importación de Aadvark) basada en el comentario de Jason Scheirer. –

1

Eso sí,

from A import Aardvark 
+7

bueno, me temo que esto rompe la compatibilidad de python 3. – chfw

Cuestiones relacionadas