Как организовать файлы консольных команд из каталога <i>./app/management/commands/</i> так, чтобы их можно было разместить в подкаталогах и вызывать в стиле <i>manage.py subdir1.command1</i>?
Чтобы выполнить команду в консоли из определенного подкаталога, вы можете использовать следующую комбинацию команд:
1. Сначала перейдите в нужный подкаталог с помощью команды `cd`:
```
cd путь_к_подкаталогу
```
Например:
```
cd ./app/management/commands/
```
2. Затем выполните вашу команду. Например, если вы хотите выполнить команду `python script.py`, то сначала перейдите в каталог, где находится файл `script.py`, а затем выполните команду:
```
python script.py
```
Чтобы организовать файлы консолейых команд из каталога `./app/management/commands/` так, чтобы их можно было разместить в подкаталогах и вызывать в стиле `manage.py subdir1.command1`, вам следует создать вложенные подкаталоги внутри `./app/management/commands/` и помещать файлы команд в эти подкаталоги.
Например, вы можете создать следующую структуру каталогов:
```
./app
└── management
└── commands
├── subdir1
│ └── command1.py
└── subdir2
└── command2.py
```
Теперь вы можете вызывать команды `command1` и `command2` следующим образом:
```
python manage.py subdir1.command1
python manage.py subdir2.command2
```
Это позволит вам организовать и вызывать команды из различных подкаталогов в удобном и структурированном формате.
В Django каждая консольная команда должна быть модулем, который располагается в определенной структуре каталогов, чтобы Django мог его обнаружить и зарегистрировать.
Если прям жмет, то можно разместить __init__.py в каждом каталоге до консольной команды, с импортом вида:
from .command1 import Command1 # app/ # management/ # __init__.py <-- this import # commands/ # __init__.py <-- and this import # command1/ # __init__.py <-- and this import
Это позволит Django обнаруживать команды, находящиеся в подкаталогах, но при этом требует, чтобы каждая команда была в своем собственном подкаталоге и имела собственный __init__.py.
Кстати, имя команды которое Вы используете при вызове manage.py, должно соответствовать имени каталога, в котором находится команда. Соответственно, если Вы разместили команду в app/management/commands/subdir1/command1, Вы всё равно вызываете её как manage.py command1, не указывая subdir1. Django не поддерживает вызов команд с использованием точечной нотации для обозначения подкаталогов, как в Вашем примере subdir1.command1.