代码更改时自动重新加载 Python Flask 应用程序

2025-03-06 08:52:00
admin
原创
88
摘要:问题描述:我正在研究如何使用 Python 开发一个不错的 Web 应用程序。由于我不想让一些高阶结构妨碍我,所以我选择了轻量级Flask 框架。时间会证明这是否是正确的选择。现在,我已经使用 mod_wsgi 设置了一个 Apache 服务器,我的测试站点运行良好。但是,我想通过使站点在我对 py 或模板文...

问题描述:

我正在研究如何使用 Python 开发一个不错的 Web 应用程序。由于我不想让一些高阶结构妨碍我,所以我选择了轻量级Flask 框架。时间会证明这是否是正确的选择。

现在,我已经使用 mod_wsgi 设置了一个 Apache 服务器,我的测试站点运行良好。但是,我想通过使站点在我对 py 或模板文件进行任何更改时自动重新加载来加快开发过程。我发现站点 .wsgi 文件中的任何更改都会导致重新加载(即使 apache 配置文件中没有 WSGIScriptReloading On),但我仍然必须手动进行操作(即插入额外的换行符,保存)。当我编辑某些应用程序的 py 文件时,是否有某种方法可以导致重新加载?或者,我应该使用 IDE 来刷新 .wsgi 文件?


解决方案 1:

运行启用了调试模式flask run的 CLI 命令,这将自动启用重新加载器。从 Flask 2.2 开始,您可以在命令行上传递和选项。--app`--debug`

$ flask --app main.py --debug run

--app也可以设置为module:appmodule:create_app代替module.py。请参阅文档了解完整解释。

有更多选项可用:

$ flask run --help

在 Flask 2.2 之前,您需要设置FLASK_APPFLASK_ENV=development环境变量。

$ export FLASK_APP=main.py
$ export FLASK_ENV=development
$ flask run

在 Flask 2.2 中仍然可以设置FLASK_APPFLASK_DEBUG=1

解决方案 2:

如果您谈论的是测试/开发环境,那么只需使用调试选项。当代码发生更改时,它将自动重新加载 flask 应用程序。

app.run(debug=True)

或者,从 shell 中:

$ export FLASK_DEBUG=1
$ flask run

http://flask.palletsprojects.com/quickstart/#debug-mode

解决方案 3:

在测试/开发环境中

werkzeug 调试器已经具有“自动重新加载”功能,可以通过执行以下操作之一启用该功能:

app.run(debug=True)

或者

app.debug = True

如果需要,您还可以使用单独的配置文件来管理所有设置。例如,我使用带有“DEBUG = True”选项的“settings.py”。导入此文件也很容易;

app.config.from_object('application.settings')

然而这并不适合生产环境。

生产环境

我个人选择 Nginx + uWSGI 而不是 Apache + mod_wsgi,一方面是出于性能原因,另一方面是出于配置选项的原因。touch -reload选项允许您指定一个文件/文件夹,这将导致 uWSGI 应用程序重新加载您新部署的 flask 应用程序。

例如,你的更新脚本拉取了最新的更改并触及“reload_me.txt”文件。你的 uWSGI ini 脚本(显然由 Supervisord 维护)在某处有这样一行:

touch-reload = '/opt/virtual_environments/application/reload_me.txt'

我希望这有帮助!

解决方案 4:

如果您正在使用 uwsgi 运行,请查看 python 自动重新加载选项:

uwsgi --py-autoreload 1

示例 uwsgi-dev-example.ini:

[uwsgi]
socket = 127.0.0.1:5000
master = true
virtualenv = /Users/xxxx/.virtualenvs/sites_env
chdir = /Users/xxx/site_root
module = site_module:register_debug_server()
callable = app
uid = myuser
chmod-socket = 660
log-date = true
workers = 1
py-autoreload = 1

站点根目录/__init__.py

def register_debug_server():
    from werkzeug.debug import DebuggedApplication

    app = Flask(__name__)
    app.debug = True
    app = DebuggedApplication(app, evalex=True)
    return app

然后运行:

uwsgi --ini uwsgi-dev-example.ini

注意:此示例还启用了调试器。

我选择这种方式是为了尽可能地使用我的 nginx 设置模拟生产环境。如果只是在 nginx 后面运行带有内置 Web 服务器的 flask 应用,则会导致网关错误。

解决方案 5:

对于 Flask 1.0 直到 2.2 版本,热重加载的基本方法是:

$ export FLASK_APP=my_application
$ export FLASK_ENV=development
$ flask run
  • 你应该使用FLASK_ENV=development(不是FLASK_DEBUG=1

  • 作为安全检查,你可以运行flask run --debugger以确保它已打开

  • Flask CLI 现在将自动读取以下内容,例如FLASK_APPFLASK_ENV如果你.env在项目根目录中有一个文件,并且安装了 python-dotenv

解决方案 6:

app.run(use_reloader=True)

我们可以使用这个,use_reloader,这样每次我们重新加载页面时我们的代码更改都会更新。

解决方案 7:

使用此方法:

app.run(debug=True)

当代码发生改变时,它将自动重新加载 flask 应用程序。

示例代码:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
   return "Hello World"


if __name__ == '__main__':
  app.run(debug=True)

好吧,如果您想节省时间,而不是每次发生变化时都重新加载网页,那么您可以尝试使用键盘快捷键Ctrl + R快速重新加载页面。

解决方案 8:

我有一个不同的想法:

第一的:

pip install python-dotenv

安装python-dotenv模块,它将读取您的项目环境的本地首选项。

第二:

在您的项目目录中添加.flaskenv文件。添加以下代码:

FLASK_ENV=development

完成了!

对您的 Flask 项目进行这样的配置后,当您运行时flask run,您将在终端中看到以下输出:

在此处输入图片描述

当你编辑文件时,只需保存更改。你会看到自动重新加载功能:

在此处输入图片描述

更多解释:

当然,你可以export FLASK_ENV=development在每次需要时手动点击。但是使用不同的配置文件来处理实际的工作环境似乎是更好的解决方案,所以我强烈推荐我使用的这种方法。

解决方案 9:

在终端上你可以简单地说

export FLASK_APP=app_name.py
export FLASK_ENV=development
flask run

或者在你的文件中

if __name__ == "__main__":
    app.run(debug=True)

解决方案 10:

在 flask 2.2 中启用重新加载器:

flask run --reload

解决方案 11:

虚拟环境命令

flask run --debug

解决方案 12:

Flask 应用程序可以选择在调试模式下执行。在此模式下,开发服务器的两个非常方便的模块(称为重新加载器调试器)默认处于启用状态。启用重新加载器后,Flask 会监视项目的所有源代码文件,并在任何文件被修改时自动重新启动服务器。

默认情况下,调试模式是禁用的。要启用它,请FLASK_DEBUG=1在调用 flask 之前设置环境变量run

(venv) $ export FLASK_APP=hello.py for Windows use > set FLASK_APP=hello.py

(venv) $ export FLASK_DEBUG=1 for Windows use > set FLASK_DEBUG=1

(venv) $ flask run

* Serving Flask app "hello"
* Forcing debug mode on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 273-181-528

在开发过程中,运行启用重新加载器的服务器非常有用,因为每次修改和保存源文件时,服务器都会自动重新启动并获取更改。

解决方案 13:

为了在 PyCharm 中实现这一点,请将“环境变量”部分设置为:

PYTHONUNBUFFERED=1;
FLASK_DEBUG=1

对于 Flask‘运行/调试配置’。

解决方案 14:

为了帮助浏览器快速自动更改:

pip install livereload

from livereload import Server

if __name__ == '__main__':
    server = Server(app.wsgi_app)
    server.serve()

接下来,重新启动服务器:

例如你的.py文件是app.py

python app.py

解决方案 15:

我认为更好的解决方案是设置应用程序配置。对我来说,我构建了该工具,然后将其推送到开发服务器,在那里我必须设置 WSGI 管道来管理 Flask Web 应用程序。我有一些数据正在更新到模板,我希望它每 X 分钟刷新一次(通过 UBUNTU 18 上的 APACHE2 为 Flask 站点进行 WSGI 部署)。在您的app.py或您的主应用程序中,app.config.update在下面添加字典并标记TEMPLATES_AUTO_RELOAD=True,您会发现服务器上自动更新的任何模板都将反映在浏览器中。Flask 网站上有一些关于配置处理的精彩文档,请在此处找到。

app = Flask(__name__)
app.config.update(
    TEMPLATES_AUTO_RELOAD=True
)
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3878  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2714  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   47  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   48  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   48  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用