Py.test No module named *
So you are running py.test
from /App
. Are you sure /App/App
is in your $PYTHONPATH
?
If it's not, code that tries to import app
will fail with such a message.
EDIT0: including the info from my comment below, for completeness.
An attempt to import app will only succeed if it was executed inside /App/App
, which is not the case here. You probably want to make /App/App
a package by putting __init__.py
inside it, and change your import to qualify app as from App import app
.
EDIT1: by request, adding further explanation from my second comment below.
By putting __init__.py
inside /App/App
, that directory becomes a package. Which means you can import from it, as long as it - the directory - is visible in the $PYTHONPATH
. I.e. you can do from App import app
if /App
is in the $PYTHONPATH
. Your current working directory gets automatically added to $PYTHONPATH
, so when you run a script from /App
, the import will work.
I already had an __init__.py
file in the /App/App
directory and wanted to run tests from the project root without any path-mangling magic:
python -m pytest tests
The output immediately looks like this:
➟ 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 ==============================
Working with Python 3 and getting the same error on a similar project layout, I solved it by adding an __init__
file to my tests
module.
$ touch tests/__init__.py
I'm not great at packaging and importing, but I think that this helps pytest
work out where the target App
module is located.