一般我们的开发调试都是在个人PC上完成的。如果遇到问题,我们可以打开Pycharm的调试器,很快就能找到问题所在。但是有的时候,项目代码的运行依赖于运行环境,必须运行在部署相关依赖组件的服务器上,这直接导致我们无法在本地进行调试。针对这种特殊场景,据我所知有两种解决方案:pdb远程调试关于pdb,我之前专门写过一篇文章介绍如何使用,可以点这里查看:无图形界面的代码调试方法-pdb和远程调试允许我们在我们的PC上使用PyCharm图形界面来调试远程服务器上的代码。和本地调试没有太大区别。怎么调试还是怎么调试。不同的是,本地调试不需要事先配置。只要您的代码准备就绪,您就可以随时开始调试,而远程调试需要很多前置步骤。这正是本文的内容,教你如何配置远程调试环境。1.新建项目首先在Pycharm中新建一个空项目,然后我们将在服务器上的项目代码放在这个项目目录下。我这边的名字是NOVA,你可以自己定义。2.配置连接服务器Tools->Deployment->configuration添加一个ServerName:填写你服务器的IPType:设置为SFTP然后点击OK进入如下界面,你可以按照我的备注填写信息:SFTPhost:公网ipPort:服务器开启的ssh端口。根路径:你要调试的项目代码目录。用户名:您用来登录服务器的用户。密码,可以选择保存密码。这里要注意,你必须保证你的电脑可以ssh到你的服务器,不管是key登录还是password登录,如果开启了白名单限制,首先要去掉。填写完成后,切换到Mappings选项卡。在箭头位置填写\上面的服务器信息配置。所有信息填写正确后,点击确定。接下来,我们将连接到远程服务器。工具->部署->浏览远程主机3。下载项目代码如果之前填写的服务器登录信息正确,就可以看到远程项目代码了。选择将远程代码下载到本地。下载完整的通知。当前的IDE界面应该是这样的。4、为什么下载远程解释器需要这一步?远程调试在远程服务器上运行。除了依赖其他组件,它还有很多我们本地没有的Python依赖包。转到文件->设置并单击图标以添加远程解释器。填写远程服务器信息,同上,不再赘述。单击确定后,将自动下载远程解释器。如果你的项目比较大,这个时间可能会更长,请耐心等待。5.添加程序入口因为我们要在本地调试,所以你必须知道你的项目的入口程序。如果该入口程序已经包含在您的项目代码中,请跳过此步骤。如果没有,请自行生成入口程序。比如我这边的项目作为服务运行在服务器上。而我们都知道服务的入口就是Service文件。cat/usr/lib/systemd/system/openstack-nova-compute.service[Unit]Description=OpenStackNovaComputeServerAfter=syslog.targetnetwork.targetlibvirtd.service[Service]Environment=LIBGUESTFS_ATTACH_METHOD=applianceType=notifyNotifyAccess=allTimeoutStartSec=0Restart=alwaysUser=novaExecStart=/usr/bin/nova-compute[Install]WantedBy=multi-user.target你看到那个ExecStart了吗?那是我们程序的入口点。我们只需要将它复制到我们的Pycharm中,远程同步文件即可。6、调试前设置开启代码自动同步,这样Pycharm就可以识别我们的代码改动,帮我们提交到远程服务器。启用Gevent兼容。如果不启用,在调试过程中,可能会出现无法调试、无法跟踪/查看变量等问题。7.开始调试代码右键单击??您的程序入口文件并选择调试。如果你的程序入口需要引入参数,这种情况经常出现,你可以在这里配置。配置完成后,点击保存。8.友情提示按照文章调试代码,代码会自动同步到远端。生产环境请勿使用,开发环境必须使用,否则后果自负。调试工具为程序员提供了极大的方便,但还是希望大家不要过于依赖它们。每次写代码都尽量追求一个形状,提高自己的编码能力。文末介绍三个自己写的在线文档:第一个文档:PyCharm中文指南1.0文档历时两个多月整理了100个PyCharm使用技巧。为了让新手直接上手,我花了很多时间录制了上百个GIF动图,有兴趣的可以去网上文档看。第二篇文档:PyCharmBlackMagicGuide1.0文档系统包含了各种Python冷门知识,各种PythonShell的玩法,疯狂的Python技巧,超详细的Python进阶知识解读,非常实用的Python开发技巧等等。第三篇文档:Python中文指南1.0文档耗时三个月编写了适合Python零基础初学者的完整中文教程,大量的代码案例,让初学者对代码的操作有直观的体验,该教程既有深度又有广度。每篇文章都会标注内容的难易程度,是基础还是进阶,供读者选择。是不可多得的Python中文电子教程。
