You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下Flask登录系统环境变量配置错误求助

Windows下Flask项目APP_SETTINGS未找到问题解决

问题背景

此前在Linux环境通过source .env可正常运行Flask项目,切换到Windows后,创建env.bat配置环境变量,内容如下:

set export SECRET_KEY=34uqhtg3rfhjqwief3woqijj4ki324jkDEWGF
set export DEBUG=True
set export APP_SETTINGS=config.DevelopmentConfig
set export DATABASE_URL=sqlite:///db.sqlite
set export FLASK_APP=src
set export FLASK_DEBUG=1

运行manage.py时触发错误:

File "C:\Users\admin\Documents\Dash\manage.py", line 3, in <module>
    from src import app
  File "C:\Users\admin\Documents\Dash\src\__init__.py", line 8, in <module>
    app.config.from_object(config("APP_SETTINGS"))
  File "C:\Users\admin\Documents\ws\Dash\env\lib\site-packages\decouple.py", line 248, in __call__
    return self.config(*args, **kwargs)
  File "C:\Users\admin\Documents\ws\Dash\env\lib\site-packages\decouple.py", line 107, in __call__
    return self.get(*args, **kwargs)
  File "C:\Users\admin\Documents\ws\Dash\env\lib\site-packages\decouple.py", line 92, in get
    raise UndefinedValueError('{} not found. Declare it as envvar or define a default value.'.format(option))
decouple.UndefinedValueError: APP_SETTINGS not found. Declare it as envvar or define a default value.

相关代码文件

manage.py

from flask.cli import FlaskGroup

from src import app

cli = FlaskGroup(app)


if __name__ == "__main__":
    cli()

src/init.py

from decouple import config
from flask import Flask
from flask_bcrypt import Bcrypt
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config.from_object(config("APP_SETTINGS"))

bcrypt = Bcrypt(app)
db = SQLAlchemy(app)
migrate = Migrate(app, db)

# Registering blueprints
from src.accounts.views import accounts_bp
from src.core.views import core_bp

app.register_blueprint(accounts_bp)
app.register_blueprint(core_bp)

config.py

from decouple import config

DATABASE_URI = config("DATABASE_URL")
if DATABASE_URI.startswith("postgres://"):
    DATABASE_URI = DATABASE_URI.replace("postgres://", "postgresql://", 1)


class Config(object):
    DEBUG = False
    TESTING = False
    CSRF_ENABLED = True
    SECRET_KEY = config("SECRET_KEY", default="guess-me")
    SQLALCHEMY_DATABASE_URI = DATABASE_URI
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    BCRYPT_LOG_ROUNDS = 13
    WTF_CSRF_ENABLED = True
    DEBUG_TB_ENABLED = False
    DEBUG_TB_INTERCEPT_REDIRECTS = False


class DevelopmentConfig(Config):
    DEVELOPMENT = True
    DEBUG = True
    WTF_CSRF_ENABLED = False
    DEBUG_TB_ENABLED = True


class TestingConfig(Config):
    TESTING = True
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = "sqlite:///testdb.sqlite"
    BCRYPT_LOG_ROUNDS = 1
    WTF_CSRF_ENABLED = False


class ProductionConfig(Config):
    DEBUG = False
    DEBUG_TB_ENABLED = False

问题原因与解决方法

直接修复bat文件

Windows的set命令不需要添加export关键字,set export XXX=XXX会把变量名设置为export,而非XXX,导致python-decouple无法读取到正确的环境变量。

修改后的env.bat内容:

set SECRET_KEY=34uqhtg3rfhjqwief3woqijj4ki324jkDEWGF
set DEBUG=True
set APP_SETTINGS=config.DevelopmentConfig
set DATABASE_URL=sqlite:///db.sqlite
set FLASK_APP=src
set FLASK_DEBUG=1

修改后,双击运行env.bat(或在命令行中执行该文件),再启动manage.py即可。

更兼容的方案:直接使用.env文件

由于项目使用了python-decouple,该库默认会自动读取项目根目录下的.env文件,无需编写bat脚本,和Linux环境保持一致:

  1. 在项目根目录创建.env文件,内容和Linux下的一致:
SECRET_KEY=34uqhtg3rfhjqwief3woqijj4ki324jkDEWGF
DEBUG=True
APP_SETTINGS=config.DevelopmentConfig
DATABASE_URL=sqlite:///db.sqlite
FLASK_APP=src
FLASK_DEBUG=1
  1. 直接运行manage.py即可,python-decouple会自动加载这些环境变量。

内容的提问来源于stack exchange,提问作者Tom John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 09:48:29