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.
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
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.
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