Python 如何使用pycharm 2.x调试flask.app,该';它在gunicorn上运行

Python 如何使用pycharm 2.x调试flask.app,该';它在gunicorn上运行,python,flask,pycharm,Python,Flask,Pycharm,我正在开发一个flask.app,它使用web套接字功能,并已安装以提供该功能。所以flask socket开发人员推荐它作为web服务器。我现在的问题是如何将pycharm的remove调试器与gunicorn连接,以拦截带有断点的执行。Settings>Project Settings>Python调试器 其中有一个选项可以启用“gevent兼容调试” 然后,进入调试器设置(快捷方式是通过工具栏,单击“播放/调试”图标附近的下拉列表,然后选择“编辑配置” 将“脚本”设置为您的VirtualN

我正在开发一个flask.app,它使用web套接字功能,并已安装以提供该功能。所以flask socket开发人员推荐它作为web服务器。我现在的问题是如何将pycharm的remove调试器与gunicorn连接,以拦截带有断点的执行。

Settings>Project Settings>Python调试器

其中有一个选项可以启用“gevent兼容调试”

然后,进入调试器设置(快捷方式是通过工具栏,单击“播放/调试”图标附近的下拉列表,然后选择“编辑配置”

将“脚本”设置为您的VirtualNV的gunicorn安装,类似于:

/Users/iandouglas/.virtualenvs/defaultenv/bin/gunicorn

将“脚本参数”设置为
-b 192.168.1.1:9000 app:yourappname
(假设您的主启动脚本名为app.py,您将其称为“yourappname”

“工作目录”将自动设置,否则将其设置为代码所在的位置:
/Users/iandouglas/PycharmProjects/MyExampleApp

我的gunicorn设置有一个单独的配置文件,它指定了一个主机/端口,但我仍然必须指定
-b0.0.0:5001
参数,以强制gunicorn绑定到我机器上端口5001上的所有IP

p、 美国

一个重要的步骤是如前所述添加此envvar

  • 编辑您的python文件
  • 删除调试选项设置

我的PyCharm 2018.1.3专业案例:

  • 转到运行/调试配置

  • 选择新的“Python”配置

  • 脚本路径:您的路径到/venv/bin/gunicorn
  • 参数(对于我的情况):
    -b:5001--访问日志文件---错误日志文件-“运行:创建应用程序()”
  • Python解释器:项目的venv Python版本
  • 工作目录:项目的路径
  • 保存并按DEBUG(Shift+F9)
  • 开心点

  • 我试图在Pycharm 2020.2.1上进行调试,但即使启用了Gevent兼容调试,断点也无法正常工作。结果证明,我必须通过设置环境变量来禁用Cython以进行运行配置,如前所述

    PYDEVD_USE_CYTHON=NO
    

    在PyCharm 2.7.3中,在
    Settings>Project Settings>Python Debugger
    下只有两个选项:“调试时自动附加到子流程”和“收集运行时类型信息以获取代码洞察”。您是否安装了其他插件?不,我一直使用“gevent兼容调试”在我的编辑器中,v2和v3都是。我确实使用专业版……也许他们没有将其包含在免费社区版中。CE的3.4版在提到的其他两个选项@arbyter旁边有
    Gevent compatible debugging
    。这是一篇老文章,但对某些人仍然有用。如果在调试时,该过程突然重新启动,这是因为gunicorn worker timeout。您可以将其设置得更高以获得更长的调试时间,对脚本参数使用
    --timeout INT
    。这在最近的版本中似乎不起作用。在我的情况下,执行不会在断点处停止您是我的救世主@Philipp!
    $ 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)
    
    PYDEVD_USE_CYTHON=NO