Python 烧瓶忽略配置导入

Python 烧瓶忽略配置导入,python,flask,Python,Flask,我的基本烧瓶应用程序结构是 /.env /config.py /app.py /app/__init__.py 我正在使用python dotenv,/.env的内容是 FLASK_APP = app.py DATABASE_URL = 'postgresql://postgres:postgres@localhost:XXXX/XXXXXXXXX' SQLALCHEMY_DATABASE_URI = 'postgresql://postgres:postgres@l

我的基本烧瓶应用程序结构是

/.env
/config.py
/app.py
/app/__init__.py
我正在使用python dotenv,/.env的内容是


    FLASK_APP = app.py
    DATABASE_URL = 'postgresql://postgres:postgres@localhost:XXXX/XXXXXXXXX'
    SQLALCHEMY_DATABASE_URI = 'postgresql://postgres:postgres@localhost:XXXX/XXXXXXXXX'
    SECRET_KEY = '0123456789'

最后,/app/init.py


    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    from flask_migrate import Migrate
    from config import Config, DevelopmentConfig, ProductionConfig
    
    app = Flask(__name__)
    app.config.from_object('config.DevelopmentConfig')
    
    db = SQLAlchemy(app)
    migrate = Migrate(app, db)
    
    from app import routes
    
    print(app.config, flush=True)

当我在父文件夹中运行flask时,我收到下面的输出。它在生产模式下运行,即使app.config的打印输出显示正在设置FLASK_ENV和DEBUG等

我做错了什么


    $ flask run
     * Serving Flask app "kwtr2.py"
     * 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
    <Config {'ENV': 'production', 'DEBUG': True, 'TESTING': True, 'PROPAGATE_EXCEPTIONS': None, 'PRESERVE_CONTEXT_ON_EXCEPTION': None, 'SECRET_KEY': '0123456789', 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(days=31), 'USE_X_SENDFILE': False, 'SERVER_NAME': None, 'APPLICATION_ROOT': '/', 'SESSION_COOKIE_NAME': 'session', 'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_SECURE': False, 'SESSION_COOKIE_SAMESITE': None, 'SESSION_REFRESH_EACH_REQUEST': True, 'MAX_CONTENT_LENGTH': None, 'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(seconds=43200), 'TRAP_BAD_REQUEST_ERRORS': None, 'TRAP_HTTP_EXCEPTIONS': False, 'EXPLAIN_TEMPLATE_LOADING': False, 'PREFERRED_URL_SCHEME': 'http', 'JSON_AS_ASCII': True, 'JSON_SORT_KEYS': True, 'JSONIFY_PRETTYPRINT_REGULAR': False, 'JSONIFY_MIMETYPE': 'application/json', 'TEMPLATES_AUTO_RELOAD': None, 'MAX_COOKIE_SIZE': 4093, 'CSRF_ENABLED': True, 'DEVELOPMENT': True, 'FLASK_ENV': 'development', 'SQLALCHEMY_DATABASE_URI': 'postgresql://postgres:postgres@localhost:XXXX/XXXXXXXXXXX', 'SQLALCHEMY_TRACK_MODIFICATIONS': False, 'STATIC_FOLDER': 'static', 'TEMPLATES_FOLDER': 'templates', 'SQLALCHEMY_BINDS': None, 'SQLALCHEMY_NATIVE_UNICODE': None, 'SQLALCHEMY_ECHO': False, 'SQLALCHEMY_RECORD_QUERIES': None, 'SQLALCHEMY_POOL_SIZE': None, 'SQLALCHEMY_POOL_TIMEOUT': None, 'SQLALCHEMY_POOL_RECYCLE': None, 'SQLALCHEMY_MAX_OVERFLOW': None, 'SQLALCHEMY_COMMIT_ON_TEARDOWN': False, 'SQLALCHEMY_ENGINE_OPTIONS': {}}>
     * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)


$flask运行
*服务瓶应用程序“kwtr2.py”
*环境:生产
警告:这是一个开发服务器。不要在生产部署中使用它。
改用生产WSGI服务器。
*调试模式:关闭
*继续http://127.0.0.1:5000/ (按CTRL+C退出)
提前谢谢你


Keith

您没有在应用程序实例中导入
config
模块:

初始化
从配置导入配置、开发配置、生产配置
app=烧瓶(名称)
app.config.from_object()
# ...

谢谢Gitau,我已经试过了,但在“烧瓶运行”之后仍然会看到“环境:生产”。

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    from flask_migrate import Migrate
    from config import Config, DevelopmentConfig, ProductionConfig
    
    app = Flask(__name__)
    app.config.from_object('config.DevelopmentConfig')
    
    db = SQLAlchemy(app)
    migrate = Migrate(app, db)
    
    from app import routes
    
    print(app.config, flush=True)


    $ flask run
     * Serving Flask app "kwtr2.py"
     * 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
    <Config {'ENV': 'production', 'DEBUG': True, 'TESTING': True, 'PROPAGATE_EXCEPTIONS': None, 'PRESERVE_CONTEXT_ON_EXCEPTION': None, 'SECRET_KEY': '0123456789', 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(days=31), 'USE_X_SENDFILE': False, 'SERVER_NAME': None, 'APPLICATION_ROOT': '/', 'SESSION_COOKIE_NAME': 'session', 'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_SECURE': False, 'SESSION_COOKIE_SAMESITE': None, 'SESSION_REFRESH_EACH_REQUEST': True, 'MAX_CONTENT_LENGTH': None, 'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(seconds=43200), 'TRAP_BAD_REQUEST_ERRORS': None, 'TRAP_HTTP_EXCEPTIONS': False, 'EXPLAIN_TEMPLATE_LOADING': False, 'PREFERRED_URL_SCHEME': 'http', 'JSON_AS_ASCII': True, 'JSON_SORT_KEYS': True, 'JSONIFY_PRETTYPRINT_REGULAR': False, 'JSONIFY_MIMETYPE': 'application/json', 'TEMPLATES_AUTO_RELOAD': None, 'MAX_COOKIE_SIZE': 4093, 'CSRF_ENABLED': True, 'DEVELOPMENT': True, 'FLASK_ENV': 'development', 'SQLALCHEMY_DATABASE_URI': 'postgresql://postgres:postgres@localhost:XXXX/XXXXXXXXXXX', 'SQLALCHEMY_TRACK_MODIFICATIONS': False, 'STATIC_FOLDER': 'static', 'TEMPLATES_FOLDER': 'templates', 'SQLALCHEMY_BINDS': None, 'SQLALCHEMY_NATIVE_UNICODE': None, 'SQLALCHEMY_ECHO': False, 'SQLALCHEMY_RECORD_QUERIES': None, 'SQLALCHEMY_POOL_SIZE': None, 'SQLALCHEMY_POOL_TIMEOUT': None, 'SQLALCHEMY_POOL_RECYCLE': None, 'SQLALCHEMY_MAX_OVERFLOW': None, 'SQLALCHEMY_COMMIT_ON_TEARDOWN': False, 'SQLALCHEMY_ENGINE_OPTIONS': {}}>
     * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)