Мне нужна помощь в настройке структуры каталогов для приложения на Python. Это приложение командной строки (с помощью Click, если это имеет значение).
Моя структура каталогов выглядит так:
mycli
├── mycli
│ ├── cli.py
│ ├── __init__.py
│ └── mycli.py
└── setup.py
В mycli/mycli/__init__.py
У меня есть одна строка кода:
__application__ = "my-cli"
В mycli/mycli/cli.py
У меня есть это:
from mycli import __application__
import click
import sys
@click.group()
def my_cli():
""" rest of my code """
if __name__ == "__main__":
sys.exit(my_cli())
Наконец, в моем setup.py
я добавил точку входа, чтобы я мог использовать это приложение в командной строке:
entry_points={
'console_scripts': [
'my-cli=mycli.cli:my_cli',
],
},
Я могу установить приложение, используя pip install -e .
, а затем выполнить my-cli
, как и ожидалось. Это работает.
У меня проблема в том, что я тоже хочу запустить python mycli/cli.py
. Это полезно для отладки. Не удается прочитать __application__
, хотя:
$ python mycli/cli.py
Traceback (most recent call last):
File "mycli/cli.py", line 1, in <module>
from mycli import __application__
ImportError: cannot import name '__application__'
Что мне нужно сделать с моим макетом проекта, чтобы я мог продолжать использовать entry_points
в setup.py
И иметь возможность запускать мое приложение с python mycli/cli.py
?
Я пытался изменить импорт на
from .mycli import __application__
Но я получаю эти ошибки:
при работе python mycli/cli.py
ModuleNotFoundError: No module named '__main__.mycli'; __main__ is not a package
Точка входа разрывается на:
ImportError: cannot import name '__application__'