Проблема импорта файлов - python Django

У меня есть файл в папке management/commands, и я пытаюсь импортировать свои модели в папку report.py. Однако я получаю следующую ошибку.

Traceback (most recent call last):
  File "c:\Users\Timmeh\source\Python\Django Projects\env\topxgym\members\management\commands\report.py", line 2, in <module>
    from members.models import ActiveMember
ModuleNotFoundError: No module named 'members'

У меня есть файл active.py в той же папке с тем же импортом, и он работает. Однако active.py запускается из python manage.py active. Report.py я просто компилирую/запускаю (не запуская его из python manage.py). Это единственное различие.

структура файла. enter image description here

Пожалуйста, не забудьте добавить __init__.py для каждой папки, в которую вы хотите что-то импортировать.

Больше здесь: https://docs.python.org/3/reference/import.html#regular-packages

Вот грязный хак, который должен решить проблему.

и я также укажу альтернативный вариант, если он подходит для вашего случая использования.

Первый вариант

import sys
sys.path.append(r'c:\Users\Timmeh\source\Python\Django Projects\env\topxgym')

# now your import should work
from members.models import ActiveMember

Это грязно, потому что он манипулирует путями sys, что не является хорошей практикой. Я предполагаю, что этот скрипт - просто отдельный скрипт, который вы хотите запустить, поэтому в целом это не должно быть проблемой.

Второй вариант

Если это возможно, вы можете просто переместить ваш report.py и держать его внутри папки topxgym (на том же уровне, что и requirements.txt)

В этом случае также будет работать тот же оператор import.

побочная заметка

Если вы хотите получить доступ к ORM из отдельного скрипта, похоже, что вам не хватает добавления конфигурации django в скрипт, как рекомендуется в документации.

После того как проблемы с импортом будут устранены одним из двух вышеперечисленных способов, если он работает, то отлично. Если нет, это означает, что вам нужно добавить конфигурацию django.setup() и указать файл настроек.

Вернуться на верх