У меня есть структура Django, как это (только с указанием ЛИЭС):глобальный/приложение Lib папки импорта в Django
project/lib/ # Global libraries that will be used cross apps
project/lib/global_stuff.py
project/apps/app1/lib/special_for_app1.py
project/apps/app2/lib/special_for_app2.py
Некоторые приложения не имеют Lib папки.
from apps.app1.lib import special_for_app1
работает нормально. Но как я могу импортировать из глобальной папки lib, когда я внутри папки, уже содержащей локальную папку lib?
Изнутри приложений views.py файл на одном из приложений:
from lib import global_stuff
дает мне ImportError: cannot import name global_stuff
из .lib импорта global_stuff
дает мне ImportError: cannot import name global_stuff
from ..lib import global_stuff
дает мне ImportError: No module named lib
from ...lib import global_stuff
дает мне ValueError: Attempted relative import beyond toplevel package
from project.lib import global_stuff
Работает, но я действительно не хочу быть застрял с использованием самого названия проекта в им порт.
Есть ли способ решить это, не используя имя проекта в импорте или изменить целую идею lib.
Или есть ли другая хорошая практика для хранения основной части кода?
Вы уверены, что в каждом каталоге есть '__init __. Py'? Вы помещаете «/ path/to/project» в свой PYTHONPATH? – rantanplan
Да, в каждом каталоге есть __init__.py, а первая запись в sys.path - это каталог проекта. – xeor