Как "Мега-учебник Flask" загружает конфигурацию из указанного выше корня пакета? - PullRequest
0 голосов
/ 19 мая 2019

Я имею в виду этот код в Мега-учебник Flask Github Repo

flasky/
    app.py
    config.py
    app/
        __init__.py
        ...
    ...

Есть одна конкретная строка, которую я не могу полностью понять

#__init__.py
...
from config import config
...
def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    ...
...

Как можно импортировать из файла config.py извне корня пакета?

Я нашел Dockerfile со следующей записью

COPY flasky.py config.py boot.sh ./

Что это значит? Эта строка как-то добавляет эти файлы в PATH? Почему бы просто не поместить файл config.py в папку /app?

1 Ответ

1 голос
/ 19 мая 2019

Тот же вопрос задают на Гитхубе, где Мигель отвечает на него: https://github.com/miguelgrinberg/flasky/issues/154#issuecomment-395907521

Цитировать:

Модуль конфигурации найден, поскольку он находится в текущем каталоге. Неважно, откуда он импортирован, полное местоположение этого модуля - просто имя модуля. На самом деле это та же самая причина, по которой вы можете сказать из импорта приложения .... Пакет приложения найден, потому что он находится в текущем каталоге, так же, как config. Надеюсь, это проясняет это.

и далее вниз:

Вы неправильно понимаете, что означает "текущий каталог". Текущий каталог - это концепция операционной системы, каждый процесс имеет каталог, помеченный как текущий каталог. По умолчанию текущим каталогом процесса является каталог, из которого было запущено приложение (но само приложение может изменить это, если оно хочет). В этом случае вы запускаете приложение из каталога колбы, верно? Так что это ваш текущий каталог. Из любых модулей Python вы можете импортировать config и app без проблем, поскольку текущий каталог находится в пути импорта Python.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...