Flask 集成 python-dotenv 与 flask-cli 实现环境管理与自定义命令

Mia
Mia
发布时间:2026-10-14| 2人浏览过
原创

本文详解如何在 Flask 项目中结合 python-dotenv 与 flask-cli 进行环境配置与命令扩展。通过 .flaskenv 和 .env 文件分离公共与私有变量,利用 Click 库创建支持多环境(开发/生产)切换的自定义运行命令,解决环境变量混乱及启动配置繁琐问题。

Flask 环境管理与自定义命令背景

近期在重构 Flask 项目时,发现环境变量配置混乱,管理难度较大。更关键的需求是,需要通过自定义命令来区分并运行 development(开发)和 production(生产)两种不同的项目环境。

自定义命令工具——flask-cli

flask-cli 与 Click 基础

Flask 1.0 及以上版本已内置支持 flask-cli。查阅官方文档后发现,其提供的自定义命令方法存在较多约束,且说明不够详尽。进一步查看 flask-cli 源码可知,该工具基于 Click 库开发。

Click is a Python package for creating beautiful command line interfaces in a composable way with as little code as necessary. It's the “Command Line Interface Creation Kit”. It's highly configurable but comes with sensible defaults out of the box.

Click 是一个 Python 包,旨在以组合方式、用最少代码创建美观的命令行界面。它是一个高度可配置但自带合理默认值的命令行接口创建工具包。

python-dotenv 环境变量管理

管理环境变量——python-dotenv

在使用 flask-cli 时,为了避免每次执行 flask run 前手动引入环境变量,官方文档推荐结合 python-dotenv 使用。具体做法是在项目中创建 .env 和 .flaskenv 两个配置文件。

命令行设置的变量优先级高于 .env 文件中的变量,而 .env 文件中的变量优先级高于 .flaskenv 文件。建议将 FLASK_APP 等公共变量放在 .flaskenv 中,而将私有变量放入 .env 文件,且 .env 文件不应提交至代码仓库。

在使用 python-dotenv 之前,需通过 pip 安装依赖包(此处示例使用 pipenv):

pipenv install python-dotenv

.env 文件通常用于存储私有变量或涉及隐私的信息,即使不提交到 Git 仓库也不影响程序正常运行。

以下以 .flaskenv 文件中的部分变量为例进行说明:


# .flaskenv
FLASK_APP = "app"
FLASK_ENV = "development"
FLASK_RUN_HOST = '0.0.0.0'
FLASK_RUN_PORT = '5000'

读取环境变量

此处介绍在项目中读取环境变量的具体方法:


import os
from dotenv import load_dotenv
# 加载环境变量文件,dotenv_path默认值为.env,override是表示是否可以重载,默认值为False
load_dotenv(dotenv_path='.flaskenv',override=True)
# 读取环境变量 FLASK_ENV,通过os.getenv()方法中引入字段名称来读取
env = os.getenv("FLASK_ENV")
print(env)

基于 Click 的自定义命令实现

自定义命令

本示例中项目的入口文件为 app.py。


# app.py
import click
import os
from os.path import dirname,join
from dotenv import load_dotenv
# 加载变量文件
load_dotenv(dotenv_path='.flaskenv')

'''
下面这一段代码是根据在命令行中传入的dev的值来执行不同的命令,从而达到一个命令区分开发环境和生产环境
'''
@click.command()
@click.option('--dev', default=os.getenv("FLASK_ENV"),help='environment variable')
def runserver(dev):
 os.system("FLASK_ENV=%s flask run" % (dev))

if __name__ == '__main__':
 runserver()

运行代码示例如下:


# 开发环境
python app.py
或者
python app.py --dev=development
# 生产环境
python app.py --dev=production

目前第一阶段仅完成上述内容,其中仍有诸多不足,欢迎提出建议。后续如有更多实践方案,将及时更新。

总结

以上介绍了在 Flask 中使用 python-dotenv 结合 flask-cli 实现自定义命令的方法,希望能对大家有所帮助。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。