使用pycharm远程调试
使用pycharm 专业版,在设置解释器中,具备ssh 解释器功能;一般在本地无法调试远程端代码,机械性的scp传输文件十分影响工作效率,PyCharm的Pro支持远程Run,Debug,等可视化的功能。
使用pycharm 专业版, 在设置解释器中,具备ssh 解释器功能;
一般在本地无法调试远程端代码,机械性的scp传输文件十分影响工作效率,PyCharm的Pro支持远程Run,Debug,等可视化的功能。
- 操作系统:本地MacOS,远程Linux (本地3个操作系统都是支持的,远程Linux比较稳定)
- IDE: 最新版本 PyCharm Pro (不支持社区版)
- python虚拟环境:Anaconda,pip,virtualenv
1. 远程服务器上的环境配置
在使用本地的pycharm 远程 服务器上的pycharm ,
需要获取服务器上的如下信息;
- 服务器上的项目路径,需要将数据集提前准备好放在服务器上;
- 远程调试时,需要用到服务器中的环境路径, 指定到虚拟环境中的python 路径下面;
- 服务器端的用户名,ip 地址, port 端口;
1.1 服务器信息
从服务器上获取如下信息;
1. project path: pwd
/home/yons/Documents/python_proj/02_patch-mix_contrastive_learning/patch-mix_contrastive_learning-main
2. conda python environments path:
/home/yons/anaconda3/envs/torch2.1.0/bin/python3.8
3. Username: whoami
yons
4. ip, ifconfig
inet 192.168.xx.xx
5. port: use default
22
1.2 远程环境的配置
在服务器上, 需要检查三件事情,
1.2.1 ufw 已经启用
sudo ufw enable
检查状态:
要验证 SSH 规则是否已添加并且防火墙是否处于活动状态,请运行
sudo ufw status
1.2.2. 允许 端口22 进行通信
·注意, 尽量不要使用默认端口,
因为黑客 知道常用默认端口的 作用, 会使用端口扫描工具, 各个网段下的默认端口,
进而攻击 服务器;
个人的服务器11.18 号, 被攻击了,并且被攻击之后,
只要一上网, cpu 所有的核 就会被满负荷占满, 估计运算资源被占用。
所以修改自己的应用服务对应的端口,
比如其他端口, 比如改成4000, 黑客扫描后不至于一下猜到这是什么协议,用于什么应用;
使用端口 22, 是因为配置pycharm 中 端口默认的是22;
允许 SSH(端口 22):
现在 UFW 已启用,应该允许默认端口 22 上的 SSH 流量。使用以下命令:
sudo ufw allow 22/tcp
1.2.3. ssh 服务已经启动
检查 SSH 服务状态:
确保 SSH 服务正在远程服务器上运行。您可以使用以下命令检查其状态
sudo systemctl status ssh
如果该服务未运行,请使用以下命令启动它:
sudo systemctl start ssh
- 如果出现: unit ssh.service could not be found
列出名称中包含“ssh”的所有服务单元,可以使用以下命令:
systemctl list-units | grep ssh
如果没有输出的话,
要确定是否安装了 SSH,您可以使用特定于您的 Linux 发行版的包管理工具。
dpkg -l | grep openssh-server
如果未安装 SSH 服务器,您应该使用包管理器安装它。
例如,在 Ubuntu 上,您可以使用以下命令安装它:
sudo apt update
sudo apt install openssh-server
确保 SSH 服务确实已安装并在您的 Ubuntu 20.04 系统上正常运行。
sudo systemctl status ssh.service
如果服务正在运行,您应该会看到其状态并处于活动状态(正在运行)。
将 systemctl 与服务名称或别名一起使用时,使用完整的服务名称非常重要,在本例中为 ssh.service 。使用别名可能无法按预期工作。
sudo systemctl start ssh.service
1.3 新建或打开项目
首先在远程服务器上新建或者打开一个项目文件,
注意该项目文件后期会与本地的项目文件进行同步,
python虚拟环境可以使用之前的,或者自己新建一个。
这里需要记录下项目的路径,以及conda的python路径,在Linux系统下anaconda的虚拟环境一般会在当前用户目录下,例如:
/home/USER/.conda/envs/YOUR_CONDA_ENVIRONMENT/bin/pythonX
注意, 这里由于不同的版本迭代, 有的需要直接使用可执行的conda 文件, env/conda/bin/conda, 即不要使用自己新建的虚拟环境中的文件, 而是直接使用 conda 自身默认的 conda 可执行文件。

虚拟环境python路径
1.4 Remot Host
使用pycharm 中自带的
查看远程服务器中的, 文件目录信息,

1.5 sftp 配置
这一部分是当本地的机器使用 ssh 可以连接远程服务器是, 但是在本地进行项目的路径映射时, 使用 sftp 进行配置时, 出现,错误,
此时, 需要检查远程服务器端中配置文件;
sudo gedit /etc/ssh/sshd_config
验证 SFTP 的 SSH 子系统: 在远程服务器上,检查/etc/ssh/sshd_config文件以确保 SFTP 子系统已启用。查找以下行:
Subsystem sftp /usr/lib/openssh/sftp-server
如果丢失或不正确,请添加或修复它并重新启动 SSH 服务:
sudo systemctl restart sshd
至此, 自己的 sshd_config 中的配置文件内容是
Include /etc/ssh/sshd_config.d/*.conf
Port 22
PasswordAuthentication yes
PermitRootLogin yes
PubkeyAuthentication yes
ListenAddress 0.0.0.0
MaxAuthTries 5
#AddressFamily any
#ListenAddress ::
MaxStartups 10:30:100
MaxSessions 10
LogLevel DEBUG3
Subsystem sftp /usr/lib/openssh/sftp-server
2. 本地远程连接
2.1 pycharm新建项目
在本地端使用PyCharm打开之前的项目,或者新建一个项目,Interpreter暂时选择本地的,
这里的 暂时表示 后续,我们会替换成服务器上的虚拟环境;

- 使用⌘,打开Preferences菜单,新建一个python环境。
2.2 添加新的Interpreter
Preference --> Python Interpreter --> Add

2.3 登录服务器
- 选择SSH Interpreter --> New server configuration
填写远程端的IP,Port,以及Username,点击Next,输入远程用户登录密码。

- 填写远程python路径,以及项目路径用于同步代码,点击Finish即可。

在本地就可以加载远程端python环境了。
2.4 设置文件同步映射
Tools --> Deployment --> Configuration

- 填写远程端的ip地址,Type为SFTP模式,项目路径,完成点击确认。


- 同步文件,可以使用快捷键,也可以右键后点击同步即可实现将本地端文件发送至远程端文件夹中,pycharm也会自动上传本地文件。


2.5 运行、调试远程代码
- 同步文件后在本地端运python代码,可以看到是在远程环境下运行文件。

- 调试,打断点也可以实现。

- 远程python环境第一次新建之后,可以在Exist里找到,可以重复使用,每次只用修改映射的文件夹路径即可;
- 远程调试在多线程、多进程可能会出现问题,pytorch代码时,worker尽量设置成0;
- 可视化的脚本目前是支持OpenCV和Matplotlib可视化。
2.6 远程库的加载

当你的程序可以使用远程的环境或者调试时, 但是,本地中仍然无法正常加载远程的环境,
此时需要进行如下验证,
确保您的 SSH 密钥设置正确并且具有远程服务器的适当权限。
ssh remote_name@xxxx.xxxx.one -p your_port
如果它要求输入密码,则您的私钥可能配置不正确。在这种情况下:
检查您本地的~/.ssh/config文件以确保设置正确:
Host server_name
HostName xxx.xxx.one
Port your_port
User remote_name
IdentityFile ~/.ssh/id_rsa
确保id_rsa文件存在并具有正确的权限 ( chmod 600 ~/.ssh/id_rsa )
如果您的私钥需要密码,请确保 SSH 代理正在运行并且密钥已加载:
ssh-add ~/.ssh/id_rsa
然后打开自己加载的远程的环境, 检查自己的远程环境是否包含了多个已经安装的第三方库,
如torch, torch_lighting 这些都是在 site_package 中的;
并且上面的远程的ssh 服务器测试连接, 正常通过后,
请强制 PyCharm 清除其缓存:
Go to File > Invalidate Caches / Restart.转至文件 > 使缓存无效/重新启动。
Select Invalidate and Restart.选择“无效并重新启动” 。
This action forces PyCharm to reindex all project files and the remote environment.此操作强制 PyCharm 重新索引所有项目文件和远程环境。

在这之后,本地应该可以正常加载远程端的环境了

reference
https://zhuanlan.zhihu.com/p/265152953
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)