Как импортировать функцию или переменную из дочернего приложения текущего родительского приложения на 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")

Это всегда будет работать, независимо от того, как вы выполняете свой код.

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