How to properly import modules in a Pycharm project?

Question:

I have some issues importing some modules in my latest project. I’m really new to Pycharm and Python and I could really use the help/insight.

The problem is I have a folder of utils i wanna use but I cant seem to import modules correctly. Here is what my directories look like roughly:

myproject
   utils
      utilities
         myclass.py
         __init__.py
         anothermodule
            __init__.py
            src
               helper_func.py
               __init__.py
   venv
      ...
      main.py
      ...

I wanna be able to use my classes and functions in the following way:

object = utilities.myclass.myclass( . . . )
thing =  utilities.anothermodule.src.helper_func.helper_func ( . . .)

I thought the way to go would be just to :

from utils import utilities

But trying to create ”object” as previously stated gives me this error (myclass.py contains a class called ”myclass”):

AttributeError: module 'utils.utilities' has no attribute 'myclass'

I have already marker utils, utilities , anothermodule, src as Source roots in Pycharm. What am I doing wrong? I also already added the path of the folder ”utils” to the sys paths.

Asked By: cercio

||

Answers:

in your utilities/__init__.py file add the following.

from . import myclass
from . import anothermodule

and anothermodule should import src and src should import helper_func and so on.

when you import utilities, python imports the __init__ file under the name of utilities, this is because folders are imported as packages.

another alternative is just doing the following, but you’ll have to modify the syntax.

from utils.utilities import myclass
myclass.myclass()
# or
import utils.utilities.my_class
utils.utilities.myclass.myclass()

you can find more information about this in python package documentation

Answered By: Ahmed AEK
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.