最近在使用学校 HPC / GPU 服务器时,遇到了一个比较折磨的问题:本地 PyCharm Professional 通过 SSH 配置远程 Python Interpreter 时,前面的 SSH 连接都是正常的,但是到了最后一步选择 Path to conda 时一直转圈,导致无法正常选择 Conda 环境。
折腾了一圈之后,最终发现问题不一定出在 SSH、服务器、Conda 环境本身,而是本地 PyCharm 的 SSH Interpreter 配置流程在某些远程容器环境下不稳定。最后我的解决方式是:不用传统的本地 PyCharm + SSH Interpreter,而是改用 JetBrains Remote Development。
这篇文章记录一下整个过程,避免之后自己忘记,也给类似环境下踩坑的人一个参考。
1. 使用场景
我的环境大概是这样:
- 本地系统:Windows
- IDE:PyCharm Professional
- 远程环境:学校 HPC / GPU 服务器
- 连接方式:SSH
- 远程代码目录:服务器上的持久化挂载目录
- Python 环境:Conda 环境,放在个人目录下
例如我的目录结构大致类似:
bash
/hpc2hdd/home/<group>/<user>/
├── envs/
│ └── xxx-py39/
└── projects/
├── project1/
└── project2/
这里需要注意,项目和 Conda 环境最好放在服务器的持久化目录下,而不是 /tmp 这种临时目录。
2. 原本想用的方式
一开始我想用的是 PyCharm 常见的远程解释器配置方式:
sql
Settings
→ Python
→ Interpreter
→ Add Interpreter
→ On SSH
→ Existing SSH
→ Select existing
→ Conda
理论上,最后一步应该选择:
javascript
Path to conda:
/hpc2hdd/home/<group>/miniconda3/bin/conda
Environment:
/hpc2hdd/home/<group>/<user>/envs/xxx-py39
但是实际情况是:Path to conda 一直转圈,加载不出来。

3. 问题现象
奇怪的是,SSH 本身并没有问题。
例如这些都可以正常工作:
xml
ssh <username>@ <host> -p <port>
Web 终端也可以正常进入服务器。
Conda 环境也确实存在:
bash
ls -ld /hpc2hdd/home/<group>/<user>/envs/xxx-py39
Python 也可以正常运行:
bash
/hpc2hdd/home/<group>/<user>/envs/xxx-py39/bin/python --version
也可以输出当前解释器路径:
bash
/hpc2hdd/home/<group>/<user>/envs/xxx-py39/bin/python -c "import sys; print(sys.executable)"
Conda 本身也能正常返回 JSON:
bash
timeout 30 /hpc2hdd/home/<group>/miniconda3/bin/conda info --json > /tmp/conda-info.json
echo $?
如果返回 0,说明 conda 命令本身没有卡死。
所以问题并不是"服务器连不上",也不是"Conda 坏了",而是 PyCharm 本地 SSH Interpreter 配置流程在探测远程 Conda 时卡住了。
4. 尝试过但没有根本解决的方法
我尝试过:
- 重启 PyCharm
- 重启电脑
- Invalidate Caches / Restart
- 更新 PyCharm 到新版
- 换不同的远程容器
- 换 VSCode 类型容器 / JupyterLab 类型容器
- 确认 SSH、SFTP、Web 终端都能正常连接
这些方法对 SSH 本身有效,但没有稳定解决 Path to conda 一直转圈的问题。
5. 最终解决方案:使用 Remote Development
最后采用的是 JetBrains 的 Remote Development。
入口大概是:
sql
PyCharm
→ Remote Development
→ SSH
→ 选择已有 SSH 连接
→ 选择远程项目目录
→ Download IDE Backend and Connect
项目目录选择服务器上的真实项目路径,例如:
bash
/hpc2hdd/home/<group>/<user>/projects/project1
第一次连接时,PyCharm 会提示下载 IDE Backend,比如 1G 多。这个下载的是远程服务器上的 IDE 后端,不是普通意义上把整个 IDE 装到本地 C 盘。简单理解就是:
本地电脑只是显示界面,真正的 PyCharm 后端、索引、运行、解释器探测都发生在远程服务器上。
连接完成后,会打开一个新的远程 PyCharm 窗口。
这时再配置解释器:
sql
Settings
→ Python
→ Interpreter
→ Add Interpreter
→ On SSH
→ Select existing
→ Conda
这一次 Path to conda 就可以正常加载了。
填写:
bash
Path to conda:
/hpc2hdd/home/<group>/miniconda3/bin/conda
选择已有环境:
bash
/hpc2hdd/home/<group>/<user>/envs/xxx-py39
最后点击 Create / Apply 即可。
6. 为什么 Remote Development 可以解决?
我的理解是:
传统方式是:
本地 PyCharm
→ 通过 SSH 探测远程服务器
→ 再尝试识别 Conda
→ 再配置远程 Interpreter
而 Remote Development 是:
PyCharm 后端直接运行在服务器上
→ 在服务器本地识别 Conda 和 Python
→ 本地电脑只是显示界面
所以对于 HPC、容器、共享挂载目录这类复杂环境,Remote Development 更稳定。
7. 本地 PyCharm + SSH Interpreter 和 Remote Development 的区别
| 对比项 | 本地 PyCharm + SSH Interpreter | Remote Development |
|---|---|---|
| IDE 后端运行位置 | 本地 Windows | 远程服务器 |
| 代码主要位置 | 本地为主,再同步到服务器 | 服务器为主 |
| 文件同步 | 依赖 Deployment / SFTP / Auto Upload | 一般不需要同步 |
| Conda 探测 | 本地 PyCharm 通过 SSH 探测远程 | 远程 PyCharm 后端直接探测 |
| 适合场景 | 普通远程服务器、小项目 | HPC、远程容器、大项目、复杂环境 |
| 常见问题 | Path to conda 卡住、同步映射问题 | 第一次需要下载远程 IDE Backend |
8. 新项目应该怎么操作?
我的推荐流程是:
第一步:在服务器上创建项目目录
bash
mkdir -p /hpc2hdd/home/<group>/<user>/projects
mkdir -p /hpc2hdd/home/<group>/<user>/envs
例如:
bash
/hpc2hdd/home/<group>/<user>/projects/project1
第二步:把代码放到服务器项目目录
可以使用:
- PyCharm Remote Development 打开后直接操作
- FileZilla / SFTP
- git clone
- scp / rsync
例如:
bash
cd /hpc2hdd/home/<group>/<user>/projects
git clone <your_repo_url> project1
第三步:命令行创建 Conda 环境
不要强依赖 PyCharm 图形界面创建环境,可以直接在 Web 终端或 SSH 终端中创建:
bash
/hpc2hdd/home/<group>/miniconda3/bin/conda create \
-p /hpc2hdd/home/<group>/<user>/envs/xxx-py39 \
python=3.9 -y
激活环境:
bash
conda activate /hpc2hdd/home/<group>/<user>/envs/xxx-py39
第四步:安装依赖
进入项目目录:
bash
cd /hpc2hdd/home/<group>/<user>/projects/project1
安装依赖:
pip install -r requirements.txt
如果项目需要 editable install,再执行:
erlang
python -m pip install -e .
9. python -m pip install -e . 是什么意思?
这个命令不是"同步文件",也不是"上传代码"。
它的意思是:
把当前项目以 editable mode 安装到当前 Python 环境里。
也就是说,Python 环境会知道当前这个源码目录就是一个可导入的包。
例如项目目录里有:
arduino
project1/
setup.py
pyproject.toml
执行:
erlang
python -m pip install -e .
之后,你在代码里修改源码,Python 运行时可以直接读取当前源码目录里的内容,而不需要每次修改后重新 pip install。
它解决的是"Python 环境如何识别当前项目包"的问题,而不是"本地代码如何同步到服务器"的问题。
10. 需要注意的坑
1. 不要把项目和环境放在 /tmp
/tmp 可能是临时目录,容器停止或环境重启后可能丢失。
推荐放在持久化目录,例如:
bash
/hpc2hdd/home/<group>/<user>/projects
/hpc2hdd/home/<group>/<user>/envs
2. Remote Host 面板不是必须打开
如果使用 Remote Development,左侧 Project 目录本身就已经是服务器上的项目目录。
右侧 Remote Host 面板只是一个远程文件浏览器,不是必须使用。
3. PyCharm Community Edition 不支持完整远程开发功能
如果要使用 SSH Interpreter / Remote Development,建议使用 PyCharm Professional 或新版统一产品中带有专业功能的版本。
4. 看到多个 SSH 配置或 (2) 不一定有问题
PyCharm 里可能会出现多个 SSH 配置,例如:
ruby
user@host:port password
user@host:port password (2)
这通常只是 PyCharm 保存了多个连接配置,不一定代表不同服务器,也不一定代表不同 GPU。
真正要确认的是:
- SSH 用户名是否正确
- Host 是否正确
- Port 是否正确
- 项目目录是否正确
- Conda 环境路径是否正确
11. 总结
这次问题的核心不是 SSH 连不上,也不是 Conda 环境坏了,而是本地 PyCharm 的 SSH Interpreter 配置流程在探测远程 Conda 时卡住。
最终比较稳定的方案是:
- 在服务器 Web 终端或 SSH 终端中手动创建 Conda 环境;
- 把项目代码放在服务器持久化目录;
- 使用 PyCharm Remote Development 打开远程项目;
- 在远程 PyCharm 后端里选择已有 Conda 环境。
简单来说:
本地 PyCharm + SSH Interpreter 是"本地 IDE 操作远程环境";
Remote Development 是"远程服务器上跑 IDE 后端,本地只是显示界面"。
对于学校 HPC、共享 GPU 容器、远程挂载目录这种场景,Remote Development 反而更符合实际使用方式。