У меня возникла проблема с импортом приложения в другое приложение в моем проекте django. Я знаю, что на этот вопрос есть вопрос/вопросник, и, поверьте, я прочитал их много, даже некоторые о импорте python.Импорт приложения в проект django
Вот мой проект дерево (я положу настоящее имя папки):
was/ # full path from my computer /home/user/project/was
....was/ #django project created by django-admin startproject 'was'
....manage.py
....artists/ #first app
....migrations/
....templates/
....__init__.py
....other_python_files.py
....crew/ #second app
....migrations/
....templates/
....__init__.py
....some_files.py
....was/ # folder containing settings.py, main urls.py
....__init__.py
Мой первый был проект (/ дом/пользователь/проект/был) содержит virtualenv создает папки (python3.4) ,
Я проверил на своем пути python sys.path
и моей структуре проекта в Pycharm и есть/home/user/project/was.
Когда я делаю это в PyCharm, у меня есть автодополнение работает отлично:
from ..crew.models import MyClass #here i'm in a artists app file
Но я получаю ValueError :attempted relative import beyond top-level package when import app
И теперь тот же сценарий, импортируя класс экипажа в художников приложение, но:
from was.crew.models import MyClass
Autocompletion работает отлично в pycharm, но на этот раз я получил классический ImportError: no name was.crew
.
Я нахожу решение сделать это, добавив следующую строку в моем settings.py:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, os.path.join(BASE_DIR)) # add this line
Обратите внимание, что BASE_DIR
уже существует в настройках. И теперь я могу это сделать:
from crew.models import MyClass
А вот у меня нет ошибки (изменить некоторые параметры в PyCharm иметь AutoCompletion работы).
Это работает, но мне действительно интересно, почему я должен добавить эту строку и почему моя первая попытка не работает.
Я немного потерялся с пакетом, pythonpath и т. Д. (Поэтому я указал в своей схеме все файлы __init__.py
).
Не должно from ..anotherapp.models import Class
отлично работает без сутенерства в настройках.py?
Независимо от того, следует ли мне сохранять свое решение или это нехорошо?
Заранее благодарим за любой ответ.
PS: обратите внимание, что я уже пытался иметь __init__.py
файлов в моей первой и второй папке, без успеха.
ошибка на самом деле срабатывает, когда я запускаю мой сервер и др перейти на локальный хост:. 8000. И да, он должен работать (на самом деле работает в pycharm, он извлекает мои деревья приложений), но django вызывает ошибку. em с virtualenv python lib, помещенным слишком высоко в дерево папок? – Bestasttung
Какое сообщение об ошибке вы получаете? – f43d65
те я wrotte в моем вопросе. Независимо от того, что я удаляю запись из пути python и выполнение app1.models, похоже, работает без моей строки в настройках. Спасибо за Ваш ответ ! – Bestasttung