最近在重構 flask 項目的時候發現項目的環境變量異常的混亂,非常不便于管理。而且,更重要的事情是我需要通過自定義命令來運行 devlopment 和 production 兩種項目環境。
自定義命令工具——flask-cli
在Flask 1.0+ 中已經支持了flask-cli,在翻閱了flask-cli文檔之后,發現文檔中提供的自定義命令的方法約束還是有點多,而且介紹的也不是特別詳細。后來,通過查看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
在使用flask-cli的時候,為了不需要每次都在 flask run 之前都引入環境變量。官方文檔中提了 python-dotenv ,需要在項目中創建 .env 和 .flaskenv 兩個文件。
命令行設置的變量會重載 .env 中的變量, .env 中的變量會重載 .flaskenv 中的變量。 .flaskenv 應當用于公共變量,如 FLASK_APP 而 .env 則應用用于私有變量,并且不提交到儲存庫。
在使用 python-dotenv 之前還需要通過 pip 去安裝依賴包(我這里使用的 pipenv ):
pipenv install python-dotenv
在 .env 文件中一般寫一些私有變量或者是涉及到隱私的變量,即使不上傳到 git 上也不影響程序運行的這種。
下面以 .flaskenv 中的幾個變量為例:
1
2
3
4
5
|
# .flaskenv FLASK_APP = "app" FLASK_ENV = "development" FLASK_RUN_HOST = '0.0.0.0' FLASK_RUN_PORT = '5000' |
讀取環境變量
這里介紹如何在項目讀取變量的方法:
1
2
3
4
5
6
7
|
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) |
自定義命令
這里我的項目的入口文件為 app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# 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() |
運行代碼:
1
2
3
4
5
6
|
# 開發環境 python app.py 或者 python app.py - - dev = development # 生產環境 python app.py - - dev = production |
目前,第一階段就做了這么多,其中還有很多不足之處,希望大家幫忙提出點意見,后續我有更多的做法,也會第一時間更新這些內容。
總結
以上所述是小編給大家介紹的在flask中使用python-dotenv+flask-cli自定義命令,希望對大家有所幫助!
原文鏈接:https://juejin.im/post/5e0f58605188253aa83e29e0