So I have tried many solutions found on stack overflow but am still having issues.
Below is my project structure.
project
| tool1
| - application.py
| resources
| - tools
| - dao.py
Within application.py I have the following import statement:
from resources.tools.dao import DAO
This works fine in PyCharm, but when I try to run it from the command line from the project directory (python tool1/application.py
), I get:
ModuleNotFoundError: No module named 'resources'
I get the same error if I move into 'tool1' folder and run: python application.py
I have tried adding .. before the imports, setting different folders as my source root folder through PyCharm, and adding blank __init__.py
files to the resources directory.
Why is PyCharm able to find 'resources' but the command line is not? How can I change this so that my solution works from either location?
If it helps, I am using Python 3.7 and Windows. I am open to restructuring the project directory, but there are going to be multiple tools/applications that will all use dao.py and the other tools in the resources directory, so resources should be at least as high level as the other projects.
Thank you in advance.
Assuming you created __ init __.py in each directory. You could add to system path. It should import dao from anywhere. It works in linux for sure.
# tool1.__init__.py
import sys
import os
CURRPATH, TAIL = os.path.split(os.getcwd())
while CURRPATH != "/":
if TAIL == 'project':
if os.path.join(CURRPATH, TAIL) not in sys.path:
sys.path.append(os.path.join(CURRPATH, TAIL))
break
CURRPATH, TAIL = os.path.split(CURRPATH)
from resources.tools.dao import DAO
and in application.py
# tool1.application.py
from __init__ import DAO