Reputation: 309
This is the situation. I'm using Python 3.6
I currently have the next folder organization:
/MainProject
__init__.py
/Folder1
pyscript1.py
pyscript2.py
__init__.py
/Folder2
pyscript3.py
__init__.py
So, I'm trying to get a function that exists in pyscript1.py from pyscript3. I've also added a init.py at every level. Inside pyscript3.py I tried the following:
from . import Folder1
Giving the error:
ImportError: cannot import name 'Folder1'
Also I tried:
from .Utils import script1
Giving the error:
ModuleNotFoundError: No module named '__main__.Utils'; '__main__' is not a
package
I know that I can solve it using sys and os in the following manner:
sys.path.append(os.path.realpath('../..'))
But I wanted to know if this is possible without using sys.
Upvotes: 6
Views: 22347
Reputation: 1
If still not working, check the PYTHONPATH Environment Variable you defined for your project. Sometimes one defines a PYTHONPATH just for the root folder of the project but wants to import modules from a folder that is inside the PYTHONPATH that is defined.
Options to solve this:
import MainProject.Folder1.pyscript1
instead of import Folder1.pyscript1
.Upvotes: 0
Reputation: 621
Note that Folder1
is a directory, the .py
scripts are your modules.
In pyscript3
you should be able to go:
from Folder1 import pyscript1
Then you can access a method with name methodname
like:
pyscript1.methodname()
Otherwise you can import the method directly like:
from Folder1.pyscript1 import methodname
and use it like:
methodname()
EDIT:
For your program to see Folder1
and Folder2
, you need to run your program from the MainProject
folder.
Either move pyscript3
to your MainFolder
or write another script, let's call it main.py
, and call the necessary code to instantiate the class/call the function you want in pyscript3.py
.
To summarize, you always want to run the entry module from the base folder of your project.
Upvotes: 9
Reputation: 174
You could use
from ..Folder1 import pyscript1
In pyscript3.py
But you would have to load pyscript3 from the parent module or in your case MainProject.
Upvotes: -1