【发布时间】:2014-01-11 01:03:38
【问题描述】:
我正在开发一个 flask.app,它使用 Web 套接字功能并安装了 flask-socket 来提供它。所以flask-socket 开发者推荐gunicorn 作为Web 服务器。我现在的问题是如何将pycharm的remove调试器和gunicorn连接起来,用断点拦截执行。
【问题讨论】:
我正在开发一个 flask.app,它使用 Web 套接字功能并安装了 flask-socket 来提供它。所以flask-socket 开发者推荐gunicorn 作为Web 服务器。我现在的问题是如何将pycharm的remove调试器和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
【讨论】:
Settings > Project Settings > Python Debugger 下只有两个选项:“调试时自动附加到子进程”和“收集运行时类型信息以了解代码”。您是否安装了其他插件?
Gevent compatible debugging。
--timeout INT 用于您的脚本参数。
我的 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
【讨论】:
- 编辑烧瓶启动 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)
【讨论】: