Похоже, проблема в том, что MyClass
не находится в commons.util
, потому что вы импортировали только модуль с именем my_class
, а не сам класс.
Вместо этого файл commons/util/__init__.py
должен содержит следующий импорт:
from .my_class import MyClass
Я не думаю, что это решит вашу проблему, потому что вы получите ошибку, отличную от показанной, но вы получите ошибки для это в конечном итоге.
Обновление
Во-первых, я бы рекомендовал прочитать этот ответ для хорошего объяснения того, как импорт работает в python.
Обычно при выполнении from commons.util import MyClass
интерпретатор сканирует содержимое sys.path
для модуля с именем commons
.
Я предполагаю, что вы не установили sys.path
для включения папки проекта следовательно, ModuleNotFoundError
.
TLDR; у вас есть 2 варианта:
- Вручную установите
sys.path
в run_commands.py
для проверки папки вашего проекта (не делайте этого!) - Используйте Django
Command
класс
Чтобы использовать Django класс Command
, вам необходимо настроить папку вашего проекта следующим образом:
project
- manage.py
- commons
- management
- commands
run_commands.py
- util
- __init__.py
- my_class.py
Теперь в run_commands.py:
from django.core.management.base import BaseCommand
from commons.util import MyClass
class Command(BaseCommand):
def handle(*args, **options):
print("handling", MyClass)
Вы можете выполнить новую команду следующим образом:
python3 manage.py run_commands