
很多刚学编程的朋友问我Python开发环境到底怎么搭才算“干净”。我见过太多人电脑上同时躺着Python 2.7、3.8、3.11三个版本pip install的包散落在各个目录里环境变量改得乱七八糟装一个库把另一个项目搞崩溃最后只能重装系统。其实问题不在于你用Windows、macOS还是Linux而在于你没有把“写代码的地方”和“跑代码的地方”做一个合理的隔离。我这几年一直在用的思路是日常写代码用Windows宿主机上的PyCharm真正跑项目、装依赖、部署验证放到VMware虚拟机里的Ubuntu系统去做。今天这篇就把这套组合方案从零到落地完整讲一遍包括Python安装、PyCharm配置、VMware安装虚拟机、再到把Windows和虚拟机串起来协同开发的完整流程新手可以直接照着抄。1. 为什么我把开发环境拆成“Windows写码 虚拟机跑码”两半先说结论虚拟机的核心价值不是让你能装一个“看起来像Linux”的系统而是给你一个可以随便折腾、搞坏了秒删重建的沙盒。这个价值在日常开发里被严重低估了。1.1 直接在Windows上装开发环境的三个痛点很多初学者一开始都是在Windows上直接装Python然后pip install各种库代码也能跑看起来没问题。但用久了你会发现三个问题第一个是依赖冲突。你同时做爬虫项目和数据清洗项目一个需要pandas 1.x另一个只兼容pandas 0.25pip install的时候会互相覆盖。Python的包管理机制本身不复杂但在没有虚拟环境隔离的情况下这种冲突几乎无解。第二个是环境变量污染。我见过有人为了装某个工具把三个不同版本的Python目录全写进PATH连自己都分不清命令行里的python到底是哪个版本。后面又装了AnacondaPATH又被改了一遍整个系统乱成一锅粥。第三个是清理困难。Windows上的卸载机制大家都懂就算你卸载了Python注册表、缓存、残留目录一大堆很难彻底清干净。而虚拟机完全不存在这个问题装坏了快照回滚或者直接把虚拟机文件删掉重建一个整个过程不超过五分钟。1.2 虚拟机方案、双系统方案、WSL2方案怎么选你可能会问为什么不用双系统为什么不用WSL2我的回答是看你的目标是什么。双系统的问题是切换成本太高。你想写两行代码得重启电脑进另一个系统这个摩擦足够让你放弃很多练习机会。而且双系统下Linux分区和Windows分区互相看不到文件共享要单独挂载NTFS分区折腾半天体验也不好。WSL2是微软做的Linux子系统启动快、集成好做日常开发完全够用。但它毕竟不是完整的内核级虚拟化对于想学习Linux运维、部署、网络配置的人来说WSL2的抽象层级太高了很多底层东西被藏起来了。我觉得WSL2适合“我只是想在Windows里跑一下Linux命令”的人而VMware更适合“我想拥有一台真正属于我的、可以配置网络的Linux服务器”的人。VMware虚拟机的好处是它模拟了一整套真实硬件你在里面做的事情——配静态IP、装Nginx、开放端口、设置防火墙——跟在一台真实的Linux云服务器上做的完全一样。做开发的人迟早要面对部署这件事早点在虚拟机里接触这些概念后面接触云服务器的时候就不会心慌。1.3 这套方案的最终形态我推荐的最终形态是这样的Windows宿主机装PyCharm负责所有代码编辑、查看源码、调试操作。Windows上的Python只需要最基础的安装保证PyCharm本身能跑就行。VMware虚拟机Ubuntu Server或Ubuntu Desktop装完整的Python环境、项目依赖、数据库、Nginx等服务。所有“真正运行”的事情都在这台虚拟机里完成。两者之间通过网络互通。PyCharm配置远程解释器直接操作虚拟机里的Python环境运行和调试代码不需要把代码来回拷贝。这个方案的好处是什么代码和运行环境完全解耦。你换一台新电脑只要把虚拟机文件拷过去就能恢复一模一样的开发环境Windows这边装个PyCharm就完事了。2. Python本体安装Windows和Linux下最容易被忽视的三个点环境拆成两半之后两边都得装Python。这一节我分别讲Windows和Ubuntu下的安装细节重点说那些网上教程很少提到但特别容易踩坑的地方。2.1 Windows安装Python的版本选择与PATH勾选Windows上安装Python本身很简单去python.org下载对应版本的安装包就行。但有两个细节我建议你注意第一个是版本选择。不要看见官网最新版本就下载很多第三方库还没有适配最新版你装了Python 3.13之后发现某个核心库装不上还得降级。对于绝大多数开发场景当前官方维护中的稳定版本比如3.11或3.12就够了。直接去python.org/downloads选那个标注为“稳定版”的。第二个是安装时左下角的“Add Python to PATH”复选框一定要勾上。很多教程会提这件事但很少有人解释为什么。勾选这个选项本质上是帮你在系统环境变量的PATH里追加Python的安装目录。如果漏了这一步你在命令行里输入python会直接提示“python不是内部或外部命令”只能自己去系统设置里手动补新手根本不知道怎么补。安装完成后把命令行打开cmd或PowerShell输入python --version确认输出再输入pip --version确认pip可用。此处注意如果你发现python命令能用但pip报错多半是Scripts目录没有加入PATH用where python查看Python安装路径然后把Scripts子目录手动加进环境变量即可。2.2 pip换源是安装第三方库提速的关键一步装完Python之后第一件事不要急着装第三方库先把pip源换成国内的镜像源。因为默认的PyPI官方源在国外国内网络环境下下载速度经常只有几十KB/s装一个小库都要等半天大一点的库干脆超时失败。换源的操作是修改pip的配置文件。在Windows下你在当前用户目录下创建一个pip文件夹在里面新建pip.ini文件写入如下内容[global] index-url https://pypi.tuna.tsinghua.edu.cn/simple trusted-host pypi.tuna.tsinghua.edu.cn timeout 120保存之后运行pip install验证一下速度你会明显感觉到差别。如果你不想改全局配置只在当下这安装库时用临时参数也可以pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple。但长期来看还是建议配置改全局一劳永逸。2.3 Ubuntu下安装Python与venv虚拟环境虚拟机里的Ubuntu系统通常自带Python 3但版本不一定是新的而且默认没有装pip和venv模块。我建议执行以下命令把基础工具箱补齐sudo apt update sudo apt install -y python3 python3-pip python3-venv git这里python3-venv一定要装它是Python创建虚拟环境的核心模块。装完之后验证一下python3 --version、pip3 --version。在Ubuntu下安装第三方库我强烈建议不要直接用pip3 install全局安装而是先为每个项目创建一个独立的虚拟环境。虚拟环境这东西可以理解为“给每个项目开一个单独的工具箱”你在项目A里装的库不会影响到项目B。mkdir ~/myproject cd ~/myproject python3 -m venv venv source venv/bin/activate pip install requests flask pandas看到命令行前面出现(venv)前缀就说明你已经在虚拟环境里了。在虚拟环境里用pip安装的所有包都只存在于venv这个目录之下删除目录等于彻底卸载非常干净。这个习惯如果从一开始就养成后面基本不会遇到环境混乱的问题。3. PyCharm安装与必做的五步配置PyCharm是JetBrains出品的Python IDE也是我用过的Python开发工具里补全最智能、调试最顺手的一个。这一节从版本选择讲到安装后的核心配置都是你真正开始写代码前必须搞定的事情。3.1 版本选择与正版获取渠道PyCharm有两个版本Community社区版和Professional专业版。社区版免费支持日常的编写、调试、运行对于学习和绝大多数个人项目完全够用。专业版付费额外提供数据库工具、远程解释器、Docker支持等高级功能。这里有一个实际中的常见困扰我看到热词里有“pycharm激活”之类的搜索这里统一说明一下。想用专业版最正规的方式是如果你是学生或教师可以直接用教育邮箱在JetBrains官网申请免费授权这是完全合法的。如果已经工作了其实社区版足以覆盖大部分基础开发场景先好好用社区版把基础打牢需要远程解释器功能时再去考虑专业版。我自己早期写Python的阶段社区版就完全够用。从官网下载安装包之后一路默认安装即可。有几个可以自定义的点安装时可以勾选“创建桌面快捷方式”和“添加到PATH”后者方便你在命令行里直接敲pycharm命令打开当前目录。3.2 新建项目时一定要选对解释器与虚拟环境打开PyCharm第一次新建项目时会让你设置解释器Interpreter。很多人这一步直接略过PyCharm默认会用系统里最近安装的那个Python然后往全局环境里装包。这是错误的做法。正确的做法是在“New Project”窗口里把Location设置成你的项目目录展开底部的“Python Interpreter”区域选择“New environment using Virtualenv”Base interpreter选你刚才安装的Python版本。PyCharm会自动在这个项目目录下创建一个venv虚拟环境之后这个项目里pip安装的所有包都会被隔离在这个小环境里。选完解释器之后PyCharm里打开终端底部的Terminal标签页输入python --version确认它显示的是虚拟环境里的Python。观察命令行前面有没有项目名或venv的提示符有就说明隔离生效了。3.3 必做的五个配置项安装完PyCharm之后有几个配置项我每次换电脑都会第一时间改掉这里罗列给你一是设置里的“Auto Import”自动导入。在Settings → Editor → General → Auto Import里勾选“Show import popup”和“Add unambiguous imports on the fly”。这样当你输入一个模块名时PyCharm会自动补全import语句省不少事。二是字体调大。Settings → Editor → Font里把字号调到16或18你每天要看大量代码字体小了很伤眼睛。同时勾选“Enable font ligatures”能让一些符号组合显示得更自然。三是代码换行引导线。Settings → Editor → Code Style里找到“Visual guides”设置成100列。Python社区有PEP8规范建议每行代码不超过79或99个字符设置这个引导线可以帮你养成良好的代码格式习惯。四是设置自动保存。Settings → Appearance Behavior → System Settings里勾选“Save files on frame deactivation”切出窗口时自动保存免得到处找CtrlS。五是设置Python控制台的编码。Settings → Build, Execution, Deployment → Console里把默认编码改成UTF-8免得打印中文时出现乱码。3.4 用断点调试替代print大法很多新手排查问题习惯到处print()这个习惯我能理解但效率真的低。PyCharm的调试器可以让代码停在某一行的位置然后你实时查看变量值不用改代码就能找到问题。用法很简单在行号旁边的灰色区域点一下会出现红点这就是断点。然后右键点击编辑器选择“Debug xxx”程序会运行到断点处暂停。此时底部会出现Debug窗口你可以看到所有局部变量的当前值。我更常用的是“Step Over”和“Step Into”这两个操作快捷键分别是F8和F7的对应项。Step Over是执行当前这一行、然后停在下一行Step Into是进入当前行调用的函数内部逐行查看。排查复杂逻辑时配合“Watches”添加你要盯着的表达式你会在几分钟之内找到靠print要折腾半天才能发现的问题。4. VMware Workstation Pro的安装、免费授权与Hyper-V冲突虚拟机软件里VMware Workstation Pro是功能最全、口碑最稳的选择。2024年VMware Workstation Pro已经对个人用户免费授权不需要找什么序列号这是官方政策放心用。4.1 从官方渠道下载与安装注意事项下载务必去VMware官网。搜索“vmware workstation pro download”认准vmware.com域名不要跑去第三方下载站下载。很多第三方站点给的是捆绑了软件的定制版装完你电脑上会多出一堆全家桶。这属于装环境时最常见的隐形坑。安装包是exe格式双击打开一路Next即可。有一个步骤会让你选择是否安装“增强型虚拟键盘驱动”建议勾选它在处理某些键盘输入场景时更稳定。安装过程中如果系统提示需要重启先重启再继续。安装完成后你会发现快捷方式存在。首次启动会问你要不要输入许可证密钥个人免费授权模式下直接点“完成”或“跳过”即可正常使用。4.2 安装前先确认你电脑的虚拟化开关VMware Workstation Pro并不能随便在任何一台电脑上跑CPU必须支持虚拟化技术且BIOS里已开启虚拟化。很多人安装完VMware打开虚拟机时会报一个错误提示写“VT-x is not available”或者“此主机支持Intel VT-x但Intel VT-x被禁用”。怎么确认打开Windows的任务管理器切到“性能”选项卡看右下角的“虚拟化”状态。如果显示“已启用”说明虚拟化已开启。如果显示“已禁用”你需要重启电脑进入BIOS开机时按Del或F2找到Intel Virtualization Technology或SVM Mode之类的选项将它改为Enabled保存重启。这个BIOS选项在某些品牌电脑上藏得比较深但通常都在Advanced或Configuration菜单里。实在找不到可以搜一下“你的电脑型号 开启虚拟化”基本都有图文教程。4.3 与Windows自带Hyper-V、WSL2的冲突处理这是VMware安装后最常见的一个拦路虎。如果你在Windows上用过WSL2、Windows Sandbox或Hyper-V虚拟机那当你尝试用VMware启动虚拟机时很可能看到这样一条错误VMware Workstation和Hyper-V不兼容请从系统中移除Hyper-V角色。问题根源是两个虚拟化平台在抢占CPU的虚拟化指令。Windows自带的虚拟机监视器Hyper-V会占用VT-xVMware也依赖VT-x干活二者不能同时共存。Windows 10/11上很多功能默认开启了Hyper-V底层组件所以即使你没主动装Hyper-V也可能中招。解决方法打开“控制面板 → 程序 → 启用或关闭Windows功能”找到“Hyper-V”、“虚拟机监控程序平台”、“Windows 沙盒”、“适用于Linux的Windows子系统”这几项把它们前面的勾全部去掉点击确定重启电脑。这里要特别提醒WSL2依赖“虚拟机监控程序平台”关掉之后WSL2可能会无法启动。所以你需要做一个取舍如果你依赖WSL2用Hyper-V体系没问题如果你更需要VMware就得关掉Hyper-V相关功能。我自己是选了VMware因为它的虚拟网络管理功能更强更贴近真实服务器环境。两者选其一即可如果想同时用可能要装VMware的特定版本才行但配置过程较复杂新手不建议折腾。4.4 新建虚拟机的完整参数建议打开VMware Workstation Pro点击“创建新的虚拟机”选择“典型”模式即可。后面这些参数设置可以参考安装程序光盘映像文件选择你下载好的Ubuntu ISO镜像这个镜像文件建议从清华或中科大的镜像站下载比官网快得多。客户机操作系统Linux版本选Ubuntu 64位。虚拟机名称可以起一个有意义的名字比如UbuntuDev。虚拟机存储位置建议放在空间充裕的磁盘分区虚拟机会占掉几十GB空间。磁盘容量默认20GB建议改成40GB并勾选“将虚拟磁盘存储为单个文件”。单个文件在性能和迁移上都更方便虽然它一开始不会占满40GB是动态增长的。处理器和内存怎么分配建议给2个处理器核心和4GB内存。如果你是8GB内存的电脑可以给虚拟机3GB16GB内存的电脑给4GB到6GB都没问题。给太多会造成宿主机卡顿毕竟你的Windows和PyCharm也需要内存。5. 在虚拟机里装Ubuntu并落到可以直接写代码的状态VMware安装好只是第一步接下来我们要在虚拟机里装一套Ubuntu系统并把Python开发环境完整地落进去。5.1 Ubuntu安装过程中的选项与镜像校验去清华镜像站下载Ubuntu的ISO镜像推荐选择LTS长期支持版本比如22.04或24.04。下载后建议先做一下SHA256校验避免下载文件损坏。Windows下用PowerShell执行Get-FileHash 你的文件路径\ubuntu.iso -Algorithm SHA256把输出结果和镜像站给出的校验值比对一致就说明文件完整。这一步虽然麻烦但能省去后面安装到一半报错的恼人时间。在VMware里指定ISO启动后虚拟机屏幕会显示Ubuntu安装界面。选“Install Ubuntu”进入安装流程中间有几个选项值得注意语言选中文或英文取决于个人习惯代码里尽量保持英文路径能避免很多编码问题。安装类型选“清除整个磁盘并安装Ubuntu”这是在虚拟机内部完全不用担心影响宿主机。安装中询问是否“安装第三方软件”时我建议不勾选图形驱动和媒体解码器保持最小化安装加快速度。用户名密码设一个简单的即可这是虚拟机内部的登录账号后面SSH连接时会用。5.2 安装后第一件事换源、装Tools、设共享目录Ubuntu刚装完还是“原生态”的头两件事必须做第一替换apt软件源为国内源。Ubuntu默认的源服务器也是在海外的执行sudo apt update时你会发现速度很慢。处理方法备份/etc/apt/sources.list文件然后用sed命令把源地址替换为清华镜像源。比较简单的做法是直接编辑文件把archive.ubuntu.com替换为mirrors.tuna.tsinghua.edu.cn。执行完sudo apt update后速度会有质的飞跃。第二安装VMware Tools。如果你用VMware的“安装VMware Tools”菜单装不上可以直接在虚拟机里执行sudo apt install -y open-vm-tools open-vm-tools-desktop装完重启虚拟机和宿主机之间的剪贴板共享、文件拖拽、自适应分辨率就都好用了。省去一堆手动配置的麻烦。共享文件夹的设置方式在VMware菜单栏点“虚拟机 → 设置 → 选项 → 共享文件夹”选择“总是启用”然后添加一个Windows的目录比如D:\shared。在Ubuntu里这个共享目录会挂载到/mnt/hgfs/shared宿主机和虚拟机之间传文件就很方便了。5.3 把Python环境装到共享目录里实现双边同步前面的环境搭建都完成之后我们要把项目的代码放到共享目录里这样宿主机和虚拟机看到的是同一份文件。在Windows里用PyCharm打开D:\shared\myproject在Ubuntu虚拟机里访问/mnt/hgfs/shared/myproject。需要注意一点在虚拟机里对这个共享目录里的文件执行Python脚本时可能会遇到权限问题。把当前用户加到vboxsf或vmware组里的操作暂不展开比较简单的临时方案是在虚拟机里执行sudo chown -R 你的用户名:你的用户名 /mnt/hgfs/shared这样你就能在虚拟机里自由读写共享目录里的代码文件了。然后到共享目录里初始化虚拟环境cd /mnt/hgfs/shared/myproject python3 -m venv venv source venv/bin/activate pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask pandas requests注意这里pip也指定了国内源下载速度飞快。以后这个项目的依赖就全部落在venv目录里了Windows宿主机只需要用PyCharm负责编辑和查看文件不需要在Windows里重复安装这些包。5.4 快照功能是随便折腾的底气VMware有一个其他环境方案比不了的功能叫“快照”。它就像你在打游戏时存档一样可以把虚拟机的当前状态完整保存下来。如果后面你装了什么软件把系统搞坏了、配置文件改错了只需要恢复到之前保存的快照整个系统瞬间回到当时的状态。我的习惯是把虚拟机装完、环境都配好、基础依赖装好之后先关掉虚拟机点击VMware的“快照 → 拍摄快照”命名“初始环境”。之后每次完成一个阶段性配置比如装好Nginx、配好数据库再拍一个新快照。这样你后续怎么折腾都不会伤到基础环境。6. 用PyCharm远程解释器把Windows和虚拟机串成一套开发环境环境搭到这已经完成了90%。剩下的就是把“编辑端”和“运行端”连接到一起彻底解决“代码在Windows写、要在Linux跑”的这个核心痛点。6.1 为什么需要远程解释器而不是来回拷贝文件你可以选择把代码拷进虚拟机再运行但这会在两边产生文件内容差异改一行代码要拷一次非常容易造成版本错乱。PyCharm的远程解释器功能允许你在Windows的编辑器里写代码按下运行按钮后代码直接传到虚拟机里的Python解释器去执行执行结果回传到PyCharm界面显示。你全程在Windows图形界面操作但实际上跑的是虚拟机里的Linux环境。开发体验和本地运行基本没有差别环境却是隔离的。6.2 开启虚拟机的SSH服务并配置联网远程解释器走的是SSH协议所以虚拟机里必须开启SSH服务sudo apt install -y openssh-server sudo systemctl enable ssh sudo systemctl start ssh确认虚拟机的IP地址在Ubuntu里执行ip addr看ens33或eth0网卡下的inet地址。VMware默认NAT模式下虚拟机一般会拿到一个192.168.xxx.xxx的地址。比如192.168.10.128。Windows宿主机能不能ping通这个地址在Windows的PowerShell里执行ping 192.168.10.128能通就说明网络没问题。不通就检查VMware虚拟机的网络连接模式确保选的是NAT或桥接模式而不是“仅主机模式”。6.3 PyCharm连接远程解释器的完整配置打开PyCharm的Settings → Project → Python Interpreter点右上角的齿轮图标选择“Add Interpreter”然后选“SSH Interpreter”。填上虚拟机的IP、Ubuntu用户名和密码后PyCharm会自动检测虚拟机里的Python路径。这里指定为/usr/bin/python3即可。下一步它会让你选择一个“同步目录”指定为/mnt/hgfs/shared/myproject。这样PyCharm会自动把Windows里的项目文件和虚拟机里的共享目录映射起来。配置完成后PyCharm的运行窗口就会变成虚拟机里终端运行的效果。你可以在代码里print一个平台的判断语句来验证import sys, platform print(Python version:, sys.version) print(Running on:, platform.system())执行输出显示Linux说明远程解释器生效了。6.4 进阶端口转发与多站点域名配置开发过程中你还需要访问虚拟机里跑起来的Web服务。比如你在虚拟机里启动了一个Flask应用监听着8000端口在Windows浏览器里直接访问虚拟机IP:8000也能打开但体验不够自然。你可以在VMware菜单里配置NAT端口转发把Windows的本地端口映射到虚拟机的端口。操作路径菜单栏“编辑 → 虚拟网络编辑器 → NAT设置”添加一条映射规则主机端口8000 → 虚拟机IP的8000端口。之后你在Windows浏览器访问localhost:8000就能直接看到虚拟机里Web服务的内容。如果你在做多站点开发还会有更具体的需求在Windows里访问http://dev.site1.com和http://dev.site2.com都指向虚拟机上的Nginx服务。实现方式很简单分两步第一步在本机hosts文件C:\Windows\System32\drivers\etc\hosts里添加虚拟机的IP和域名的映射关系把dev.site1.com和dev.site2.com都指向虚拟机的IP。第二步在虚拟机里给Nginx配置多个server块。其中一个参考配置如下server { listen 80; server_name dev.site1.com; root /mnt/hgfs/shared/site1; index index.html index.php; } server { listen 80; server_name dev.site2.com; root /mnt/hgfs/shared/site2; index index.html index.php; }配置完成后在虚拟机里执行sudo systemctl reload nginx然后Windows浏览器输入dev.site1.com就能进入对应的站点。这套思路和线上服务器的多站点配置几乎一致做一个项目的同时把服务器原理也学会了。我之前帮人搭建这种“宿主机编辑、虚拟机运行、域名解析、端口转发”整套环境时最大的体会是这些东西看起来都是零碎的小操作但把它们组合在一起你才真正感觉到“开发环境”不是一个个孤立软件的堆砌而是一个有结构的工作系统。再说回那个最初的问题一套干净好用的Python开发环境应该长什么样我的答案已经放在上面了。Windows负责你盯着代码舒服虚拟机的Linux负责你折腾依赖不心疼PyCharm负责把你和虚拟机之间的桥接拉通剩下的就是打开编辑器、写代码、跑起来循环往复。环境搭好之后请把精力还给你真正想写的代码这才是整套方案存在的意义。