pycharm remote 远程项目 同步 本地_利器:PyCharm本地连接服务器搭建深度学习实验环境的三重境界...

45b698b4fd75fb4a19cbd186ed56e683.png

作为实验室社畜,常需要在本地使用Pycharm写代码,然后将代码同步到服务器上,使用远程登录服务器并运行代码做实验。

这其中有很多事情如果没有好的工具,做起来会非常麻烦。

比如如何快速同步本地与服务器的代码?如何优雅地单步调试?等

如果你也感同身受,不妨看看这篇文章~

注:本人使用的PyCharm版本是2019.1.3,其他版本应该也类似


我们先使用PyCharm创建一个"demo"项目,不妨先创建一个test.py文件,写下测试代码:

import 

第一重境界 本地与远程代码同步

step 1. Tools --> Deployment --> Configuration...

fca9e4fdfaeceb99d72f3f9476acacec.png

step 2. + --> SFTP

5ca19310f4f7cbc1d4ad0c11afb4b0a2.png

并给远程server命名。

step 3. 填写红框中的内容

9346f4aa7c4fec7f40bb7e741c0d491c.png

可以点击Test Connection,测试是否可以连接成功。

Root path默认为/,你可以将其设置为你个人用户的根目录/home/xxx

Step 4. Mappings --> Local path / Deployment path

Local path表示项目本地目录

Deployment path表示项目对应的远程目录

63ca966524067009b7b418c08eb05ccb.png

step 5. Tools --> Deployment --> Browse Remote Host

可以在PyCharm内查看远程目录及文件

c9c83d6d4bfaea2be61d9ce305fc1a08.png

step 6. 配置完成,此时即可上传。

右键想要上传/同步的文件 --> Deployment --> Upload to server

快捷键:Shift + Ctrl + Alt + X

d5903c0c8469aa6ff61354454a646a57.png

可以设置:Tools --> Deployment --> Automatic Upload

实现一旦有改动,自动上传同步到远程

309ca88a57ec12c9f53d11e27e2019ee.png

第二重境界 本地与远程代码同步,本地debug

现在我们已经可以在本地PyCharm写代码,然后优雅地上传同步到远程了。
然而我们运行代码还是得另外使用远程登录软件(比如XShell),远程登录后运行上传地代码。
我们可以直接在PyCharm内部使用远程的Python环境来运行本地的代码啊,甚至还可以直接单步调试本地的代码。

step 1. File -> Settings -> (根据个人实际pycharm项目名,这里是Project: demo)--> Project Interpreter --> add remote path

be2e88cc5fa8f77e1ef41d2d05ec87a1.png

1bb9510817f89d9697a838d48cde3190.png

c9b5aaaf2412712ab8595f31b37c6e1c.png

点击Next

选择Interpreter,不选择会使用系统默认

Sync folders:选择对应的远程同步目录即可(也就是我们刚刚上传的那个Deployment path

b2306e7beaa22f3de33503b52ac4e1ff.png

最后,别忘了点击Apply

step 2. 设置Terminal中的Python环境:File --> Settings --> Tools -> SSH Terminal

be2e88cc5fa8f77e1ef41d2d05ec87a1.png

fc4337da66cf928b21c8aff17fe94684.png

--> Apply --> OK

step 3. Tools-->Start SSH Session可打开远程命令行界面

e18736b3bbadd428a921b7e2e6017352.png

step 4. 右上角Add Configuration...,填写Script path,Parameters和Python interpreter等参数:

Script path:待执行脚本位置

Parameters:脚本运行参数,比如在深度学习实验中我们常会设置--gpu 1 --batch_size 32 --phase train等

Python Interpreter:这就是我们在step1中配置的远程Python环境

214291ed13c5d5fb6a216d6911ddef7e.png

step 5. 大功告成。我们可以使用远程Python环境在本地运行/debug自己的代码了。

6fca4b8837016f73411179be453c9658.png

还有个小问题:

我们点击运行后,会看到:

8c9634aa8cc2e74a50870800247d272b.png

还记得上面这张图吗?

b2306e7beaa22f3de33503b52ac4e1ff.png

所以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

c249eec12f94ea00466a0c49c108f766.png

和刚刚一样,填上Name, Local host name, Port等

注:这里会有简单的教程,提示你应该在远程服务器上安装哪个版本的pydevd

2c6498439ce11eb51ad215a556a66525.png

step 4. 在本地设置好断点,点击调试,等待。

d11d867ccf7956c5c03ecf86c6e119ea.png

step 5. 在xshell中登录服务器运行主入口程序py文件,便会将请求转到本地的pycharm中,遇到断点便会停止,可以调试了!

我们这里是进入demo目录下输入python test.py

另外:可能会遇到在本地找不到匹配py文件的情况:

e9032f2b492d3f0373f305eea3c05604.png

点击auto-detect,选择对应的py文件就可以了!

大功告成!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

防御性编程技巧

点击蓝字关注我们在防御性编程的大框架之下&#xff0c;有许多常识性的规则。人们在想到防御性编程的时候&#xff0c;通常都会想到“断言”&#xff0c;这没有错。我们将在后面对此进行讨论。但是&#xff0c;还是有一些简单的编程习惯可以极大地提高代码的安全性。尽管看上去…

cookie无法读取bdstoken_第二章(第12节):cookie操作

有时候我们需要验证浏览器中 cookie 是否正确&#xff0c;因为基于真实 cookie 的测试是无法通过白盒和集成测试进行的。WebDriver 提供了操作 cookie 的相关方法&#xff0c;可以读取、添加和删除 cookie信息。WebDriver 操作 cookie 的方法&#xff1a;get_cookies()&#xf…

C++ 基本的输入输出

点击蓝字关注我们C 标准库虽然提供了一组丰富的输入/输出功能&#xff0c;但是本章只讨论 C 编程中最基本和最常见的 I/O 操作。C 的 I/O 发生在流中&#xff0c;流是字节序列。如果字节流是从设备&#xff08;如键盘、磁盘驱动器、网络连接等&#xff09;流向内存&#xff0c;…

http 和 https_HTTPS与HTTP区别

HTTPS与HTTP的认识&#xff1a;HTTP 加密 认证 完整性保护 HTTPSHTTP的全称是 Hypertext Transfer Protocol Vertion (超文本传输协议)HTTPS&#xff1a; HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议。HTTPS和HTTP的区别&#xff1a;HTTPS协议需要到ca申…

C语言指针的自我介绍(你了解我吗?了解多少?)

点击蓝字关注我们hey! Ladies and Gentlemen.&#x1f601;欢迎大家来看望我&#xff0c;对&#xff0c;我就是指针(pointer)&#xff0c;被很多人吐槽&#x1f614;&#xff0c;也被人说好。我希望大家了解过我以后&#xff0c;能够爱上我&#x1f618;。大家在了解我之前 &am…

flex 解析json文件_使用 Python 处理 JSON 格式的数据 | Linux 中国

如果你不希望从头开始创造一种数据格式来存放数据&#xff0c;JSON 是一个很好的选择。如果你对 Python 有所了解&#xff0c;就更加事半功倍了。下面就来介绍一下如何使用 Python 处理 JSON 数据。-- Seth KenlonJSON 的全称是 JavaScript 对象表示法JavaScript Object Notati…

【C语言】指针进阶第一站:字符指针 typedef关键字!

点击蓝字关注我们简单回顾一下指针的概念内存会划分以字节为单位的空间&#xff0c;每一个字节都有一个编号&#xff08;地址/指针&#xff09;指针变量可以存放这个地址/指针注&#xff1a;我们日常所说的指针&#xff0c;一般是指针变量下面让我们坐上指针进阶的直通车&#…

python编译helloworld_python3学习笔记--001--python HelloWorld

python默认使用UTF-8编码 一个python3版本的HelloWorld代码如下&#xff1a; #!/usr/bin/env python print (Hello World!) 如果此python脚本文件名为&#xff1a;hello.py&#xff0c;则运行此脚本文件的方法有两种&#xff1a; 1、python hello.py [laolanglocalhost python]…

漫谈 C++:良好的编程习惯与编程要点

点击蓝字关注我们以良好的方式编写C class假设现在我们要实现一个复数类complex&#xff0c;在类的实现过程中探索良好的编程习惯。① Header(头文件)中的防卫式声明complex.h: # ifndef __COMPLEX__ # define __COMPLEX__ class complex {} # endif防止头文件的内容被多次包含…

【C语言】指针进阶第二站:指针数组!

点击蓝字关注我们指针数组数组是一种类型的数的集合整型数组的元素都是int类型指针数组的元素都是指针变量int* arr1[10];//整型指针的数组char*arr2[10];//一级字符指针的数组char** arr3[5];//二级字符指针的数组参考这一份示意图示例1:定义多个字符指针在上一站的字符指针里…

C语言初学者常见错误 | 总结22点

点击蓝字关注我们正文一.语言使用错误在打代码的过程中&#xff0c;经常需要在中文与英文中进行转换&#xff0c;因此常出现一些符号一不小心就用错&#xff0c;用成中文。例如&#xff1a;“&#xff1b;”中文中的分号占用了两个字节&#xff0c;而英文中“;”分号只占用一个…

nginx配置vue项目500_一个Nginx部署多个vue前端项目总结

摘要&#xff1a;近来接手了一个二次开发的前后端分离模式的项目&#xff0c;其中在前端项目的部署上需要让2个前端项目都部署到一个IP地址和端口下&#xff0c;那么我们这里就要用到Nginx了&#xff0c;接下来我们看看如何在一个Nginx下部署2个前端项目的编译打包2个前端项目执…

【C语言】指针进阶第三站,数组指针!

点击蓝字关注我们数组指针整型指针&#xff1a;指向整型的指针字符指针&#xff1a;指向字符的指针数组指针&#xff1a;指向数组的指针基本概念下面哪个是数组指针呢&#xff1f;指针数组和数组指针的概念很容易混淆&#xff0c;一定要分清楚哦&#xff01;int *p1[10]; int (…

【C语言】指针进阶第四站:数组/指针的传参问题!

点击蓝字关注我们朋友们&#xff0c;到站啦&#xff01;指针进阶第四站&#xff1a;传参问题0.引例自定义函数里形参的类型&#xff0c;要和函数调用中传过去的实参类型相对应test函数里的是int类型&#xff0c;我们传过去的参数a也是int类型void test(int n) {} int main() {i…

python做自动化控制postman_python自动化测试入门篇-postman

接口测试基础-postman 常用的接口有两种&#xff1a;webservice接口和http api接口。 Webservice接口是走soap协议通过http传输&#xff0c;请求报文和返回报文都是xml格式。 http api接口是走http协议&#xff0c;通过路径来区分调用的方法&#xff0c;请求报文都是key-value形…

Python3实现红黑树[上篇]

Python3实现红黑树[上篇]由于时间有限&#xff0c;这次只写了红黑树添加节点&#xff0c;关于节点的删除放在下一讲 https://blog.csdn.net/qq_18138105/article/details/105324025。 关于红黑树的介绍&#xff0c;来由&#xff0c;性质和定义&#xff0c;可以看这篇文章&…

web应用程序并发测试_测试并发应用

web应用程序并发测试本文是我们名为Java Concurrency Essentials的学院课程的一部分。 在本课程中&#xff0c;您将深入探讨并发的魔力。 将向您介绍并发和并发代码的基础知识&#xff0c;并学习诸如原子性&#xff0c;同步和线程安全性的概念。 在这里查看 &#xff01; 目录…

深入理解存储器层次结构

点击蓝字关注我们1概述对于一个简单的计算机系统模型&#xff0c;我们可以将存储器系统看做是一个线性的字节数组&#xff0c;而 CPU 能够在一个常数时间内访问每个存储器的位置。实际上&#xff0c;存储器系统&#xff08;memory system&#xff09;是一个具有不同容量、成本和…

C++的一个指针占内存几个字节?

C的一个指针占内存几个字节&#xff1f;结论&#xff1a; 取决于是64位编译模式还是32位编译模式&#xff08;注意&#xff0c;和机器位数没有直接关系&#xff09; 在64位编译模式下&#xff0c;指针的占用内存大小是8字节在32位编译模式下&#xff0c;指针占用内存大小是4字…

【C语言】指针进阶第五站:函数指针!

点击蓝字关注我们函数指针函数也有自己的地址&#xff0c;函数名/&函数名 就是函数的地址1.1基本形式在 数组指针的学习中我们了解到int arr[5]; int (*pa)[5] &arr;//pa是数组指针指针变量pa的类型是int(*)[5]那么函数指针的形式是怎样的呢&#xff1f;void test(cha…