作为实验室社畜,常需要在本地使用Pycharm写代码,然后将代码同步到服务器上,使用远程登录服务器并运行代码做实验。
这其中有很多事情如果没有好的工具,做起来会非常麻烦。
比如如何快速同步本地与服务器的代码?如何优雅地单步调试?等
如果你也感同身受,不妨看看这篇文章~
注:本人使用的PyCharm版本是2019.1.3,其他版本应该也类似
我们先使用PyCharm创建一个"demo"项目,不妨先创建一个test.py文件,写下测试代码:
import
第一重境界 本地与远程代码同步
step 1. Tools --> Deployment --> Configuration...
step 2. + --> SFTP
并给远程server命名。
step 3. 填写红框中的内容
可以点击Test Connection,测试是否可以连接成功。
Root path默认为/,你可以将其设置为你个人用户的根目录/home/xxx
Step 4. Mappings --> Local path / Deployment path
Local path表示项目本地目录
Deployment path表示项目对应的远程目录
step 5. Tools --> Deployment --> Browse Remote Host
可以在PyCharm内查看远程目录及文件
step 6. 配置完成,此时即可上传。
右键想要上传/同步的文件 --> Deployment --> Upload to server
快捷键:Shift + Ctrl + Alt + X
可以设置:Tools --> Deployment --> Automatic Upload
实现一旦有改动,自动上传同步到远程
第二重境界 本地与远程代码同步,本地debug
现在我们已经可以在本地PyCharm写代码,然后优雅地上传同步到远程了。
然而我们运行代码还是得另外使用远程登录软件(比如XShell),远程登录后运行上传地代码。
我们可以直接在PyCharm内部使用远程的Python环境来运行本地的代码啊,甚至还可以直接单步调试本地的代码。
step 1. File -> Settings -> (根据个人实际pycharm项目名,这里是Project: demo)--> Project Interpreter --> add remote path
点击Next
选择Interpreter,不选择会使用系统默认
Sync folders:选择对应的远程同步目录即可(也就是我们刚刚上传的那个Deployment path)
最后,别忘了点击Apply!
step 2. 设置Terminal中的Python环境:File --> Settings --> Tools -> SSH Terminal
--> Apply --> OK
step 3. Tools-->Start SSH Session可打开远程命令行界面
step 4. 右上角Add Configuration...,填写Script path,Parameters和Python interpreter等参数:
Script path:待执行脚本位置
Parameters:脚本运行参数,比如在深度学习实验中我们常会设置--gpu 1 --batch_size 32 --phase train等
Python Interpreter:这就是我们在step1中配置的远程Python环境
step 5. 大功告成。我们可以使用远程Python环境在本地运行/debug自己的代码了。
还有个小问题:
我们点击运行后,会看到:
还记得上面这张图吗?
所以PyCharm实际上就是将你要运行的代码上传到了你设置的/home/<your username>/tmp/pycharm_project_46(你写的是/tmp/pycharm_project_46,会自动加上/home/<your username>前缀),然后在远程运行对应的代码文件,将结果返回。
第三重境界 本地与远程代码同步,远程debug
事情似乎圆满解决了?显然还没有!
以上方式似乎可以近似调试远程的代码了,但是还是会有问题!
比如在深度学习实验中,我们常常需要输入大规模的数据,而这些数据都是存在服务器上的!用以上方法显然不太能很优雅地解决这种导入数据集的路径问题。
这可怎么办呢???
我们最理想的状态就是:在服务器上运行代码,然后在本地单步调试。
这个可以做到吗?当然可以!
step 1. 在服务器上安装pydevd:pip install pydevd-pycharm~=192.6817.19(这与PyCharm的版本相关,你需要参考你自己的版本)
step 2. 将以下代码加入到远程服务器的主入口py文件中:
注意:111.111.111.111是本地计算机的ip,服务器需要能够访问到本地计算机。端口号选择一个10000以上的,比如这里的31235
import
因此test.py代码修改为:
import
别忘了将代码修改同步更新到远程!
step 3. 右上角 --> Edit Configurations --> + --> Python Renote Debug
和刚刚一样,填上Name, Local host name, Port等
注:这里会有简单的教程,提示你应该在远程服务器上安装哪个版本的pydevd
step 4. 在本地设置好断点,点击调试,等待。
step 5. 在xshell中登录服务器运行主入口程序py文件,便会将请求转到本地的pycharm中,遇到断点便会停止,可以调试了!
我们这里是进入demo目录下输入python test.py
另外:可能会遇到在本地找不到匹配py文件的情况:
点击auto-detect,选择对应的py文件就可以了!
大功告成!!!