Flask приложение печатает переменную среды как объект вместо строки, возвращаемой os.getenv - PullRequest
0 голосов
/ 30 мая 2020

У меня есть следующий фрагмент кода в моем main.py:

import os
from app import create_app
from models import db, bcrypt
if __name__ == '__main__':
    HOST = os.environ.get('SERVER_HOST', 'localhost')
    try:
        PORT = int(os.environ.get('SERVER_PORT', '5555'))
    except ValueError:
        PORT = 5555
    env_name = os.getenv('FLASK_ENV', "Please set FLASK_ENV")
    print("env_name: ", env_name)
    app = create_app(env_name)

Я запускаю его, используя flask run внутри pipenv shell, и натыкаюсь на следующую ошибку в строке, которая выводит env_name. Я пробовал как set FLASK_ENV=development (Windows 10), так и .env, но безрезультатно. Я использую python -3.8.3

(src-4Nvvrxp5) C:\Projects\Python\PythonFlaskRestAPI\src>flask run
 * Serving Flask app "main.py" (lazy loading)
 * Environment: development
 * Debug mode: on
 * Restarting with stat
env_name: <flask.cli.ScriptInfo object at 0x000002D6BA598940>
 * Debugger is active!
 * Debugger PIN: 269-678-937
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Любые советы и идеи приветствуются.

1 Ответ

0 голосов
/ 31 мая 2020

Итак, после дальнейших исследований я смог воспроизвести вашу проблему (в некоторой степени) локально. Как вы можете видеть на изображении ниже.

enter image description here

Теперь это происходит из-за этого абзаца из flask официальной документации :

enter image description here

То, на чем вы хотите сосредоточиться, это:

Если фабрика приложений принимает только один аргумент и отсутствие скобок после имени фабрики, экземпляр ScriptInfo передается как позиционный аргумент.

Таким образом, ошибки не возникает, код работает должным образом.

Теперь, если вас беспокоит тот факт, что команда (set FLASK_ENV = development) не устанавливает его правильно, я хотел бы указать, что она действительно устанавливает его правильно, как показано здесь в вашем OP:

(src-4Nvvrxp5) C:\Projects\Python\PythonFlaskRestAPI\src>flask run
 * Serving Flask app "main.py" (lazy loading)
 * Environment: development
 * Debug mode: on
 * Restarting with stat

Третья строка терминала выше говорит «* Environment: development», тогда как значение по умолчанию согласно документации - «* Environment: production»

Сообщите мне, решило ли это ваше проблемы и вопросы: D. Удачи!

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