I have a file structure that looks like the following
project
src
__init__.py
main.py
module.py
secondary.py
test
test_module.py
import secondary
x = False
pass
from unittest import TestCase
from src import module
class ModuleTest(TestCase):
def test_module(self):
self.assertTrue(module.x)
Invoking python3 -m unittest discover
in /project/
gives an error:
File "/Users/Me/Code/project/test/test_module.py", line 6, in <module>
from src import module
File "/Users/Me/Code/project/src/module.py", line 1, in <module>
import secondary
ImportError: No module named 'secondary'
What can I do so that secondary.py
is imported without error?
In Python 3 (and Python 2 with from __future__ import absolute_import
), you must be explicit about what module you want when importing another module from the same package. The syntax you're using in module.py
(import secondary
) only works if secondary
is a top-level module in a folder in the Python module search path.
To explicitly request a relative import from your own package, use from . import secondary
instead. Or, make an absolute import, using the name of the package as well as the module (from src import secondary
, or import src.secondary
and use src.secondary
elsewhere the module instead of just secondary
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With