我正在开发一个 Flask.app,它使用 Web 套接字功能并安装了 flask-socket 来提供该功能。因此,flask-socket 开发人员推荐 gunicorn 作为 Web 服务器。我现在的问题是如何将pycharm的删除调试器与gunicorn连接起来以断点拦截执行。
Settings > Project Settings > Python Debugger
那里有一个选项可以启用“gevent 兼容调试”。
然后,进入调试器设置(快捷方式是通过工具栏,单击播放/调试图标附近的下拉菜单,然后选择“编辑配置”
将“脚本”设置为您的 virtualenv 的 Gunicorn 安装,例如:
/Users/iandouglas/.virtualenvs/defaultenv/bin/gunicorn
将“脚本参数”设置为类似的内容
-b 192.168.1.1:9000 app:yourappname
(假设您的主要启动脚本名为 app.py 并且您将其称为“yourappname”
“工作目录”将自动设置,否则将其设置为代码所在的位置:
/Users/iandouglas/PycharmProjects/MyExampleApp
我的gunicorn设置有一个单独的配置文件,它指定了主机/端口,但我仍然必须指定
-b 0.0.0.0:5001
参数来强制gunicorn绑定到我机器上端口5001上的所有IP。
附注
一个重要的步骤是按照here
指出的添加此环境变量PYDEVD_USE_CYTHON=NO
我的 PyCharm 2018.1.3 Professional 案例:
转到运行/调试配置 创建和编辑运行调试配置
选择新的“Python”配置
-b :5001 --access-logfile - --error-logfile - "run:create_application()"
我尝试在 Pycharm 2020.2.1 上进行调试,即使启用了 Gevent 兼容调试,断点也无法正常工作。事实证明,我必须按照here所述设置环境变量来禁用 Cython 的运行配置才能使其正常工作。
PYDEVD_USE_CYTHON=NO
接受的解决方案对我有用,但我面临着 myproject module not find 错误,这是通过使用解决的:
gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application
Pycharm ✅
而不是
gunicorn --bind 0.0.0.0:8000 'myproject.wsgi:application'
Pycharm❌
- 编辑你的 Flask 启动 python 文件
$ vim manage.py
- 删除调试选项设置
from web import app
import sys
if __name__ == '__main__':
# app.run(host='0.0.0.0', port=app.config["PORT"], debug=app.config["DEBUG"])
app.run(host='0.0.0.0', port=9998, debug=False)