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;还是有一些简单的编程习惯可以极大地提高代码的安全性。尽管看上去…

unity创建和销毁对象_如何创建和销毁对象

unity创建和销毁对象本文是我们名为“ 高级Java ”的学院课程的一部分。 本课程旨在帮助您最有效地使用Java。 它讨论了高级主题&#xff0c;包括对象创建&#xff0c;并发&#xff0c;序列化&#xff0c;反射等。 它将指导您完成Java掌握的旅程&#xff01; 在这里查看 &…

Python3实现打家劫舍问题

Python3实现打家劫舍问题原题 https://leetcode-cn.com/problems/house-robber/ 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同…

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

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

js 序列化内置对象_内置序列化技术

js 序列化内置对象本文是我们名为“ 高级Java ”的学院课程的一部分。 本课程旨在帮助您最有效地使用Java。 它讨论了高级主题&#xff0c;包括对象创建&#xff0c;并发&#xff0c;序列化&#xff0c;反射等。 它将指导您完成Java掌握的旅程&#xff01; 在这里查看 &#x…

C++ 基本的输入输出

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

Python3有效括号问题

Python3有效括号问题原题 https://leetcode-cn.com/problems/valid-parentheses/ 给定一个只包括 ‘(’&#xff0c;’)’&#xff0c;’{’&#xff0c;’}’&#xff0c;’[’&#xff0c;’]’ 的字符串&#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左…

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…

Python3最长连续递增序列问题

Python3最长连续递增序列问题原题 https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence/ 题目&#xff1a; 给定一个未经排序的整数数组&#xff0c;找到最长且连续的的递增序列。 示例 1: 输入: [1,3,5,4,7] 输出: 3 解释: 最长连续递增序列是 [1…

访问nfs_通过NFS访问编年引擎

访问nfs总览 编年史引擎是数据虚拟化层。 它抽象化了访问&#xff0c;操作和订阅各种数据源的复杂性&#xff0c;因此该数据的用户无需知道实际存储数据的方式或位置。 这意味着该数据可以在系统之间迁移或以更有效的方式存储&#xff0c;但对于开发人员来说使用起来很复杂。 …

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

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

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

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

漫反射 高光反射_如何有效地使用反射

漫反射 高光反射本文是我们名为“ 高级Java ”的学院课程的一部分。 本课程旨在帮助您最有效地使用Java。 它讨论了高级主题&#xff0c;包括对象创建&#xff0c;并发&#xff0c;序列化&#xff0c;反射等。 它将指导您完成Java掌握的旅程&#xff01; 在这里查看 &#xff…

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防止头文件的内容被多次包含…

Python3只出现一次数字

Python3只出现一次数字原题 https://leetcode-cn.com/problems/single-number/ 题目&#xff1a; 给定一个非空整数数组&#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 说明&#xff1a; 你的算法应该具有线性时…

junit测试找不到数据库_将数据库日志添加到JUnit3

junit测试找不到数据库在过去的十年中&#xff0c;我们已经编写了成千上万的JUnit3测试&#xff0c;现在正尝试将结果合并到数据库中&#xff0c;而不是分散的日志文件中。 事实证明&#xff0c;扩展TestCase类非常容易做到这一点。 注意&#xff1a;这种方法并不直接适用于JUn…

python float 精度_浅谈Python里面小数点精度的控制

要求较小的精度 round()内置方法 这个是使用最多的&#xff0c;刚看了round()的使用解释&#xff0c;也不是很容易懂。round()不是简单的四舍五入的处理方式。 For the built-in types supporting round(), values are rounded to the closest multiple of 10 to the power min…

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

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