Reputation: 12214
I have a very simple python project:
sample/__init__.py
sample/main.py
tests/test_sample.py
main.py
contains:
def echo_the_arg(the_arg):
return the_arg
test_sample.py
contains:
import unittest
from sample.main import echo_the_arg
class SampleTest (unittest.TestCase):
def test_echo_the_arg(self):
assert echo_the_arg(1) == 1
My IDE resolves sample.main
module OK:
but when I attempt to run the test from the root of the project by issuing pytest tests
I get an error:
ImportError while importing test module '/Users/me/python-project-template/tests/test_sample.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/usr/local/Cellar/[email protected]/3.9.2_4/Frameworks/Python.framework/Versions/3.9/lib/python3.9/importlib/__init__.py:127: in import_module
return _bootstrap._gcd_import(name[level:], package, level)
tests/test_sample.py:2: in <module>
from sample.main import echo_the_arg
E ModuleNotFoundError: No module named 'sample'
I've perused the many many search results on SO pertaining to relative imports like this but I'm none the wiser as to why i'm getting this failure. Why can pytest not find my sample
module?
UPDATE, I discovered I can run my tests by running python -m pytest tests
platform darwin -- Python 3.9.2, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: /Users/me/python-project-template
collected 1 item
tests/test_sample.py . [100%]
======================= 1 passed in 0.02s =======================
so I'm left wondering why just running pytest
from the command-line fails.
Upvotes: 4
Views: 3376
Reputation: 12214
I figured it out. I needed to add an extra (empty) __init__.py
file. So my structure now looks like this:
sample/__init__.py
sample/main.py
tests/__init__.py
tests/test_sample.py
Output:
(venv) ➜ python-project-template git:(master) ✗ pytest tests
=========================================================================================== test session starts ===========================================================================================
platform darwin -- Python 3.9.2, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: /Users/me/python-project-template
collected 1 item
tests/test_sample.py . [100%]
======================= 1 passed in 0.02s =======================
Upvotes: 2