使用pycharm调试uwsgi python应用程序

时间:2014-01-21 12:01:26

标签: debugging pycharm uwsgi

是否可以使用像PyCharm这样的ide来调试uwsgi应用程序?我可以通过直接从pycharm运行它们来调试基于flask的应用程序,但是甚至无法在pycharm中运行uwsgi应用程序。

我是否必须使用远程调试?是否可以使用run?

从pycharm中启动uwsgi应用程序

3 个答案:

答案 0 :(得分:25)

您仍然可以在uWSGI之外运行WSGI应用程序以进行开发和调试。

但有时这是不可能的,例如,如果您的应用依赖于uWSGI API功能。

据我所知,你不能使用"附加到流程"来自PyCharm,因为您的WSGI应用程序正在嵌入到uWSGI中运行,并且没有可见的Python进程。然而Remote debugging就像魅力一样。

  1. 在PyCharm发行版中找到pycharm-debug*.egg个文件。例如,在OSX上都可以在/Applications/PyCharm.app/Contents

  2. 中找到
  3. pycharm-debug-py3k.egg复制到Flask应用旁边,或者复制pycharm-debug.egg,如果您使用的是Python 2.7

  4. 在PyCharm中,创建一个" Python远程调试"配置来自"运行/调试配置"对话。在此示例中,我使用localhost和端口4444。此对话框将显示相应的pydevd.settrace(...)行。

  5. 将以下代码添加到您的应用中:

    import sys
    sys.path.append('pycharm-debug-py3k.egg')  # replace by pycharm-debug.egg for Python 2.7
    import pydevd
    # the following line can be copied from "Run/Debug Configurations" dialog
    pydevd.settrace('localhost', port=4444, stdoutToServer=True, stderrToServer=True)
    
  6. 在PyCharm中,启动远程调试会话。 PyCharm的控制台应显示以下行:

    Waiting for process connection...
    
  7. 照常从uWSGI运行您的应用。它应该附加到调试器,PyCharm的控制台应显示:

    Connected to pydev debugger (build 139.711)
    
  8. 您的应用应该在pydevd.settrace(...)行中断。然后,您可以像往常一样继续使用PyCharm调试器(断点等)

答案 1 :(得分:3)

不确定如何解释您的问题,因为您正在混合苹果和橘子。 Flask是一个框架,uWSGI是一个应用服务器。不过,我会试着回答。

据我所知,uWSGI不是纯python,因此即使有可能,在PyCharm中调试它也不会是微不足道的。

但是,由于您使用uWSGI来运行您的应用程序,我假设它符合WSGI protocol。在这种情况下,出于调试目的,您也可以从简单的纯python应用程序引擎(如wsgiref.simple_server.WSGIServer)运行它。

答案 2 :(得分:1)

现在有一个有关如何执行此操作的官方指南: https://www.jetbrains.com/help/pycharm/remote-debugging-with-product.html#

如果您的代码已经存在于远程中,则只需遵循Create a run/debug configuration

您将需要运行PyCharm的IP。当您从PyCharm运行远程调试器时,它将创建一个调试服务器。您的代码将连接到该服务器。

在我的情况下,我使用的是Vagrant,访客的专用IP为192.168.0.3,主机的专用IP为192.168.0.1。 我在远程客户机中的代码将通过主机IP连接到调试服务器。因此,我需要在要调试的代码中使用主机IP。