尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Windows+PyCharm远程连接Linux服务器:Anaconda虚拟环境配置与开发实战
1. 为什么这套组合拳值得花时间搭一次很多人第一次接触远程开发脑子里冒出来的方案是“本地写代码写完手动传到服务器上跑”。代码量小的时候这招还能凑合一旦项目里出现多个模块互相引用、依赖包版本打架、数据文件几十个G手动传文件就会变成一场灾难。我见过太多人在这上面浪费时间本地跑通了传到服务器上因为Python版本不一致直接报错服务器上装好的包本地调试时又缺东少西来回折腾一整天真正写代码的时间不到两小时。这套方案的核心思路其实很朴素把算力和环境放在服务器上把编辑和调试留在本地。Windows机器负责提供顺手的图形界面和编辑器Linux服务器负责跑训练、跑数据处理、跑长时间任务。中间靠SSH这条通道把两边连起来再用PyCharm的远程解释器功能让本地IDE直接调用服务器上的Python环境。这样一来你在PyCharm里敲的每一行代码实际执行时用的都是服务器上的CPU、内存和GPU本地机器只负责显示结果。具体来说这套流程解决三个层面的问题。第一层是连接问题Windows和Linux之间怎么稳定地建立命令行通道怎么免密登录怎么传文件。第二层是环境问题服务器上怎么装Anaconda怎么创建独立的虚拟环境怎么保证不同项目的依赖互不干扰。第三层是开发效率问题怎么让PyCharm识别远程环境怎么配置解释器路径怎么让代码自动同步到服务器怎么在本地打断点调试远程代码。适合读这篇内容的人我大致分三类。一类是刚拿到服务器账号、之前只在本地写过Python的开发者对Linux命令和远程连接不太熟需要一份能照着走的操作手册。一类是已经在用远程服务器但还在手动传文件的开发者想把这套流程规范化减少重复劳动。还有一类是带团队的技术负责人需要给组里新人一套标准化的环境搭建流程避免每个人踩不同的坑。不管你是哪一类下面这些步骤和参数都是我在实际项目里反复验证过的照着做基本不会出大问题。需要提前说明的是这套方案对网络环境有一定要求。服务器需要开放SSH端口本地能ping通服务器地址这是前提条件。如果服务器在内网或者有防火墙限制需要先找运维确认端口和访问权限。另外PyCharm的远程解释器功能在专业版里支持得最完整社区版虽然也能用SSH终端但远程解释器配置会麻烦一些这一点后面会详细说。2. 连接前的准备工作与工具选型2.1 Windows端工具怎么选Windows下连接Linux服务器工具选择其实不少但真正顺手的不多。我按使用频率排个序你可以根据自己的习惯挑。Windows Terminal OpenSSH是目前最推荐的组合。Windows 10 1809版本之后系统自带了OpenSSH客户端不需要额外装Putty或者Xshell。Windows Terminal是微软官方的终端工具支持多标签、分屏、自定义配色用起来比传统的cmd窗口舒服太多。安装方式也简单直接在Microsoft Store里搜“Windows Terminal”就能装或者用winget命令一行搞定。MobaXterm是另一个选择优点是自带SFTP文件浏览器左边是终端右边是文件树拖拽上传下载很方便。缺点是免费版有会话数量限制而且界面风格偏老派。如果你经常需要传文件又不想额外开一个SFTP工具MobaXterm可以省事。Xshell Xftp这套组合在国内用户里口碑不错Xshell的终端体验很流畅Xftp传文件也稳定。但要注意Xshell个人版免费、商业版收费公司里用需要确认授权问题。我个人的建议是主力用Windows Terminal OpenSSH传文件用scp命令或者WinSCP。原因很简单系统自带的东西最稳定不依赖第三方软件的更新节奏而且命令行操作容易脚本化后面做自动化部署时优势明显。2.2 SSH密钥免密登录的配置逻辑每次连服务器都要输密码时间长了谁都烦。SSH密钥登录不仅省事还比密码更安全因为密钥几乎不可能被暴力破解。配置逻辑分三步本地生成密钥对、把公钥传到服务器、服务器端启用密钥认证。在Windows Terminal里执行ssh-keygen -t rsa -b 4096 -C your_emailexample.com-t rsa指定密钥类型-b 4096指定密钥长度4096位比默认的2048位更安全生成时间也就多几秒。-C后面跟的是注释一般写邮箱或者用途说明方便以后识别这把钥匙是给哪台服务器用的。执行后会提示你输入保存路径直接回车用默认路径就行一般在C:\Users\你的用户名\.ssh\id_rsa。然后会问你要不要设置passphrase这个相当于给密钥再加一层密码。我的建议是本地开发机可以不设服务器上如果安全要求高就设一个。不设的话登录完全无感设了的话每次登录要多输一次密码但即使密钥文件泄露别人没有passphrase也用不了。生成完密钥对后需要把公钥传到服务器。公钥文件是id_rsa.pub注意不要传错成私钥id_rsa。传的方法有两种一种是用ssh-copy-id命令但Windows下这个命令不一定有可以用下面这条替代type $env:USERPROFILE\.ssh\id_rsa.pub | ssh usernameserver_ip cat ~/.ssh/authorized_keys这条命令的意思是读取本地公钥文件内容通过SSH管道传到服务器追加写入服务器的authorized_keys文件。执行时会要求输入一次服务器密码输完就配置好了。注意服务器的~/.ssh目录权限必须是700authorized_keys文件权限必须是600。权限不对的话SSH会拒绝使用密钥登录这是很多人配完密钥发现还是要输密码的原因。用chmod 700 ~/.ssh和chmod 600 ~/.ssh/authorized_keys修正即可。2.3 服务器端基础环境检查连上服务器之后别急着装Anaconda先花两分钟检查一下基础环境。我踩过的坑里有一半是因为服务器上缺了某个基础库导致Anaconda装完跑不起来。先看系统版本和架构uname -a cat /etc/os-releaseuname -a看内核版本和CPU架构/etc/os-release看发行版信息。这两个信息决定了你下载Anaconda安装包时选哪个版本。比如是x86_64还是aarch64是CentOS还是Ubuntu对应的安装包和依赖库都不一样。再看磁盘空间df -hAnaconda完整版装完大概占3到5个G加上后续创建的虚拟环境和安装的包建议/home目录至少留20G空间。如果空间不够可以装Miniconda体积小很多只包含conda和Python其他包按需安装。最后看是否已经有Python或者condawhich python which conda python --version如果服务器上已经有系统自带的Python不影响Anaconda安装但要注意PATH环境变量的优先级。Anaconda装完后会把conda的路径加到PATH最前面这样默认用的就是Anaconda的Python。如果不想影响系统Python可以在安装时选择不初始化conda到PATH后面手动source激活。3. Anaconda安装与虚拟环境管理3.1 下载与安装Anaconda的正确姿势Anaconda官方下载页面在国内访问速度不太稳定我一般直接用清华镜像站下载速度快很多。先确认服务器能连外网然后执行wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2024.02-1-Linux-x86_64.sh版本号可以根据需要调整2024.02这个版本比较稳定Python版本是3.11兼容性不错。下载完成后先验证文件完整性sha256sum Anaconda3-2024.02-1-Linux-x86_64.sh对比官网公布的SHA256值一致的话说明下载没问题。这一步很多人会跳过但网络传输过程中文件损坏的情况并不罕见装到一半报错再回头查很浪费时间。开始安装bash Anaconda3-2024.02-1-Linux-x86_64.sh安装过程会问几个问题。第一个是许可协议按回车翻页最后输入yes同意。第二个是安装路径默认是/home/你的用户名/anaconda3我建议保持默认因为自定义路径后面配置环境变量时容易写错。第三个是是否运行conda init选yes这样会自动把conda加到shell配置里。安装完成后关闭当前终端重新打开或者执行source ~/.bashrc然后验证conda --version python --version如果conda --version能输出版本号说明安装成功。如果提示conda: command not found检查~/.bashrc里有没有下面这段# conda initialize __conda_setup$(/home/你的用户名/anaconda3/bin/conda shell.bash hook 2 /dev/null) if [ $? -eq 0 ]; then eval $__conda_setup else if [ -f /home/你的用户名/anaconda3/etc/profile.d/conda.sh ]; then . /home/你的用户名/anaconda3/etc/profile.d/conda.sh else export PATH/home/你的用户名/anaconda3/bin:$PATH fi fi unset __conda_setup # conda initialize 没有的话手动加上然后重新source。3.2 虚拟环境创建与依赖隔离虚拟环境是这套方案里最值得花时间理解的概念。简单说就是给每个项目单独建一个“房间”房间里装这个项目需要的Python版本和依赖包项目之间互不干扰。没有虚拟环境的话所有项目共用一个PythonA项目需要numpy 1.20B项目需要numpy 1.24装哪个版本都会让另一个项目跑不起来。创建虚拟环境的命令conda create -n myproject python3.10-n后面跟环境名python3.10指定Python版本。环境名建议用项目名或者用途命名比如nlp_exp、cv_train不要用test1、env2这种过两周自己都忘了是干什么的。创建完成后激活conda activate myproject激活后命令行提示符前面会出现(myproject)表示当前在这个环境里。这时候用pip install或者conda install装的包都只装在这个环境里不会影响其他环境。查看所有环境conda env list删除不需要的环境conda remove -n myproject --all导出环境配置方便在其他机器上复现conda env export environment.yml在其他机器上根据这个文件创建环境conda env create -f environment.yml实操心得conda env export导出的文件里会包含很多系统相关的依赖跨平台复现时可能出问题。我一般用conda env export --no-builds去掉build号或者手动维护一个requirements.txt只记录核心包。另外conda和pip混用时要小心先用conda装能装的包conda没有的再用pip装反过来容易导致依赖冲突。3.3 国内镜像源配置加速下载服务器在国内的话conda默认源下载速度可能很慢。配置清华镜像源可以显著提速conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ conda config --set show_channel_urls yespip的镜像源也配一下pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple配置完后conda install和pip install都会从国内源下载速度能快十倍以上。如果某个包在镜像源里找不到可以临时用官方源pip install somepackage -i https://pypi.org/simple注意镜像源同步官方源有一定延迟刚发布的新版本包可能还没有。遇到这种情况不用慌等一两天或者临时切官方源就行。4. PyCharm远程解释器配置全流程4.1 专业版与社区版的差异说明PyCharm的远程解释器功能在专业版里是原生支持的配置界面直观功能完整。社区版虽然也能通过SSH连接服务器但远程解释器配置需要绕一些弯路而且不支持远程调试和远程部署的高级功能。如果你用的是社区版有两个替代方案。一是用VS Code的Remote-SSH插件功能上能覆盖大部分远程开发需求配置也简单。二是用PyCharm社区版配合sshfs把服务器目录挂载到本地然后当本地项目打开但这种方式对网络稳定性要求高断线后需要重新挂载。我下面的配置步骤以专业版为准社区版用户可以把PyCharm部分替换成VS Code的操作核心逻辑是一样的让编辑器知道远程Python解释器的路径知道代码文件在服务器上的位置知道怎么把本地修改同步过去。4.2 配置SSH连接与解释器路径打开PyCharm进入File - Settings - Project - Python Interpreter点击右上角的齿轮图标选择Add Interpreter - On SSH。第一步填服务器连接信息Host填服务器IPPort默认22Username填你的登录名。认证方式选Key pair然后指定本地私钥文件路径就是之前生成的id_rsa。如果私钥设了passphrase这里也要填。填完后点Test Connection显示成功说明连接没问题。如果失败检查服务器SSH服务是否正常运行防火墙是否放行22端口私钥权限是否正确。第二步配置远程解释器路径。PyCharm会自动探测服务器上的Python路径但有时候探测不准需要手动指定。Anaconda环境下的Python路径一般是/home/你的用户名/anaconda3/envs/myproject/bin/python注意这里要选虚拟环境里的Python不是base环境里的。选base环境的话项目依赖就装到base里了失去了虚拟环境隔离的意义。第三步配置代码同步路径。PyCharm需要知道本地项目目录对应服务器上的哪个目录。比如本地项目在D:\projects\myproject服务器上放在/home/username/projects/myproject就在这里填对应关系。同步方式选Automatic Upload这样本地改完文件按CtrlS就会自动传到服务器。配置完成后在PyCharm里新建一个Python文件输入import sys print(sys.executable) print(sys.version)运行后如果输出的路径是服务器上的Anaconda环境路径说明配置成功。如果输出的是本地Windows的Python路径说明解释器没选对回去检查配置。4.3 代码同步与远程运行机制PyCharm的远程开发机制是这样的代码文件存在本地编辑也在本地但执行时PyCharm会把文件上传到服务器然后在服务器上调用远程Python解释器执行再把执行结果传回本地显示。理解这个机制很重要因为它决定了哪些操作是高效的哪些是低效的。高效的操作本地编辑代码、本地查看运行结果、本地管理项目结构。低效的操作在本地处理大文件、在本地跑数据预处理。大文件应该直接放在服务器上代码里用服务器上的绝对路径引用不要试图把几个G的数据同步到本地再传回去。关于代码同步有几个细节要注意。一是.git目录和__pycache__目录不需要同步可以在Tools - Deployment - Options - Exclude items by name里排除掉减少同步数据量。二是数据文件如果很大不要放在项目目录里单独在服务器上建一个数据目录代码里用绝对路径引用。三是同步冲突的处理如果本地和服务器上都改了同一个文件PyCharm会提示你选择保留哪个版本这时候要仔细看diff别选错了覆盖掉重要修改。实操心得我习惯在服务器上建一个/home/username/projects/目录专门放项目代码本地项目名和服务器项目名保持一致这样路径映射关系清晰不容易搞混。另外PyCharm的自动同步偶尔会抽风改完文件没传上去运行时报错说找不到模块。遇到这种情况手动按一下CtrlAltShiftXUpload to...强制同步一次。5. 实操中容易踩的坑与排查技巧5.1 连接类问题速查问题现象可能原因排查方法SSH连接超时服务器防火墙未放行22端口联系运维确认端口开放情况密钥登录仍要密码authorized_keys权限不对chmod 600 ~/.ssh/authorized_keys连接频繁断开网络不稳定或SSH超时设置太短在~/.ssh/config加ServerAliveInterval 60PyCharm测试连接失败私钥格式不兼容用ssh-keygen -p -m PEM转换格式SSH连接超时是最常见的问题。如果服务器在内网确认本地是否在同一个网络环境或者是否有权限访问内网。如果服务器在云端检查安全组规则是否放行了你的IP。有些服务器会限制登录IP需要先在控制台把本地公网IP加到白名单。连接频繁断开的问题多半是网络波动导致的。可以在本地~/.ssh/config文件里加几行配置Host * ServerAliveInterval 60 ServerAliveCountMax 3意思是每60秒发一次心跳包连续3次没响应才断开。这样即使网络短暂波动连接也不会立刻断掉。5.2 环境类问题排查虚拟环境激活失败是新手常遇到的问题。执行conda activate myproject提示CommandNotFoundError说明conda没有正确初始化。先执行source ~/anaconda3/etc/profile.d/conda.sh然后再activate。如果每次都要这样很麻烦把上面这条命令加到~/.bashrc里。pip安装包时报权限错误说明你在用系统Python而不是虚拟环境里的Python。检查which pip输出的路径应该是/home/username/anaconda3/envs/myproject/bin/pip。如果不对先conda activate myproject再装。包版本冲突是另一个高频问题。A包依赖numpy 1.20B包依赖numpy 1.24同时装就会冲突。解决办法是创建独立环境或者用conda install而不是pip installconda的依赖解析器更强能自动找到兼容的版本组合。5.3 PyCharm远程调试的注意事项远程调试时断点不生效多半是因为代码同步没完成。PyCharm执行调试时用的是服务器上的文件如果本地改了代码但没同步上去断点位置就对不上。养成习惯改完代码先按CtrlS确认右下角同步进度条走完再点调试按钮。调试过程中查看变量值如果变量是大型DataFrame或者TensorPyCharm加载会卡顿。这时候可以用print输出关键信息或者在代码里加import pdb; pdb.set_trace()在服务器端进入交互式调试比PyCharm的图形化调试器轻量很多。还有一个坑是路径问题。本地Windows用反斜杠\服务器Linux用正斜杠/代码里写路径时要用os.path.join或者pathlib不要硬编码分隔符。数据文件的路径要用服务器上的绝对路径不要用相对路径因为PyCharm执行时的当前工作目录可能和你预期的不一样。6. 日常使用中的效率技巧6.1 常用命令别名配置在服务器~/.bashrc里加几个别名能省不少敲键盘的时间alias caconda activate alias clconda env list alias llls -alh alias gsgit status alias gpgit pull改完source ~/.bashrc生效。这样以后激活环境只需要ca myproject查看环境列表只需要cl。6.2 多项目环境切换策略同时维护多个项目时环境切换频繁。我的做法是给每个项目写一个activate.sh脚本放在项目根目录#!/bin/bash conda activate myproject export PROJECT_HOME/home/username/projects/myproject cd $PROJECT_HOME每次开始工作前source activate.sh一下环境、路径、目录全部就位。切换项目时再source另一个项目的脚本干净利落。6.3 环境备份与迁移服务器迁移或者重装时环境重建很耗时。定期导出环境配置是个好习惯conda env export -n myproject --no-builds myproject_env.yml--no-builds去掉build号跨平台兼容性更好。恢复时conda env create -f myproject_env.yml如果有些包是通过pip装的conda env export可能抓不全额外维护一个requirements.txtpip freeze requirements.txt恢复时先conda env create再pip install -r requirements.txt补全。最后分享一个小技巧PyCharm的远程解释器配置可以导出成模板换项目时直接复用。在Settings - Python Interpreter里配置好一个远程解释器后新建项目时选择这个解释器SSH连接信息和同步路径会自动带过来只需要改一下项目路径映射就行。我一般给每个服务器建一个解释器模板换项目时省去重复填连接信息的时间。
RELATED

相关推荐

Windows批量创建软链接的工程化实践与避坑指南

Windows批量创建软链接的工程化实践与避坑指南

1. 为什么Windows下批量建软链接这件事,比你想象中更值得深挖“dos bat批量创建软链接”——看到这个标题,很多老手第一反应是:“cmd里mklink不就能干?写个for循环不就完了?”我最初也是这么想的。直到去年在某跨平台系…

📅 2026/10/17 4:29:04
Python数据可视化实战:掌握Matplotlib核心与图表技巧

Python数据可视化实战:掌握Matplotlib核心与图表技巧

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/17 4:29:04
浮点数表达式求值:基于栈的数据结构实现与精度控制

浮点数表达式求值:基于栈的数据结构实现与精度控制

1. 项目概述:为什么一个“浮点数计算器”能成为数据结构课设的硬核选题“浮点数计算器”这五个字乍看平平无奇,像是大一刚学完C语言就能敲出来的控制台小玩具。但当你把它放进《数据结构》课程设计的语境里,它立刻从“能算就行”的功能型程序…

📅 2026/10/17 4:29:04
MORE NEWS

更多资讯

📰

Multi-DBSCAN多密度聚类算法解析与Python实践

做空间聚类的人大概都遇到过这种尴尬:数据里有几坨挤得很紧的点簇,又有几片散得跟芝麻似的稀疏簇。经典的 DBSCAN 只给一套eps和min_samples,半径定小了,稀疏簇被当成噪声;半径定大了,密集簇又粘成一团。我…

📰

Android逆向入门:APK反编译、重打包与签名工具链实战

简介:这套工具面向Android开发、安全测试和逆向学习人员,将apktool、dex2jar、jd-gui、autosign等常用组件整合为一体化逆向助手,能够完成APK反编译、DEX转JAR、Java代码查看、重签名等核心操作,帮助使用者快速分析应用结构、定位…

📰

AI对话小程序模板实战:云函数中转与流式渲染全解析

简介:这是一份AI人工智能机器人对话微信小程序的完整前端模板,面向具有一定编程基础、需要快速搭建对话类小程序界面的开发者。模板采用HBuilder编写,涵盖对话消息展示、输入交互、会话列表、表情与快捷回复等基础模块,但不含后端…

📰

AI微服务底座向导式安装:从零跑通环境工程实践

最近好几个人问我同一个问题:手里有模型、有数据、也有业务场景,但想把 AI 能力真正跑成一个能给多个团队调用的服务,第一步到底该怎么迈?我自己去年也在这个问题上卡了很久——模型文件下好了,代码也能本地跑通&#…

📰

Unity3D 2D射击游戏实战:雷霆战机演示工程全解析

简介:这是一份基于 Unity 3D 引擎制作的 2D 飞行射击游戏案例——雷霆战机演示工程,面向 Unity 初级学习者和 2D 游戏开发者。资源包含完整的项目文件与运行演示内容,可用于研究经典竖版射击游戏的核心玩法与场景组织方式。压缩包内共 1740 个…

📰

Activiti运行时变量表ACT_RU_VARIABLE:字段、类型与调优全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬