I have a very basic question about Python and unittest.
I have a directory structure like this.
Project
|
|-lib
|
|-__init__.py
|-class.py
|
|-tests
|
|-__init__.py
|-test_class.py
Now this is my content of test_class.py. If I import the lib.class from the root folder it's working fine. But if I import the file from somewhere else it's not working.
import unittest
from lib.class import Class
class TestClass(unittest.TestCase):
def testClass(self):
// do some test
def main():
unittest.main()
if __name__ == '__main__':
main()
When I run the test I got this error
Traceback (most recent call last):
File "tests/test_class.py", line 2, in
from lib.class import Class
ImportError: No module named lib.class
Not sure how do I import the file from another folder that's not the root folder.
The better solution is to create a virtualenv and install the project in developer mode. This allows you to modify and execute code without having to re-install it.
virtualenv venv
source venv/bin/activate
pip install -e .
Inside the tests you would now simply include the fqdn.
from project.lib.class import Class
Keep in mind that you will need to use setuptools to properly define the project.
Modify sys.path
to include the Project directory
import sys
sys.path.append('/path/to/Project')
On Linux, you could do
import sys, os
sys.path.append(os.path.abspath(sys.path[0]) + '/../')
and that should include the directory above the running Python testing script, which is the Project folder
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