Py.test No hay módulo llamado *

Tengo una estructura de carpetas como esta

App --App --app.py --Docs --Tests --test_app.py 

En mi test_app.py file , tengo una línea para importar el módulo de mi aplicación. Cuando ejecuto py.test en la carpeta raíz, recibo este error sobre ningún módulo llamado app. ¿Cómo debo configurar esto?

Así que estás ejecutando py.test desde /App . ¿Estás seguro /App/App está en tu $PYTHONPATH ?

Si no lo es, el código que intenta import app fallará con ese mensaje.

EDIT0: incluyendo la información de mi comentario a continuación, para completar.

Un bash de importar la aplicación solo tendrá éxito si se ejecutó dentro de /App/App , que no es el caso aquí. Es probable que desee hacer de /App/App un paquete al poner __init__.py dentro de él, y cambiar su importación para que califique a la aplicación from App import app .

EDIT1: por solicitud, agregando una explicación adicional de mi segundo comentario a continuación.

Al poner __init__.py dentro de /App/App , ese directorio se convierte en un paquete. Lo que significa que puede importar desde él, siempre y cuando, el directorio, esté visible en $PYTHONPATH . Es decir, puede hacerlo desde la App import app si /App está en $PYTHONPATH . Su directorio de trabajo actual se agrega automáticamente a $PYTHONPATH , de modo que cuando ejecute un script desde /App , la importación funcionará.

Ya tenía un archivo __init__.py en el directorio /App/App y quería ejecutar pruebas desde la raíz del proyecto sin ningún tipo de magia en la ruta:

  python -m pytest tests 

La salida se ve inmediatamente así:

 ➟ python -m pytest tests ====================================== test session starts ====================================== platform linux -- Python 3.5.1, pytest-2.9.0, py-1.4.31, pluggy-0.3.1 rootdir: /home/andrew/code/app, inifile: plugins: teamcity-messages-1.17 collected 46 items ... lines omitted ... ============================= 44 passed, 2 skipped in 1.61 seconds ============================== 

Trabajando con Python 3 y obteniendo el mismo error en un diseño de proyecto similar, lo resolví agregando un archivo __init__ a mi módulo de tests .

 $ touch tests/__init__.py 

No soy muy bueno empaquetando e importando, pero creo que esto ayuda a pytest determinar dónde se encuentra el módulo de la App destino.

También obtuve el mismo error al ejecutar los casos de prueba para mi aplicación que se encuentra a continuación

 myproject --app1 --__init.py__ --test.py --app2 --__init.py__ --test.py --__init.py__ 

Eliminé el archivo __init.py__ de mi myproject y, en la actualidad , se están ejecutando casos de prueba.