У меня следующая файловая структура:
bot
├── LICENSE.md
├── README.md
├── bot.py # <-- file that is executed from command line
├── plugins
│ ├── __init__.py
│ ├── debug.py
│ └── parsemessages.py
├── helpers
│ ├── __init__.py
│ ├── parse.py
│ └── greetings.py
└── commands
├── __init__.py
└── search.py
bot.py
, при запуске из командной строки загружается во все в каталоге plugins
.
Я хочу plugins/parsemessages.py
для импорта parse
из каталога helpers
, поэтому я делаю это:
# parsemessages.py
from ..helpers import parse
parse.execute("string to be parsed")
Я запускаю python3 bot.py
из командной строки.
Я получаю следующую ошибку:
File "/home/bot/plugins/parsemessages.py", line 2, in <module>
from ..helpers import parse
ValueError: attempted relative import beyond top-level package
Поэтому я меняю две точки на одну:
# parsemessages.py
from .helpers import parse
parse.execute("string to be parsed")
... но я получаю еще одну ошибку:
File "/home/bot/plugins/parsemessages.py", line 2, in <module>
from .helpers import parse
ImportError: No module named 'plugins.helpers'
Как я могу получить этот импортна работу?
Стоит отметить, что я не пытаюсь сделать пакет здесь, это просто обычный скрипт.При этом, я не хочу возиться с sys.path
- я хочу, чтобы это было чисто для использования.
Кроме того, я хочу, чтобы parse
был импортирован как parse
- так что дляВ примере выше я должен набрать parse.execute()
, а не execute()
.
Я нашел этот пост и этот пост , но они начинаются с файла, который довольноглубоко в файловой структуре (мой справа вверху).Я также нашел этот пост , но, похоже, речь идет о пакете, а не о обычном .py.
Какое здесь решение?