是否可以使用像PyCharm这样的ide来调试uwsgi应用程序?我可以通过直接从pycharm运行它们来调试基于flask的应用程序,但是甚至无法在pycharm中运行uwsgi应用程序。
我是否必须使用远程调试?是否可以使用run?
从pycharm中启动uwsgi应用程序答案 0 :(得分:25)
您仍然可以在uWSGI之外运行WSGI应用程序以进行开发和调试。
但有时这是不可能的,例如,如果您的应用依赖于uWSGI API功能。
据我所知,你不能使用"附加到流程"来自PyCharm,因为您的WSGI应用程序正在嵌入到uWSGI中运行,并且没有可见的Python进程。然而Remote debugging就像魅力一样。
在PyCharm发行版中找到pycharm-debug*.egg
个文件。例如,在OSX上都可以在/Applications/PyCharm.app/Contents
将pycharm-debug-py3k.egg
复制到Flask应用旁边,或者复制pycharm-debug.egg
,如果您使用的是Python 2.7
在PyCharm中,创建一个" Python远程调试"配置来自"运行/调试配置"对话。在此示例中,我使用localhost
和端口4444
。此对话框将显示相应的pydevd.settrace(...)
行。
将以下代码添加到您的应用中:
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)
在PyCharm中,启动远程调试会话。 PyCharm的控制台应显示以下行:
Waiting for process connection...
照常从uWSGI运行您的应用。它应该附加到调试器,PyCharm的控制台应显示:
Connected to pydev debugger (build 139.711)
您的应用应该在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。