
昨天还有朋友跟我抱怨说在VSCode里装PlatformIO卡在“Installing PlatformIO Core”这一步卡了一个小时最后直接报错。这个问题我遇到过太多次了不光是新手很多老手换台电脑重新配环境也会栽在这里。核心原因就是PlatformIO的在线安装依赖的下载源大多在境外网络稍微不稳整个安装流程就断掉。所以我把这套离线安装方案整理出来分享给你核心思路就一句话把需要下载的东西提前准备好一次性拷到位。无论是VSCode插件、PlatformIO Core还是ESP32的编译工具链全部离线搞定。这篇文章适合做Arduino、ESP32开发的朋友也特别适合公司内网、学校机房这类网络受限的场景。1. PlatformIO装不起来到底卡在哪1.1 拆开看看PlatformIO是由什么组成的先花两分钟搞明白PlatformIO的结构后面所有操作就都顺理成章了。PlatformIO虽然看起来是VSCode里的一个插件图标但实际工作是分三层协作的。第一层是VSCode扩展也就是你在扩展商店里搜到的那个platformio-ide。它只负责UI交互左侧的工程树、顶部的编译上传按钮、串口监视器入口。说白了这一层只是个壳本身不具备编译能力。第二层是PlatformIO Core。Core是用Python写的命令行工具项目初始化、编译调度、依赖管理、固件上传全由它负责。安装Core时PlatformIO会在当前用户目录下搭建一套独立的Python虚拟环境默认叫penv把所有依赖的Python包都装进去。这套虚拟环境的好处是不污染系统Python坏处是体积不小而且一但缺失整个工具就瘫了。第三层是平台包Platforms和工具链Toolchains。比如你要编译ESP32就需要下载Espressif 32这个平台包以及xtensa架构的GCC交叉编译器、OpenOCD调试工具、烧录工具链。不同芯片的平台包和工具链各自独立比如Arduino AVR板子又是另一套GCC工具链。这一层体积很大一套ESP32的完整工具链加平台包几百MB很正常。理清这三层就能明白离线安装的本质把这三层提前准备好而不是到目标机器上现下现装。1.2 在线安装的三大“天坑”在线装PlatformIO容易挂通常卡在三个环节。第一个坑插件本身下载就不稳定。VSCode扩展市场对网络要求挺高有时候明明浏览器能正常打开网页扩展下载却反复失败或者下载完提示校验不通过。第二个坑PlatformIO Core安装超时。插件装完后后台会从在线源拉取Core文件并创建Python虚拟环境这一步在后台跑界面上只有一个进度条。一旦网络抖动界面就长时间停在那最后弹出一句Installation has been failed让人很崩溃。第三个坑工具链下载中断这个最气人。插件装好了、工程建好了你兴冲冲点下编译按钮它才开始下载编译器工具链。这个下载是没有断点续传的下到一半断掉重新点编译又从头开始。ESP32的工具链单个文件动辄上百MB弱网环境下基本等于编译依赖运气。这三层叠加在一起在线安装就成了一场赌局。我把离线方案整理成两种一种是轻量方案适合网络不稳定但偶尔能通的环境另一种是全量方案适合完全断网或想一步到位免折腾的场景。2. 离线安装前先把这四样东西准备好2.1 物资清单四样东西缺一不可离线安装就像搬家先把家当打包好到了新地方直接铺开。你需要准备四样东西。第一样是VSCode安装包。在能联网的电脑上从VSCode官网下载Windows或Linux对应的版本。注意区分User Installer和System Installer我建议用User Installer安装位置在当前用户目录下不需要管理员权限后续和PlatformIO的用户级目录搭配更省心。第二样是PlatformIO插件的vsix文件。vsix是VSCode扩展的安装包格式可以提前从扩展市场下载。最直接的方式是在Visual Studio Marketplace上搜索PlatformIO IDE点Download Extension按钮就能拿到一个vsix文件。第三样是PlatformIO Core。可以从PyPI下载platformio的whl安装包用pip离线安装。更省事的做法是直接从另一台已经装好的电脑上拷贝Core目录因为PlatformIO的Core和Python虚拟环境是一体的打包拷贝即可用。第四样是平台包和工具链。这是离线安装里最占体积、也最容易被忽略的部分。一个ESP32开发项目需要的所有编译器、调试器、烧录工具和板级配置加起来体积不小。这些资源分散在各个平台包里手动一个个下很容易遗漏最稳妥的方式是让一台在线机器提前把环境完整装好然后整体打包带走。提示前两样必须联网下载后两样可以整体打包现成的环境获得。如果条件允许强烈建议找一台网络正常的机器作为“准备机”一次性把整套环境做好后面所有电脑都不用再烦网络问题。2.2 两个方案怎么选这里先给结论方便你对号入座。方案A是轻量离线方案。适合网络能通但不稳定、或者你只是想先把插件和Core装好后面再慢慢折腾工具链的情况。操作上离线安装VSCode和插件然后手动搞定Core。编译时如果缺工具链至少前面两个最麻烦的过程已经绕开了。方案B是全量离线方案。适合完全断网的环境或者你根本不想跟网络较劲。操作方法是在一台准备机上装好所有东西并成功编译一次然后把整个.platformio用户目录全量打包拷到目标电脑解压。工具链、平台包、Python虚拟环境全在里面真正的零联网完成编译。我的建议是第一次搞直接上方案B。虽然准备阶段要花点时间但一旦打包成功后面无论换多少台电脑、装多少次环境都是复制粘贴级别的简单操作。方案A省了打包步骤却留了一个工具链的尾巴对于完全断网场景等于没解决。下面两章分别给出两个方案的完整操作步骤以Windows为主Linux和macOS只需把路径对应替换。3. 方案A实操离线装插件手动配Core3.1 安装VSCodeVSCode的安装包是exe文件在没有网的情况下双击就能装。Windows下有User Installer和System Installer两种建议选User Installer。原因很简单PlatformIO相关的环境都安装在用户目录与系统级权限无关User Installer装起来快也不会遇到“安装到Program Files需要管理员权限”这类麻烦事。安装过程中有个选项容易被忽略就是“添加到PATH”。建议把这个选项勾上后面在终端里直接敲code命令会方便很多。其他选项保持默认即可不要为了省空间取消创建桌面快捷方式因为后面你会频繁打开VSCode。装完之后可以先打开VSCode确认版本。如果你打算用旧版本的vsix文件就要注意版本兼容问题这个我在后面的常见问题部分会专门讲。3.2 离线安装PlatformIO插件扩展插件的离线安装有两种方式。第一种是用界面操作。打开VSCode后按CtrlShiftX打开扩展面板点击面板右上角的“...”菜单选择“Install from VSIX...”在弹出的文件选择器里选中之前下载好的platformio扩展vsix文件。十几秒后就能装好不需要任何网络请求。第二种是用命令行。在终端里执行code --install-extension platformio-ide-xxx.vsix其中platformio-ide-xxx.vsix替换成实际的文件名。命令执行完会输出安装成功的提示然后重启VSCode左侧就会出现PlatformIO的图标。提示命令行方式对Linux服务器、或通过SSH远程操作VSCode的场景特别合适。我部署内网环境时经常写一个小脚本批量把扩展装到多台机器上。3.3 手动安装PlatformIO Core插件装完只是第一步现在它是空壳。打开PlatformIO图标界面会提示PlatformIO Core is not installed。这时候有两条路走。第一条路用pip离线安装whl包。先在联网电脑上打开PyPI的platformio页面找到对应平台的whl文件下载拷贝到目标电脑执行pip install platformio-6.1.16-py2.py3-none-win_amd64.whlwhl文件名里的版本号换成你下载的实际版本。装好后在VSCode设置里搜索platformio-ide.customCorePath把它指向pio可执行文件的路径。比如Python环境的Scripts目录下的pio.exe。这样插件会绕过自己的安装逻辑直接使用你指定的Core。第二条路直接把别人已经装好的.platformio目录整个拷贝过来。前面说过PlatformIO在用户目录下会建立.platformio文件夹里面包含了penv虚拟环境和Core本体。这个目录拷过来Core就算装好了插件启动时会自动检测到。我在实际使用中更推荐第二条路。因为pip方式还需要单独处理依赖包而.platformio/penv里连Python依赖都一起带了copy过去就能用非常省事。3.4 创建工程并编译验证Core就位后重新打开VSCode点击左侧PlatformIO图标等插件加载看到Home页面正常弹出说明环境基本OK。新建工程有两种方式。推荐用命令行干净利落pio project init --board esp32dev在你想放工程的目录下执行这条命令PlatformIO会生成一个标准的工程骨架包含platformio.ini配置文件和src文件夹。接下来测试编译pio run如果网络还凑合首次编译会下载ESP32的平台包和工具链。这一步可能需要几分钟甚至更久。如果这一步卡住或报错说明你仍然需要把方案B中那个全量打包的思路用起来把准备机上已经下载好的平台包和工具链整个搬过来跳过在线下载环节。换句话说方案A本质上是个过渡方案适合网络时好时坏的人真要做到断网无忧还得看下面这招。4. 方案B实操全量打包离线环境一步到位4.1 在“准备机”上先装好一个完整环境方案B的灵魂是在一台网络正常的机器上把整套环境完整装好并把所有可能用到的平台包和工具链都“激活”。所谓激活就是让PlatformIO把该下的东西都下好。步骤是这样的。在准备机上安装VSCode在线装好PlatformIO插件。然后打开一个终端创建一个测试工程直接指定ESP32开发板pio project init --board esp32dev接着执行编译pio run首次编译时PlatformIO会检测到缺少Espressif 32平台包与工具链自动开始下载。这个过程很慢要耐心等待只要看到编译成功的输出就说明ESP32的工具链已经齐了。如果你以后还要用Arduino系列板子比如Uno、Nano这些AVR芯片的板子也顺手再建一个工程编译一遍。这样Arduino AVR平台包和工具链也会被下载到准备机的环境里。注意这一步很重要不同板型对应不同平台包只会按需下载不会一次性全给你下好。4.2 找到并打包关键目录准备机上的环境配置完成后所有PlatformIO的资源都集中在一个目录下。Windows路径是C:\Users\你的用户名\.platformioLinux和macOS路径是~/.platformio打开这个目录你会看到几个关键子目录。penv是Python虚拟环境Core本体和相关依赖都在里面platforms是板级平台包比如espressif32、atmelavrpackages是编译工具链比如xtensa-esp32-elf-gcc、openocd、烧录工具等。还有.cache目录那是下载缓存。对新手来说最稳妥的做法是把整个.platformio目录压缩成一个压缩包。不要自作聪明去挑挑拣拣少一个tests目录可能没啥事少一个packages里的编译器到了目标机器就报错。打包前有个小清理动作很有必要那就是把每个工程里的.pio目录删掉。.pio是编译产物包含的是一个个工程自己的临时文件属于“垃圾”会白白增加压缩包体积。另外.extra或.vscode这类目录也不是必须的可以清理。真正要保留的核心是penv、platforms、packages三个子目录。4.3 在离线电脑上恢复环境到了目标电脑按下面步骤操作。首先安装VSCode离线包然后按3.2节的方法离线安装PlatformIO扩展vsix文件。接下来把压缩包解压到目标电脑的当前用户目录下。确保最终路径是C:\Users\你的用户名\.platformio如果系统用户名和准备机不一样没有关系只要解压位置在当前用户目录下就行。PlatformIO脚本会自动识别当前用户路径不会因为用户名差异而失效。接着打开VSCode点击PlatformIO图标。插件启动后会检查Core是否存在发现.platformio/penv里已经有完整的Core它会直接使用不再触发下载流程。看到Home页面正常加载就可以新建工程了。创建一个ESP32工程执行编译测试。只要打包时工具链齐全这次编译就是在完全离线环境下完成的整个过程不会发起任何网络请求。实测下来从解压包到编译通过两分钟内搞定。4.4 多台设备部署的注意事项如果你要给部门十几台电脑统一部署这套方案同样适用。把VSCode离线安装包、PlatformIO扩展vsix文件、.platformio压缩包三个文件放到一个共享文件夹里每台电脑按同样的步骤解压配置即可。批量部署时建议把系统用户名统一规范。因为在Windows下解压位置依赖具体用户名如果这台叫user01那台叫admin每台都要手动调整路径非常痛苦。如果你有域控或者批量配置工具直接推送执行脚本会更省事。另外一定要保持各电脑的VSCode版本和插件版本一致。如果一台是1.8版本的VSCode另一台是1.9版本插件vsix版本跨度大界面显示正常但功能可能异常。最省心的方案是把某个经过验证的VSCode离线安装包作为标准版本连同插件和.platformio目录一起下发形成一套“黄金组合”。5. 操作过程中常见问题与排查5.1 常见问题速查表整理了实际部署中高频出现的几个问题做成表格方便对照。现象原因解决办法插件提示Core not installed插件没找到.platformio/penv里的Core检查.platformio目录是否解压到当前用户目录在VSCode设置里指定customCorePath编译时卡在Checking...不动工具链缺失或版本不完整回准备机检查packages目录重新打包整个.platformio目录报错Could not find the platform对应的platforms目录缺失确保espressif32或atmelavr等平台包在platforms里用pio pkg list查看提示Cant find Pythonpenv虚拟环境损坏或路径变了重新拷贝penv目录或者直接删掉.platformio后重新解压Windows下插件启动后界面空白扩展版本与VSCode版本不兼容换成与VSCode匹配的vsix版本重新安装编译报缺少msvcp140.dll或vcruntime140.dll目标电脑缺少Visual C运行库安装微软官方Visual C Redistributable建议在打包前统一预装5.2 不会写在文档里的经验有几个经验是实际操作中反复踩坑才总结出来的这里单独说细一点。第一打包之前一定要先编译一次工程。前面强调过多次但值得再说一遍只安装插件而从不编译packages目录往往是空的。PlatformIO的策略是按需下载你从没编译过ESP32的板子espressif32的工具链就不会出现在packages里。所以准备机上“成功编译一次”是打包的前提条件。第二区分“环境目录”和“工程目录”。.platformio是环境目录负责提供工具链是全局的工程目录是你自己创建的文件夹里面有.pio这种编译缓存。打包时只打.platformio不要打工程目录。工程一旦被压缩进包里在别的电脑上打开反而容易串路径。第三如果你的离线电脑需要新增第三方库最好的方式不是去那台电脑上操作而是回到准备机在工程里修改platformio.ini加上lib_deps然后执行pio pkg install把库安装好等编译通过后再同步.platformio目录。这样所有依赖都能提前“吸”进环境里离线电脑上完全不用折腾库管理。第四遇到莫名其妙的奇怪问题先删掉.platformio目录重新解压一遍。很多时候问题出在拷贝过程中文件遗漏或权限异常重解压一次往往就好了不必大动干戈。但注意如果重解压还是不行那你拿到的压缩包本身可能就不完整需要回到准备机重新打包。注意PlatformIO的很多配置是全局的比如global.json记录了上次使用的工程路径。如果解压后直接打开准备好某工程的副本VSCode可能会提示路径不存在。不用紧张重新用PlatformIO的Open Project功能打开当前工程目录即可问题会自动消除。最后再分享一个排查利器在实际部署过程中我最常用的一条命令是pio system info。在准备机或目标电脑上执行它会一次性输出当前PlatformIO的版本号、Python路径、平台包列表、工具链列表、缓存路径等所有关键信息。对比两台机器时只要分别执行这条命令把输出并排放一起缺什么、版本差异一目了然。这比在文件管理器里翻目录、逐个对比文件可靠得多。打包前在准备机上看一眼pio system info能确认工具链是否齐全部署后在目标电脑上再看一眼能确认环境是否完整。这个习惯我保持了很久每次帮同事排查环境问题都从这条命令开始。另外记得PlatformIO的版本会持续更新新旧版本之间平台包格式偶尔有差异。如果某台电脑的Core版本和准备机不一致最保守的做法是把.platformio整个目录重新同步一次而不是只拷平台包。环境这种东西一致性就是稳定性。