As Paolo said, we have 2two invocation methods:
1) python -m tests.core_test 2) python tests/core_test.py python -m tests.core_testpython tests/core_test.py
One difference between them is sys.path[0]the sys.path[0] string. Since the interpret will search sys.pathsys.path when doing import, we can do with tests/core_test.py:
if __name__ == '__main__': import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) from components import core <other stuff> And more after this, we can run core_test.pycore_test.py with other methods:
cd tests python core_test.py python -m core_test ... cd tests python core_test.py python -m core_test ... Note, py36 tested only on Python 3.6.