Как импортировать функцию или переменную из дочернего приложения текущего родительского приложения на 5 уровней выше текущего приложения в Django?
Я хочу импортировать некоторые функции и переменные константы с 5 уровней выше текущего приложения Django.
Моя проблема в том, что пакет, из которого я хочу импортировать, находится вне приложения Django, поэтому Django не знает о нем.
структура проекта:
├── lawcrawler
│ ├── get_all_amended_laws_urls.py # import a function from this file
│ ├── lawcrawler
│ │ └── spiders
│ │ └── settings.py # import variables from this file
│ │
├── project
│ ├── apps
│ │ ├── laws
│ │ ├── management
│ │ ├── commands
│ │ ├── add_list_of_amended_laws.py # import function and variables to this file
│ ├── manage.py
Я пробовал относительный импорт вот так:
from .......lawcrawler.lawcrawler.spiders.settings import SPARQL_ENDPOINT, AMENDED_URL_FILE_PATH, get_law_amendment_query
и это:
from .....lawcrawler import get_all_amended_urls
но получил эту ошибку :
ImportError: attempted relative import with no known parent package
Как импортировать функции и переменные или решить эту проблему?
В прошлом у меня были подобные проблемы, потому что Python не позволяет относительный импорт в сценариях. Они работают, только если вы запускаете модуль. Поэтому я создал новую библиотеку импорта: ultraimport, которая дает программисту больше контроля над импортом.
Он позволяет выполнять импорт на основе файловой системы с относительными или абсолютными путями. Ваш add_list_of_amended_laws.py может выглядеть следующим образом:
import ultraimport
SPARQL_ENDPOINT, AMENDED_URL_FILE_PATH, get_law_amendment_query = ultraimport("__dir__/../../../../../lawcrawler/lawcrawler/spiders/settings.py", "SPARQL_ENDPOINT, AMENDED_URL_FILE_PATH, get_law_amendment_query")
Это всегда будет работать, независимо от того, как вы выполняете свой код.