Esta es una pregunta que se realiza con frecuencia en diferentes formas, y suele obtener respuestas de "lol you're no lo está haciendo correctamente". Estoy bastante seguro de que es porque hay un escenario de sentido común que las personas (incluyéndome a mí) están tratando de usar como una implementación, y la solución no es obvia (si no lo has hecho antes).Importaciones de Python para pruebas usando nose: cuál es la mejor práctica para las importaciones de módulos sobre el paquete actual
Aceptaría una respuesta que "deja volar de la botella".
Dadas
project/
__init__.py
/code
__init__.py
sut.py
/tests
__init__.py
test_sut.py
Cuando se inicia tests_sut.py:
import code.sut
nosetests se ejecuta en el directorio raíz conduce a:
ImportError: No module named code.sut
avenidas recorrida:
a) haz un pariente u cantar
from ..code import sut
b) añadir a raíz del proyecto PYTHONPATH
c) utilizar el
sys.path.append
para agregar la ruta .. antes de que las importaciones en el inicio de cada módulo de prueba.
d) sólo recuerda que hacer un
setup.py
en el proyecto de instalación de los módulos en los site-packages antes de ejecutar las pruebas.
Así que el requisito es tener pruebas ubicadas debajo de la raíz del paquete de prueba que tienen acceso al proyecto. ¡Cada uno de los anteriores no me parece "natural", me ha resultado problemático o me parece que es demasiado trabajo!
En java esto funciona, pero básicamente a fuerza de su herramienta de compilación/IDE colocando todas sus clases en el classpath. Tal vez el problema es que estoy esperando "magia" de Python? Haber observado en las pruebas de Flab webframework, la opción d) parece ser la preferida.
En cualquier caso, las declaraciones a continuación que recomiendan una solución preferida eliminarían la sensación de "falta de naturalidad" en mi cuenta.
relacionado con http://stackoverflow.com/questions/6323860/sibling-package-imports/6466139#6466139 aunque no es un duplicado exacto. – Evpok
Esto resume maravillosamente el 80-90% de mi situación, si solo hubiera alguna aclaración sobre si virtualenv cambiaría o no la respuesta ... – sage