我正在研究如何使用 Python 开发一个像样的网络应用程序。因为我不想让一些高阶结构妨碍我,所以我选择了轻量级 Flask framework。时间会证明这是否是正确的选择。
所以,现在我已经使用 mod_wsgi 设置了一个 Apache 服务器,并且我的测试站点运行良好。但是,我想通过使站点在我对 py 或模板文件进行任何更改时自动重新加载来加快开发程序。我看到站点的 .wsgi 文件中的任何更改都会导致重新加载(即使在 apache 配置文件中没有 WSGIScriptReloading On ),但我仍然必须手动对其进行刺激(即,插入额外的换行符,保存)。当我编辑一些应用程序的 py 文件时,有什么方法可以导致重新加载?或者,我应该使用为我刷新 .wsgi 文件的 IDE?
当前推荐的方法是使用 flask
命令行实用程序。
https://flask.palletsprojects.com/en/1.1.x/quickstart/#debug-mode
例子:
$ export FLASK_APP=main.py
$ export FLASK_ENV=development
$ flask run
或在一个命令中:
$ FLASK_APP=main.py FLASK_ENV=development flask run
如果您想要与默认 (5000
) 不同的端口,请添加 --port
选项。
例子:
$ FLASK_APP=main.py FLASK_ENV=development flask run --port 8080
更多选项可用于:
$ flask run --help
FLASK_APP
也可以设置为 module:app
或 module:create_app
而不是 module.py
。有关完整说明,请参阅 https://flask.palletsprojects.com/en/1.1.x/cli/#application-discovery。
如果您在谈论测试/开发环境,那么只需使用调试选项。发生代码更改时,它将自动重新加载烧瓶应用程序。
app.run(debug=True)
或者,从外壳:
$ export FLASK_DEBUG=1
$ flask run
http://flask.pocoo.org/docs/quickstart/#debug-mode
在测试/开发环境中
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 应用程序重新加载新部署的烧瓶应用程序的文件/文件夹。
例如,您的更新脚本将您的最新更改拉下来并触及“reload_me.txt”文件。您的 uWSGI ini 脚本(显然是由 Supervisord 维护的)在某处有以下行:
touch-reload = '/opt/virtual_environments/application/reload_me.txt'
我希望这有帮助!
.ini
文件。如果您阅读有关“touch-reload”的文档,它位于 uWSGI,而不是主管配置中。
app.run(debug=True)
失败,但设置环境变量有效。
如果您使用 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
site_root/__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 1.0 及更高版本的一些更新
热重载的基本方法是:
$ export FLASK_APP=my_application
$ export FLASK_ENV=development
$ flask run
你应该使用 FLASK_ENV=development(不是 FLASK_DEBUG=1)
作为安全检查,您可以运行 flask run --debugger 以确保它已打开
如果项目根目录中有 .env 文件并安装了 python-dotenv,Flask CLI 现在将自动读取 FLASK_APP 和 FLASK_ENV 之类的内容
export FLASK_ENV=development
为我工作。 app.run(debug=True)
似乎不起作用。
app.run(use_reloader=True)
我们可以使用这个,use_reloader,所以每次我们重新加载页面时,我们的代码更改都会更新。
我有一个不同的想法:
第一的:
pip install python-dotenv
安装 python-dotenv
模块,它将读取您项目环境的本地首选项。
第二:
在您的项目目录中添加 .flaskenv
文件。添加以下代码:
FLASK_ENV=development
完成!
使用 Flask 项目的此配置,当您运行 flask run
时,您将在终端中看到此输出:
https://i.stack.imgur.com/cqRV8.png
当您编辑文件时,只需保存更改。您将看到自动重新加载为您服务:
https://i.stack.imgur.com/WoRS8.png
更多解释:
当然,您可以在每次需要时手动点击 export FLASK_ENV=development
。但是使用不同的配置文件来处理实际的工作环境似乎是一个更好的解决方案,所以我强烈推荐我使用这种方法。
FLASK_APP
变量包含到 .flaskenv
文件中。
使用此方法:
app.run(debug=True)
发生代码更改时,它将自动重新加载烧瓶应用程序。
示例代码:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "Hello World"
if __name__ == '__main__':
app.run(debug=True)
好吧,如果您想节省时间而不是每次发生更改时都重新加载网页,那么您可以尝试使用键盘快捷键 Ctrl + R
快速重新加载页面。
从终端你可以简单地说
export FLASK_APP=app_name.py
export FLASK_ENV=development
flask run
或在您的文件中
if __name__ == "__main__":
app.run(debug=True)
Flask 应用程序可以选择在调试模式下执行。在这种模式下,默认启用开发服务器的两个非常方便的模块reloader和debugger。启用重新加载器后,Flask 会监视项目的所有源代码文件,并在任何文件被修改时自动重新启动服务器。
默认情况下,调试模式被禁用。要启用它,请在调用烧瓶 run
之前设置一个 FLASK_DEBUG=1
环境变量:
(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
在开发过程中,启用重新加载器运行的服务器非常有用,因为每次修改和保存源文件时,服务器都会自动重新启动并获取更改。
要在 PyCharm 中实现这一点,请将“环境变量”部分设置为:
PYTHONUNBUFFERED=1;
FLASK_DEBUG=1
对于 Flask '运行/调试配置'。
为了帮助在浏览器中快速自动更改:
pip install livereload
from livereload import Server
if __name__ == '__main__':
server = Server(app.wsgi_app)
server.serve()
接下来,再次启动您的服务器:
例如。您的 .py
文件是 app.py
python app.py
不定期副业成功案例分享
flask run
也可以工作,因为当您pip install flask
时,flask 可执行文件也安装在venv/bin/
文件夹中。