VS 代码不强制执行环境变量

问题描述 投票:0回答:1

所以我有这个 Web 应用程序为数据库运行 Flask、React 和 sqlalchemy。我现在正在准备托管,因此我正在设置不同的环境变量(开发、测试、生产)进行测试。但是当我在 VS code 的命令 shell 中设置环境变量时

set FLASK_ENV=development
set FLASK_APP=run.py

我收到此错误:

FLASK_ENV is set to: None
Traceback (most recent call last):
  File "C:\...\Python\Hacklab-sem-1\remoire\run.py", line 5, in <module>
    app = create_app()
          ^^^^^^^^^^^^
  File "C:\...\Python\Hacklab-sem-1\remoire\app\__init__.py", line 26, in create_app
    db.init_app(app)
  File "C:\...\Python\Python312\Lib\site-packages\flask_sqlalchemy\extension.py", line 355, in init_app
    raise RuntimeError(
RuntimeError: Either 'SQLALCHEMY_DATABASE_URI' or 'SQLALCHEMY_BINDS' must be set.

我在 run.py 文件中有这一行

print(f"FLASK_ENV: {os.environ.get('FLASK_ENV')}")

正如您所看到的,它表示 env 设置为 None,但是如果我在调用 create_app() 之前在 run.py 文件本身中手动设置 env

os.environ['FLASK_ENV'] = 'development'

一切都在运行。据我所知,范围似乎是正确的,在运行命令之前,我将目录直接更改为 remoire 文件夹,这是 run.py 以及 app 文件夹的位置,我似乎无法弄清楚出问题。这是出现问题的 create_app() 函数

def create_app():
    app = Flask(__name__)

    env = os.environ.get('FLASK_ENV', 'production')

    if env == 'development':
        app.config.from_object('config.DevelopmentConfig')
    elif env == 'testing':
        app.config.from_object('config.TestingConfig')
    else:
        app.config.from_object('config.ProductionConfig')

   
    db.init_app(app)
    .
    .
    .
python visual-studio flask environment-variables
1个回答
0
投票

设置和导出是 bash 中两种不同的操作。当您运行

set FLASK_ENV=development
时,您不会导出任何环境变量。您需要使用
export FLASK_ENV=development

更好的是,我建议您使用

.env
文件来管理您的环境变量。

如果您使用

flask
cli 脚本运行 Flask 应用程序,并且您的环境中安装了
python-dotenv
并且有一个包含环境变量的
.env
文件,flask 会自动从您的
.env 加载环境变量
文件。

如果您有一个单独的

run.py
文件使用工厂创建应用程序实例,并且您通过
python run.py
运行它并拥有
.env
文件,那么您需要自己加载环境变量,默认情况下再次从
.env
文件加载环境变量。

from dotenv import load_dotenv

from app import create_app

load_dotenv()

app = create_app()
© www.soinside.com 2019 - 2024. All rights reserved.