Pycharm 常见问题汇总(updating)
此文章的目的是记录自己使用pycharm这款IDE遇到的问题。早期记录的主要是 远程调试 过程中遇到的问题,现在拓展到pycharm的方方面面啦~
Update: 在解决这些问题的过程中,我有了一些体会。一定要牢记“抓大放小”的思想,不能太钻牛角尖,对于一些不影响代码运行的细枝末节的小bug,可以暂时放到一边。毕竟时间是宝贵的,研究生阶段最重要的还是要尽快出成果、发论文,不应该在这些细节上浪费时间。
重点应该放在网络实现上!
之后遇到的问题会更新在文章前面,序号依然采用顺序。
Tips. 远程调试的时候一定要在调试之前 同步 本地与远端的代码,不然在本地代码上打断点调试,会出现运行结果与断点 错位 的情况。这是因为本地代码与远程代码不一致,调试是以远程代码为准,不同步的话就会发现调试结果和本地代码对不上。
5 . 远程debug时,在主程序main.py以外的脚本中打断点,调试模式无法识别。
举例:主程序main.py中调用stackhourglass.py 里的PSMNet类,在stackhourglass.py 文件中打断点,debug的时候断点被忽略,只能识别main.py文件中的断点。
解决方案:
经过两个下午的艰辛探索,我终于找到原因了!
就是要 取消勾选 Gevent compatible。方法参见问题1。
6 . 远程debug,报错:
Connection to Python debugger failed: Socket operation on nonsocket: configureBlocking
解决方案, 取消勾选 PyQt compatible。 选项位置同问题1。
7 . Pycharm自定义主题。
Pycharm本身只提供了三种深色模式主题,我不太满意,自定义主题的下载地址如下:
1. 远程debug时查看变量(variables)卡顿,读取缓慢,不显示 。 这种情况下你会发现单步调试也卡住了,看不到执行之后的情况。
解决办法 : File ->settings ->Python Debugger : 勾选Gevent compatible
之后点击apply , ok 即可
2. pycharm 通过跳板机连接宿主机里的docker。
思路 :docker 容器开启SSH服务,并和宿主机建立 端口映射 ,如 -p 10022:22,将容器22端口映射到宿主机10022端口。之后本机和宿主机通过跳板机 建立SSH隧道 ,将宿主机的10022端口映射到本机端口(如20022),之后pycharm中的deployment设置(即SSH连接)IP:localhost , 端口:20022 ,用户为 root(容器的用户),密码为你给root用户设置的密码。
SSH隧道可以参考我之前的文章:
查看远端服务器上的Tensorboard(利用MobaXterm) - 苏燃犀的文章 - 知乎 https:// zhuanlan.zhihu.com/p/13 8811263
docker部分参考如下:
Pycharm远程调试及远程虚拟环境(包括Docker) - Zarten的文章 - 知乎 https:// zhuanlan.zhihu.com/p/70 903277
注意后续连接如果出问题,记得重启容器内的SSH服务:
$ service ssh restart
3. pycharm连接远端服务器后,一直显示 connecting to console... 但是代码可以正常运行。
虽然这个问题不影响代码运行,但是强迫症的我看着真的不舒服。
原因 : 远端服务器的IPython版本过低 。 例如 python版本3.5.2 ,IPython版本7.2.0 ,就会出现这种情况。 而 python版本3.5.2 ,IPython版本7.9.0则可以正常连接console 。后来我在自己的容器里炼丹, python版本3.7.7 ,IPython版本7.13.0 ,也可以正常使用console。
4.pycharm 在代码中提示 Cannot find reference 'xx' in '_ init _.pyi' ,如下图:
代码可以正常运行,只是不能用ctrl+B查看对应的源码。
这个问题相当普遍,我研究了一下午,看了几乎所有和此相关的资料,甚至到外网的pycharm论坛和pytorch论坛里查找解决方案。 但这些解决办法都没用。
解决方案 :以pytorch1.5.0这个包为例,pycharm无法正确识别torch.utils, torch.cuda等子包,这是因为pytorch的源码中_ init _.pyi和_ init _.py文件声明不规范。一个直接的解决办法就是自己修改对应的_ init _.pyi和_ init _.py文件。 以上图为例,ctrl+B进入torch的_ init _.pyi文件,加入
from . import utils as utils
这里修改的是本地文件,文件路径在pycharm中可以很方便的查看到。
由于是远程调试,这个修改没有保存到远端,因而后续需要在远端的torch文件夹下用修改后的_ init _.pyi文件覆盖原有的_ init _.pyi文件。查看torch的安装路径可以用
pip install torch
会提示torch已安装,并给出安装路径。