Я работал над приложением python3 и столкнулся со странной проблемой, которая привлекла мое любопытство после того, как сильно меня раздражает.
Моя файловая структура выглядит примерно так:
root/
| __init__.py
| main.py
| fuzzy/
| __init__.py
| foo.py
| dreamy/
| __init__.py
| bar.py
| meh.py
Поэтому мне нужно использовать метод модуля foo
в bar
и meh
.
В bar
Я написал:
from fuzzy.foo import foo_function
И это сработало отличноотлично.
Теперь в meh
я использовал точно такой же синтаксис, но в результате возникла ошибка импорта:
ModuleNotFoundError: No module named 'fuzzy'
Мне удалось решить проблему с помощью this метод, но я хотел бы понять, почему это происходит.
Согласно документации Python3 мой синтаксис импорта правильный:
Альтернативный способ импортаподмодуль:
from sound.effects import echo
Похоже, это также синтаксис, предоставленный ответ на вопрос на этом форуме
Более того, обаbar
и meh
находятся в одном каталоге, и их код начинается точно так же.
Кто-нибудь знает, почему эта ошибка возникает в одном файле, а не в другом?
Есть ли что-то, что я сделал не так?
Если я сделал что-то не так, каков был бы правильный путь (или хорошие практики) для импорта локальных пакетов / методов?
Спасибо за понимание.
--- EDIT ---
Я не возился с моим PYTHONPATH
в любом случае, и я использую Python3 из (ванильного) Conda venv.Для хороших мер я также создал новую файловую структуру и скопировал код в новые пустые файлы.Это сделано для того, чтобы с моим каталогом ничего «смешного» не случилось.