Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Importing from subfolder in Python

Tags:

python

import

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.

like image 486
Chema Sarmiento Avatar asked Jul 11 '18 23:07

Chema Sarmiento


1 Answers

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.

like image 195
alecvn Avatar answered Oct 04 '22 08:10

alecvn