Structuring your project guide leads to a ModuleNotFoundError in the tests module
Following this section, adding from .context import sample in my tests module gives me the following error: ModuleNotFoundError: No module named '__main__.context'; '__main__' is not a package
I was able to fix it by removing the . from from .context import sample, but I suspect that's not the ideal solution. I know that the from .context import sample is a relative import statement as described in PEP 328, but I just do not understand modules, packages, absolute and relative imports, etc. enough to say what's going on here.
I tried creating ./__init__.py and ./tests/__init__.py files, but that did not help.
Finally, I tried the following:
~> git clone [email protected]:navdeep-G/samplemod.git
~> python3 samplemod/tests/test_basic.py
Traceback (most recent call last):
File "samplemod/tests/test_basic.py", line 3, in <module>
from .context import sample
ModuleNotFoundError: No module named '__main__.context'; '__main__' is not a package
I'm not alone in hitting this issue. @rileyweber13 originally reported this problem a year ago.
Relative imports only work in a package that is being imported due to using the __name__ variable that is set to "__main__" if the file is ran directly. If you import test_basic.py, it should work to run test_basic.sample. If you take out the period, you lose the ability to import the tests from elsewhere so what you want depends on how you're using the tests.
Python tests are usually coded to be executed through a testing framework. In this case
cd <yourproject>
python -m pytest tests
# either:
# py.test tests