Error: Could not locate a Flask application. You did not provide the «FLASK_APP» environment variable, and a «wsgi.py» or «app.py» module was not found in the current directory.
I am facing this error for flask run
.
Gino Mempin
23.1k27 gold badges91 silver badges120 bronze badges
asked Mar 14, 2021 at 17:19
4
I have the same issue, setting environment variable using
$env:FLASK_APP="base.py"
then
flask run
This worked for me. This works for flask db init
also
answered Apr 11, 2021 at 4:41
Before executing flask run
, you need to specify the flask application file by executing
export FLASK_APP=[YOUR_APP_FILE].py
(Note: make sure your application file is in the root directory)
You can create a file named .flaskenv
in your project root directory so you don’t have to type in the above command every time to run your application — flask would automatically look for this file.
Quote from docs:
If python-dotenv is installed, running the flask command will set environment variables defined in the files .env and .flaskenv. This can be used to avoid having to set FLASK_APP manually every time you open a new terminal, and to set configuration using environment variables similar to how some deployment services work.
-
If you haven’t installed
python-dotenv
, runpip install python-dotenv
-
Create your .flaskenv file in the root directory and populate it with:
FLASK_APP=[YOUR_APP_FILE].py
After that you can safely execute flask run
answered Apr 11, 2021 at 4:49
ParzivalParzival
1,8484 gold badges12 silver badges27 bronze badges
For pycharm windows run these line on the terminal:
- set FLASK_APP=main.py
- $env:FLASK_APP = «main.py»
- flask run
This works for me.
answered Oct 18, 2022 at 17:15
For individuals using powershell:
Copy below into your terminal:
$env:FLASK_APP = "hello.py"
Then run:
flask run
answered Nov 22, 2022 at 1:53
In general this means flask can’t find your flask app. This happens when, as the error message indicates, the environment doesn’t contain information about FLASK_APP
(e.g. FLASK_APP=»website» for website.py). You can either fix this by setting the environment variable or by using python directly.
For the environment variable could approach this with (for website.py): FLASK_APP="website" flask run
. For windows see the comment by Sync.
When using python you should rely on __name__
and app.run() for a development server. After adding the bottom part you may be able to call the script directly with python3
:
from flask import Flask
app = Flask(__name__)
if __name__ == "__main__":
app.run()
the
if
clause ensure thatapp.run()
is only called when executing the script directly and not when importingapp
from e.g. another script.
NOTE: It’s hard to help you without an MRE.
answered Mar 14, 2021 at 17:32
CobaltCobalt
4475 silver badges9 bronze badges
All suggestions above didn’t work for me I added the lines below and worked perfectly:
if name == «main«:
app.run()
answered Sep 2, 2022 at 9:19
I also have the same issue…
I typed in the terminal next:
$env:FLASK_APP="YOUR FULL PATH to the file"
like this:
$env:FLASK_APP = "C:UsersM...D...project...hello_fhello.py"
answered Jun 29, 2022 at 15:42
I had the same problem, stumbled upon this solution on Flask documentation:
$env:FLASK_APP = «hello.py» instead of «set FLASK_APP=hello.py», that is if your terminal is Windows Powershell.
https://flask.palletsprojects.com/en/1.1.x/quickstart/
Let me know if that helps.
answered Sep 21, 2022 at 15:20
Rename the main.py file into app.py and then run
$ flask db init
answered Nov 1, 2022 at 7:28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.
Already on GitHub?
Sign in
to your account
Assignees
Comments
gchristofferson
changed the title
Error: Could not locate a Flask application. You did not provide the «FLASK_APP» environment variable, and a «wsgi.py» or «app.py» module was not found in the current directory.
Error: Could not locate a Flask application.
Sep 27, 2018
Under Powershell, you have to set the FLASK_APP environment variable as follows:
$env:FLASK_APP = «webapp»
Then you should be able to run «python -m flask run» inside the hello_app folder. In other words, PowerShell manages environment variables differently, so the standard command-line «set FLASK_APP=webapp» won’t work.
Let me know if that solves your problem.
mohammed-muzzammil, ihamza494, takavarasha-desire, bedaprakashmallick, kashish-2000, akash0802kgp, emmanuelani, GautamPatil26, vivianyzhu0103, and ahzi-pav reacted with hooray emoji
harshawije-dev, Blmppes, SrikarKSV, ssanga, Abrantedr, chinmay9767, Thorzila, PawelS96, luisferpinilla, rafaelcb21, and 21 more reacted with heart emoji
Yes that worked. Thank you!
…
On Thu, Sep 27, 2018, 9:18 AM Kraig Brockschmidt ***@***.***> wrote:
Under Powershell, you have to set the FLASK_APP environment variable as
follows:
$env:FLASK_APP = «webapp»
Then you should be able to run «python -m flask run» inside the hello_app
folder. In other words, PowerShell manages environment variables
differently, so the standard command-line «set FLASK_APP=webapp» won’t work.
Let me know if that solves your problem.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#1881 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AYCluBoxxhC4DAeU3y-y5S-B3hNE_J2eks5ufPpzgaJpZM4W7uOq>
.
Great! Thanks for filing the issue, too; it’s not quite a detail I want to put in the docs proper, so having the issue here allows folks to find the solution if they run into the same problem.
Under Powershell, you have to set the FLASK_APP environment variable as follows:
$env:FLASK_APP = «webapp»
Then you should be able to run «python -m flask run» inside the hello_app folder. In other words, PowerShell manages environment variables differently, so the standard command-line «set FLASK_APP=webapp» won’t work.
Let me know if that solves your problem.
Thanks i had the same problem and that worked!!
Under Powershell, you have to set the FLASK_APP environment variable as follows:
$env:FLASK_APP = «webapp»
Then you should be able to run «python -m flask run» inside the hello_app folder. In other words, PowerShell manages environment variables differently, so the standard command-line «set FLASK_APP=webapp» won’t work.
Let me know if that solves your problem.
I am facing this issue in Anaconda prompt? can you help me with the solution ?
Under Powershell, you have to set the FLASK_APP environment variable as follows:
$env:FLASK_APP = «webapp»
Then you should be able to run «python -m flask run» inside the hello_app folder. In other words, PowerShell manages environment variables differently, so the standard command-line «set FLASK_APP=webapp» won’t work.
Let me know if that solves your problem.I am facing this issue in Anaconda prompt? can you help me with the solution ?
Have you solved it?
Error: Could not locate a Flask application. You did not provide the «FLASK_APP» environment variable, and a «wsgi.py» or «app.py» module was not found in the current directory.
For others try export FLASK_APP=hello.py
the name of your entry file being whatever you called it export FLASK_APP=app.py
, export FLASK_APP=this.py
upto you.
renantescaro and YashMarmat reacted with hooray emoji
DinaTaklit, mudittripathi, reviloera, mohinidas2017, Mugambi-Ian, renantescaro, Ikaneng, and moonjun-chung reacted with heart emoji
renantescaro and deyemiobaa reacted with rocket emoji
For others try
export FLASK_APP=hello.py
the name of your entry file being whatever you called itexport FLASK_APP=app.py
,export FLASK_APP=this.py
upto you.
Thank you this solved the issue for me
Under Powershell, you have to set the FLASK_APP environment variable as follows:
$env:FLASK_APP = «webapp»
Then you should be able to run «python -m flask run» inside the hello_app folder. In other words, PowerShell manages environment variables differently, so the standard command-line «set FLASK_APP=webapp» won’t work.
Let me know if that solves your problem.
This work for me, thanks!!!
@JoshuaPartlow just a reminder note to check the VS Code docs and make sure the PowerShell variant reported here is included.
Set-Location C:UserstruewPycharmProjectsmilanwebserver
(webserver) PS C:UserstruewPycharmProjectsmilanwebserver> flask run
- Serving Flask app «webapp»
- Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead. - Debug mode: off
Usage: flask run [OPTIONS]
Error: Could not import «webapp».
I’m a new in python flask and using pycharm how to run 1st output on the web browser..where to run and how to run the commands.
its showing me this if i write «flask run» in terminal ! ?
Error: Could not locate a Flask application. You did not provide the «FLASK_APP» environment variable, and a «wsgi.py» or «app.py» module was not found in the curren
t directory.
thank you it worked for me
Error: Could not locate a Flask application. You did not provide the «FLASK_APP» environment variable, and a «wsgi.py» or «app.py» module was not found in the current directory.
…..I can not solve this error @kraigb
Hi @Mohamedkable — What filename are you using for your Flask app? By default, a Flask looks for app.py, if you use something different then you need to set a FLASK_APP environment variable with the alternate filename. So if you used hello.py as your file, on Windows, and were running in the terminal you’d need to use «set FLASK_APP=hello.py». Where are you trying to run the Flask app from? There’s some alternate guidance above from @kraigb if you’re using PowerShell. The Flask cli docs also have some guidance. Does that help?
@JoshuaPartlow I do that already, but i do now work also..i run the code from Git Bash on windows
I’ve not tried running from Git Bash before, but you should be able to do «echo $FLASK_APP» to verify if the variable has been set correctly.
Thanks,sir
I write this code in my app that is run well but if i change the port to 5000.it do not work…
i do not know why..? @JoshuaPartlow
if name == ‘main‘:
app.run(port=4000,debug=True)
Hi @Mohamedkable — The help I can offer is around the VS Code docs for our Flask tutorial. For general Flask issues I’d suggest looking at the documentation for Flask.
adding «python_dotenv» solved my issue in pycharm
For others try
export FLASK_APP=hello.py
the name of your entry file being whatever you called itexport FLASK_APP=app.py
,export FLASK_APP=this.py
upto you.
This worked for me!
@Dharanya-Subramanian — So, to clarify, the app is running in the VS Code console, but you can’t get it to run from a standard windows cmd window?
@Dharanya-Subramanian — So, to clarify, the app is running in the VS Code console, but you can’t get it to run from a standard windows cmd window?
Yes Sir
@Dharanya-Subramanian — If that’s the case, you likely just need to create an environment variable in your cmd window prior to running. By default, Flask looks for app.py, if you use something different (like hello.py) for your filename then you need to set a FLASK_APP environment variable with the alternate filename. So if you used hello.py as your file, on Windows, and were running in the cmd window you’d need to use set FLASK_APP=hello.py
. The Flask cli docs also have some guidance.
@JoshuaPartlow i was set the environment. set the FLASK_APP and FLASK_ENV both. but still get this error «Could not locate a Flask application. You did not provide the «FLASK_APP» environment variable, and a «wsgi.py» or «app.py» module was not found in the current directory.» let me now how to solve this
$env:FLASK_APP = «file.py» works like charm in VS code, thanks for the help
Hi @raeesanjum010 — Are you working through the VS Code Flask tutorial? If you are, generally the solution to that error is to make sure you’ve explicitly set the FLASK_APP environment variable to the correct file name if you haven’t used the default app.py
name. If you’re not working on the tutorial, you might want to take a look at the Flask CLI documentation and Flask docs.
Under Powershell, you have to set the FLASK_APP environment variable as follows:
$env:FLASK_APP = «webapp»
Then you should be able to run «python -m flask run» inside the hello_app folder. In other words, PowerShell manages environment variables differently, so the standard command-line «set FLASK_APP=webapp» won’t work.
Let me know if that solves your problem.I am facing this issue in Anaconda prompt? can you help me with the solution ?
after getting into directory run dir and then use traditional command set FLASK_APP = hello.py
For others try
export FLASK_APP=hello.py
the name of your entry file being whatever you called itexport FLASK_APP=app.py
,export FLASK_APP=this.py
upto you.
this one is work for me
if you are using window
set FLASK-APP=hello
flask run
it works for me
I had to move the file from the subfolder that i put it to the location from the VENV folder, or the Flask could’t catch the file.
How do i set the rute for the envierment to the FLASK_APP ?
Tnks.
Hello
Can I saw your code, or terminal, I will help you with zoom, slack or
telegram
…
This error happens when flask run
command is run before setting The FLASK_APP environment variable.
How to reproduce the error:
mkdir flask_test
cd flask_test
pipenv shell
pipenv install Flask
Then write the following code inside the flask_test directory and save it as hello_flask.py
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run()
Then run the following command:
flask run
The error:
* Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off Usage: flask run [OPTIONS] Try 'flask run --help' for help. Error: Could not locate a Flask application. You did not provide the "FLASK_APP" environment variable, and a "wsgi.py" or "app.py" module was not found in the current directory.
How to fix it:
The flask
command must be told where to find your application in order to use it. The FLASK_APP
environment variable is used to specify how to load the application.
To set the FLASK_APP environment run the following command.
- On Powershell
$env:FLASK_APP = "hello_flask"
- CMD
set FLASK_APP=hello
- On Bash
export FLASK_APP=hello
Then finally the command flask run
can run normally.
Output:
* Serving Flask app 'hello_flask' (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
1. Problem description
When flask initializes the database file, execute flask init-db to report Error: Could not locate a Flask application. Use the ‘flask –app’ option, ‘FLASK_APP’ environment variable, or a ‘wsgi.py’ or ‘app.py’ file in the current directory, the specific error screenshot is as follows:
2. Problem solving
This problem is really annoying. I can’t find the corresponding solution on Baidu. The official document about the flask initialization database is also very vague. I wrote an execution command directly, so I don’t understand it very well, so I do it when initializing the database. The operation is:
1. Shut down the previously started server, open a new terminal and execute the following command:
1 2 3 |
|
2. Open another terminal and cd to the package directory to execute the flask inti-db command, and the above error is reported. Obviously this is the wrong step.
3. Solutions
After thinking about this problem for a long time, I want to understand where I am wrong. The correct execution steps should be:
1. Execute the following command
1 2 3 |
|
2. After the execution is successful, a flaskr.sqlite file will be created in the instance folder. The actual result is shown as follows:
Read More:
Нажмите выше «Школа программирования«, выберите как»Установить звезду”
Качественные изделия с доставкой немедленно!
Автор: Ли Хуэй, веб-разработчик
Источник: greyli.com
Строго говоря, это не ошибка, а конструкция, которая легко может привести к ошибкам.
Конкретное поведение заключается в том, что если вы установите python-dotenv и создадите файл .env или .flaskenv в верхнем каталоге программы Flask, вы не сможете успешно выполнять такие команды, как запуск flask, потому что это приведет к сбою Flask. чтобы найти соответствующий пример программы Flask.
Эта проблема существует с тех пор, как Flask представила механизм CLI, и она беспокоила меня в течение двух лет. За 18 лет я случайно создал файл .env в корневом каталоге пользователя и обнаружил, что программа Flask не может работать. В то время было слишком много различных ошибок, и я не тщательно рассмотрел взаимосвязь между ними. Позже, после нескольких тестов, было определено, что это было вызвано файлами .env и .flaskenv в верхнем каталоге, но причина не была обнаружена некоторое время, и она была временно устранена. До 19 ноября на расследование ушло несколько часов, но причины так и не нашли.
Потребовалось много времени, чтобы отследить специфичную для Windows ошибку Flask (TypeError: окружение может содержать только строки), что действительно пугает. Поскольку интерфейс командной строки Flask включает в себя слишком много вещей, иногда вам нужно углубиться в python-dotenv (# 101) и Werkzeug (# 1320), чтобы найти причину проблемы.
Но если проблема не будет решена, вы никогда не будете спать спокойно. Все примеры программ из первой части «Flask Web Development Actual Combat» помещаются в репозиторий программ, и все они помещаются в подкаталоги, что означает, что если читатели по ошибке создают файлы .env и .flaskenv в корневом каталоге хранилища , это приведет к невозможности запуска шести программ-примеров в подкаталоге. До и после было получено около 6 связанных отзывов читателей. Хотя на веб-сайт было добавлено напоминание, а в переизданную книгу — напоминание о создании файла .env / .flaskenv, это не решило проблему после все, и всегда будет кто-то Вы можете пропустить все советы идеально.
Если каждый может отметить место ошибки в книге и поделиться им, тогда на этой странице должно быть много маленьких красных крестиков (см. «Производство Super Mario», возможно, в какой-то платформе для электронных книг эта функция будет реализована в будущем: P) .
Несколько дней назад, учитывая напоминание об этой проблеме, потребовалось еще два часа, чтобы исследовать и наконец найти причину на этот раз. С добавлением PR (# 3560) и Issue (# 3561) потребовалось в общей сложности 8 часов в течение двух лет, и эта проблема наконец решилась. Если не неожиданно, ожидается, что он будет обновлен в следующей версии Flask. Вот конкретные причины.
Я думал, что эта проблема связана с python-dotenv или Werkzeug, но я не ожидал, что это просто проблема с кодом самого Flask. Я был слишком глуп. Эту проблему можно было решить раньше.
В соответствии с предопределенным поведением, когда установлен python-dotenv, Flask автоматически загружает переменные среды в .env и .flaskenv. Когда python-dotenv ищет файлы, в которых хранятся переменные среды, он ищет вверх от текущего каталога и возвращает соответствующий путь к файлу, если он найден. Но в это время, если Flask обнаружит, что каталог, в котором находится .env или .flaskenv, не является текущим каталогом, он переключит текущий рабочий каталог на каталог, в котором расположены .env и .flaskenv (связанный исходный код). И если ваш программный модуль или пакет не находится в том же каталоге, что и .env / .flaskenv, экземпляр программы не будет найден.
Для воспроизведения выполните следующие действия:
$ git clone https://github.com/greyli/flask-env-test
$ cd flask-env-test
$ pip install -r requirements.txt # or just pip install flask[dotenv]
$ cd hello
$ flask run
Файловая структура примера проекта следующая:
- flask-env-test
- .env
- hello
- app.py
Когда вы сохраняете программу в файле app.py как пример программы, запустите flask run, и вы увидите следующую ошибку:
$ flask run
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
Usage: flask run [OPTIONS]
Error: Could not locate a Flask application. You did not provide the "FLASK_APP" environment variable, and a "wsgi.py" or "app.py" module was not found in the current directory.
Если вы используете FLASK_APP для указания пути импорта программы, ошибка, вероятно, будет такой:
$ flask run
* Serving Flask app "myapp"
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
Usage: flask run [OPTIONS]
Error: Could not import "myapp".
Ссылки по теме
-
https://github.com/greyli/helloflask/issues/200
-
https://github.com/pallets/flask/issues/3561
-
https://github.com/pallets/flask/pull/3560
Выпущена стабильная версия PyCharm 2020.1
pip install претерпит серьезные изменения в этом году!
Набор библиотек инструментов, настоятельно рекомендуемых после входа в Python
Актуальный бой: Flask + Vue генерируют красивое облако слов
Github популярен, программисты хотят получить высокооплачиваемые предложения, чтобы проверить его
Ответьте на "ключевые слова" ниже, чтобы получить качественные ресурсы
Ответьте на ключевое слово "pybook03", чтобы немедленно получить электронную версию "Think Python 2e", переведенную домашней страницей и друзьями.
Ответьте на ключевое слово "Introduction", чтобы сразу получить электронную версию 10 вводных книг по Python, собранных на домашней странице.
Ответьте на ключевое слово "m", чтобы сразу получить подборку избранных высококачественных статей на Python.
Ответьте на ключевое слово "номер книги", замените номер цифрой от 0 и выше, есть сюрпризы и подарки ~
Заглавное изображение: pexels, авторизовано CC0.
Хорошая статья, читаю ❤️
Reproducing the problem, and fixing it
Hello, I have reproduced the problemThis is the error code:
Error: Failed to find Flask application or factory in module»src.app». Use «FLASK_APP=src.app:name to specify one.
Steps of reproducing the error:
- Create a file called app.py
- inside app.py put this code:
from flask import Flaskdef create_app(): app = Flask("abc") @app.route('/') def hello_world(): return 'Hello, World!'
Or let the file be empty, like this:
# This is an empty file# There is no flask application here
- Inside CLI run these commands:
export FLASK_APP=app.pyflask run
- watch the error appear on the screen
Solution 1 :
- make the function return the app
- Clearly create a variable called app and make it equal to the return value of the function, like this:
from flask import Flaskdef create_app(): app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!' return appapp = create_app()
Solution 2: Get the app outside of the function:
from flask import Flaskapp = Flask("abc")@app.route('/')def hello_world(): return 'Hello, World!'
С появлением интерфейса командной строки Flask, одна из самых раздражающих вещей, которые вы должны делать во время разработки, — это устанавливать переменные среды каждый раз, когда вы работаете над своим приложением, а именно FLASK_ENV
и FLASK_APP
. Но, у Flask есть способ справиться с этими вещами так, чтобы сделать это только один раз. И с помощью той же функциональности вы также можете добавить другие переменные окружения для вашего проекта. В этой статье я покажу вам, как использовать python-dotenv для загрузки переменных окружения, готовых к работе при каждом запуске приложения.
Единственный пакет, который заставляет все это работать — это python-dotenv
Что мы будем строить
Я собираюсь продемонстрировать, как это работает, через очень простое приложение Flask.
Давайте начнем с создания каталогов и пустых файлов, которые нам понадобятся. Вот так будет выглядеть наш каталог проекта:
demo/__init__.py
demo/settings.py
.env
.flaskenv
run.py
Это приложение не будет делать ничего особенного. Оно просто покажет нам, какие значения конфигурации у нас есть.
Настройка проекта
Для начала в командной строке создайте новую виртуальную среду и установите flask
и python-dotenv
. Я использую pipenv, так что я могу сделать все это за один шаг:
pipenv install flask python-dotenv
pipenv shell
Затем в demo/__ init__.py
нам нужно будет создать основы приложения Flask, что означает импорт Flask
, создание фабричной функции приложения (create_app
) и создание экземпляра Flask. Вот код, чтобы сделать это.
demo/__init__.py
from flask import Flask
def create_app():
app = Flask(__name__)
return app
Если вы уже работали с Flask, то вы точно знаете, как это работает.
Далее, давайте добавим простой маршрут, чтобы мы знали, что наше приложение действительно работает.
demo/__init__.py
from flask import Flask
def create_app():
app = Flask(__name__)
@app.route('/')
def index():
return 'Hey There!
'
return app
Добавление переменой окружения FLASK_APP
Как только мы это сделаем, мы можем использовать интерфейс командной строки Flask для запуска приложения. Чтобы запустить приложение, используйте следующую команду, находясь в корневом каталоге вашего проекта.
Но когда мы выполним эту команду, мы получаем ошибку!
Error: Could not locate a Flask application. You did not provide the "FLASK_APP" environment variable, and a "wsgi.py" or "app.py" module was not found in the current directory.
Это распространенная ошибка. Обычно, чтобы это исправить, мы экспортируем переменную окружения FLASK_APP, которая будет равна имени каталога нашего приложения, например:
Но поскольку мы используем python-dotenv
и хотим избежать неудобств, связанных с использованием командной строки, мы получим эту загрузку автоматически, поместив ее в один из наших дот файлов.
У нас есть два дот файла: .env
и .flaskenv
. Мы хотим использовать .flaskenv
для любых команд конфигурации Flask CLI и использовать .env
для конфигурации нашего приложения.
Мы поместим нашу переменную среды FLASK_APP в файл .flaskenv
.
Теперь, когда мы добавили эту строку, давайте попробуем снова запустить приложение.
И откроем в браузере localhost:5000 или 127.0.0.1:5000, чтобы увидеть результат.
Обратите внимание на сообщение, которое появляется в командной строке, в котором говорится, что мы в режиме отладки.
Теперь, если мы прекратим работу над этим проектом и вернемся позже, все, что нам нужно сделать, — это запустить Flask и приложение запустится без необходимости повторного указания своего местоположения.
Параметры Flask CLI
Допустим, мы хотим изменить некоторые другие параметры Flask CLI, мы можем поместить их в наш файл .flaskenv
.
Вот несколько вариантов:
FLASK_ENV
— контролирует окружающую среду.FLASK_DEBUG
— включает режим отладки.FLASK_RUN_EXTRA_FILES
— Список файлов, которые будут просматриваться перегрузчиком в дополнение к модулям Python.FLASK_RUN_HOST
— хост, с которым вы хотите связать свое приложение.FLASK_RUN_PORT
— Порт, который вы хотите использовать.FLASK_RUN_CERT
— файл сертификата, чтобы ваше приложение могло работать с HTTPS.FLASK_RUN_KEY
— ключевой файл для вашего сертификата.
Я думаю, что наиболее распространенными из них являются FLASK_ENV
, FLASK_RUN_PORT
и FLASK_RUN_EXTRA_FILES
, поэтому я создам примеры с ними здесь.
Давайте начнем с FLASK_ENV
. По умолчанию это «production», которое не делает ничего заметного. Суть среды в том, что вы можете решить, какие действия предпринять в приложении, в зависимости от среды. Например, вы можете сделать что-то вроде создания библиотеки Sentry для регистрации ошибок, когда вы в production, а не в development.
Если вы измените свой FLASK_ENV
на development, самое большое изменение, которое вы увидите, это то, что reloader начинает работать, и ваше приложение переводится в режим отладки. Итак, давайте установим это значение в нашем файле .flaskenv
.
.flaskenv
FLASK_APP=demo
FLASK_ENV=development
Давайте остановим сервер и снова запустим наше приложение.
Обратите внимание, как сообщение меняется сейчас.
Давайте добавим еще один для порта.
.flaskenv
FLASK_APP=demo
FLASK_ENV=development
FLASK_RUN_PORT=8080
После перезапуска мы должны получить доступ к нашему сайту через порт 8080:
Что если мы не хотим останавливать и перезапускать наше приложение, когда мы изменяем не-py-файлы в нашем проекте? Мы можем использовать FLASK_RUN_EXTRA_FILES для этого. Например, чтобы посмотреть файлы с именами config.yml и README.md
FLASK_RUN_EXTRA_FILES=config.yml:README.md
(Если вы используете Windows, вам нужно использовать точку с запятой (;) вместо двоеточия (:) для разделения нескольких файлов)
Добавляем .env
Теперь, когда мы поработали с .flaskenv
, давайте перейдем к добавлению переменных в файл .env
. Мы будем использовать их в нашем приложении.
Одно из преимуществ наличия .env
для хранения переменных среды нашего приложения заключается в том, что мы можем легко иметь несколько версий файла для каждого места, где мы запускаем наше приложение. Например, у нас может быть один для нашей локальной машины, один для промежуточной среды, один для production и т.д.
Давайте добавим два:
.env
SECRET_KEY=topsecretkey
API_KEY=donotsharethisapikeywithanyone
В отличие от значений, добавленных перед FLASK_ в нашем файле .flaskenv, переменные в .env не предназначены для автоматической загрузки в CLI. Вместо этого нам нужно загрузить их в наше приложение. Для этого мы будем использовать файл settings.py.
Внутри файла settings.py давайте импортируем среду из ОС, чтобы у нас был доступ к переменным среды.
demo/settings.py
from os import environ
Далее нам нужно присвоить эти переменные окружения переменным Python, а затем мы загрузим их в наше приложение.
demo/settings.py
from os import environ
SECRET_KEY = environ.get('SECRET_KEY')
API_KEY = environ.get('API_KEY')
Далее, давайте добавим конфигурацию из этого файла в наш __init__.py.
demo/__init__.py
from flask import Flask
def create_app():
app = Flask(__name__)
app.config.from_pyfile('settings.py')
@app.route('/')
def index():
return 'Hey There!
'
return app
Теперь наши переменные окружения готовы к использованию. В случае SECRET_KEY, обычно некоторые расширения Flask, которые мы используем, подхватывают это и используют его автоматически. Для API_KEY нам нужно использовать это непосредственно в нашем коде.
В нашем коде мы просто отобразим API_KEY на нашем маршруте.
demo/__init__.py
from flask import Flask
def create_app():
app = Flask(__name__)
app.config.from_pyfile('settings.py')
@app.route('/')
def index():
return f'API_KEY = { app.config.get("API_KEY") }'
return app
Работа в production
Если вы хотите использовать ваши файлы .dotenv
в рабочей среде, вам нужно внести небольшое изменение, поскольку вы не будете использовать интерфейс командной строки Flask на рабочем сервере.
Если вы хотите увидеть эту работу, вы можете установить gunicorn, чтобы вам не приходилось использовать сервер разработки для Flask.
Нам нужно создать файл, в котором gunicorn сможет найти объект приложения. Для этого мы создадим run.py. Давайте начнем со стандартного кода, который не загружает переменные среды, который состоит всего из двух строк.
run.py
from demo import create_app
app = create_app()
gunicorn run:app
Это должно работать на порту 8000 по умолчанию. Если вы перейдете в браузер, вы увидите, что значением API_KEY является None.
Это потому, что переменные окружения больше не загружаются для нас. Чтобы загрузить их, нам нужно использовать функцию load_dotenv
из python-dotenv
. Нам нужно добавить еще две строки кода:
run.py
from demo import create_app
from dotenv import load_dotenv
load_dotenv('.env') #the path to your .env file (or any other file of environment variables you want to load)
app = create_app()
Теперь, если мы снова запустим сервер с gunicorn
, мы увидим наше значение API_KEY.