Как правильно импортировать модули в проект Pycharm?

У меня есть некоторые проблемы с импортом некоторых модулей в моем последнем проекте. Я действительно новичок в Pycharm и Python, и мне действительно нужна помощь/понимание.

Проблема в том, что у меня есть папка утилит, которые я хочу использовать, но я не могу правильно импортировать модули. Вот как примерно выглядят мои каталоги:

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

Я хочу иметь возможность использовать свои классы и функции следующим образом:

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

Я думал, что путь будет просто:

from utils import utilities

Но попытка создать «объект», как указано ранее, дает мне эту ошибку (myclass.py содержит класс с именем «myclass»):

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

У меня уже есть маркерные утилиты, утилиты, другой модуль, src как исходные корни в Pycharm. Что я делаю неправильно? Я также уже добавил путь к папке «utils» в системные пути.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
99
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

в вашем файле utilities/__init__.py добавьте следующее.

from . import myclass
from . import anothermodule

и anothermodule должен импортировать src и src должен импортировать helper_func и так далее.

когда вы импортируете утилиты, python импортирует файл __init__ под именем utilities, потому что папки импортируются как пакеты.

другая альтернатива - просто сделать следующее, но вам придется изменить синтаксис.

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

вы можете найти больше информации об этом в документации пакета python

Другие вопросы по теме