多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Windows下R语言Rtools安装配置完全指南:解决编译报错与环境变量问题

Windows下R语言Rtools安装配置完全指南:解决编译报错与环境变量问题 1. 这事到底是干什么的为什么Windows下的R语言离不开Rtools先说结论免得你看半天不知道在讲什么。Rtools就是R语言在Windows系统上的一整套编译工具链包含GCC编译器、make工具、各种命令行程序以及让R能调用这些程序所需的系统库和配置脚本。它的核心作用只有一个在Windows上把C/C/Fortran源码编译成R能加载的包。说得再直白一点你如果在Windows上跑install.packages(某个包)绝大多数时候下载的是官方预编译好的二进制包双击安装就行根本用不到编译器。但一旦遇到源码安装的包、GitHub上开发的未发布版包、或者你自己写了Rcpp代码需要本地编译R就会在后台去寻找编译工具这时候没有Rtools它就直接罢工。这个问题为什么值得专门写一篇因为R的官方帮助文档里面对Rtools的说明极其简略RStudio的提示也经常只有一句“Please install Rtools”Windows系统本身对PATH环境变量的管理又很反人类再加上R每次升级、Rtools的版本号就会跟着变新老用户很容易栽在版本对不上、PATH没生效、命令行和RStudio检测结果不一致这些坑里。我自己帮人排查过很多次R环境问题十次里面有八次最后都追到了Rtools没装对或者环境变量配置错。这篇东西适合谁看刚把R装好、一编译就报错的新手被Running configure卡住但在网上搜不到有效方案的半新手还有那些装了Rtools但C代码一编译就提示找不到g的同事。文章里所有截图级别的细节我会用文字描述清楚你跟着操作一遍基本就能把Windows上的R编译环境打通。2. Rtools的整体设计与版本选型2.1 Rtools到底包含什么它和R是什么关系先理解它的构成。Rtools不是某个单一软件的安装包而是一个工具链的集合。里面大致包含MinGW-w64版的GCC编译器负责把C/Fortran/Rcpp代码编译成机器码、GNU make负责根据Makefile自动组织编译流程、链接器ld与相关库文件、还有一堆用于源码配置的shell工具如sh、sed、awk。在R扩展包的构建体系中包作者会用configure脚本检测当前系统的编译能力Rtools提供了这一整套支持。你可以把Rtools想象成一个翻译团队R本身说R语言但如果你想给R写一个效率更高的底层模块用C实现你写出来的是C源码团队里的GCC负责把它翻译成Windows能执行的原生指令make负责指挥翻译流程按正确的先后顺序进行最终R在运行时会通过动态链接库的方式把这些翻译成果加载进来。这个“翻译-指挥-链接”的流水线就是我们说的编译环境。R和Rtools各管各的但版本必须匹配。R的升级策略是每年回归一次大版本x.y.0每个月打一次补丁版本x.y.zRtools的大版本号基本跟着R的主版本走。比如R 4.3.x对应Rtools43R 4.4.x对应Rtools44R 4.5.x则对应Rtools45。如果你用R 4.4却装了个Rtools43某些功能能工作但一旦涉及较新的C标准特性、或包本身对编译器版本有要求就会莫名报错。Rtools的安装包本身可以从CRAN的镜像站下载一般都是几十到一百多兆安装过程比普通软件稍慢因为它要解压非常多的文件。2.2 Rtools和RTools的区别以及版本对应表新手特别容易在网上搜到两种写法Rtools和RTools。其实早期R 2.x和3.x时代官方叫法就是Rtools到4.0之后安装程序显示的名称为RTools二者是同一个东西只是品牌风格变了。你不需要钻这个牛角尖搜索时两个关键词都试一下就行。下面这个版本对应表是我在实际使用中反复核对过的应该能帮你节省不少排查时间。R主版本对应Rtools默认安装路径是否需要手动配置PATHR 4.0.xRtools40C:\rtools40需要安装时可勾选自动写入PATHR 4.1.xRtools40更新版C:\rtools40需要安装时可勾选自动写入PATHR 4.2.xRtools42C:\rtools42建议手动确认部分版本自动写入会失败R 4.3.xRtools43C:\rtools43安装时勾选PATH一般能自动写入R 4.4.xRtools44C:\rtools44安装时勾选PATH一般能自动写入R 4.5.xRtools45C:\rtools45安装时勾选PATH一般能自动写入注意这里说的PATH就是Windows环境变量中的Path。R在编译时会通过查找PATH来定位gcc.exe、make.exe这些可执行程序。如果PATH里没有Rtools所在目录R就会认为编译器不存在。2.3 一个容易忽略的细节Rtools的自动PATH与系统PATHWindows的环境变量分为两种系统环境变量和用户环境变量。系统环境变量的作用范围是所有用户修改时需要管理员权限用户环境变量只对当前用户生效普通权限就能改。Rtools安装程序在“勾选自动添加PATH”时一般写入的是用户环境变量而不是系统环境变量。很多人装完Rtools之后直接打开一个已经运行中的终端窗口去敲which gcc发现找不到就以为是安装失败其实只是环境变量没刷新——终端的PATH是启动时就读取好的你需要重新打开一个新的终端窗口才能看到最新的环境变量。3. 实操安装全流程从下载到第一次成功编译3.1 第一步确认自己的R版本选对Rtools版本安装任何东西之前都要先确认基线。打开R或者RStudio在控制台输入R.version.string你会看到类似R version 4.3.2 (2023-10-31 ucrt)这样的输出主版本号就是4.3那你需要的就是Rtools43。这一步看起来很简单但很多人会栽在“我明明装了Rtools43为什么编译时找不到”这个问题上后来发现原因是他同时装了R 4.2和R 4.3两个版本RStudio当前默认用的是R 4.2而R 4.2需要的是Rtools42。所以先跑一下R.version.string再做版本匹配别凭记忆。如果你电脑上有多个R版本建议在RStudio的Tools - Global Options - R version里固定一个默认版本否则RStudio会自动选择最新的一个可能和你预期的并不一样。3.2 第二步获取Rtools安装包的正确渠道Rtools的安装包就在CRAN官网入口通常位于网页左侧的“Other”栏目下写着“Rtools”点击后会自动跳到对应的下载页面。R 4.0及以后的版本CRAN给出了非常明确的下载链接文件名一般类似Rtools43.exe、Rtools44.exe。国内用户可以优先选择清华镜像或中科大镜像速度会快很多。需要说明的是Rtools虽然托管在CRAN站点上但它本身并不属于R基础包它只是配套工具。如果你下载时发现镜像站没有Rtools的入口可以直接访问CRAN的官方主页不依赖镜像就行。下载时注意位数。现在绝大多数电脑是64位Windows请下载64位版本32位Windows在新版Rtools中已经不支持了如果你还在用非常老旧的32位系统建议先升级系统否则不仅仅是Rtools的问题很多R包也没法正常工作。3.3 第三步安装过程中的勾选项Rtools安装程序是一个常规的Windows向导程序前半段就是NEXT、I Agree那种老套路。真正需要注意的是安装选项这一步程序会问你“Select Additional Tasks”里面有一个勾选项大意是“Add Rtools to system PATH”。这个勾选默认可能是勾上的也可能没有具体看版本。我个人的建议是无论默认是否勾选你都不要再额外修改直接接受默认值然后完成安装即可。安装完成后先不要急着关掉终端我们还需要做手工验证和可能的补充配置。还有一个更关键的点Rtools的安装路径。默认路径类似C:\rtools43这个路径里没有空格也没有中文是非常理想的。千万不要自作主张改成C:\Program Files\Rtools43——里面的空格在编译时会成为路径解析的噩梦make和configure脚本会把路径按空格切断导致各种莫名其妙的“No such file or directory”。记住一律使用默认路径这是无数人踩过坑之后总结出来的经验。3.4 第四步验证安装和PATH是否生效安装完成之后打开一个新的PowerShell窗口记得是新的窗口别用安装之前就开着的依次输入以下命令来验证# 查看R的版本确认R本身能用 R --version # 检查Rtools的gcc是否已在PATH中 gcc --version # 检查make是否在PATH中 make --version如果你能看到类似于gcc.exe (GCC) 12.2.0这样的输出说明PATH已经自动配置好了。如果你看到的是“无法将‘gcc’项识别为 cmdlet、函数、脚本文件或可运行程序的名称”那就说明PATH没有生效你需要走下面第4章的步骤手动配置环境变量。另外RStudio本身也提供了一个便捷的检查入口。在RStudio中打开一个新脚本执行# 检查Rtools是否被R正确识别 Sys.which(make) # 查看当前PATH中是否存在Rtools目录 Sys.getenv(PATH)如果你执行Sys.which(make)之后返回了类似C:\rtools43\usr\bin\make.exe的路径那就说明R能正确找到编译工具。如果返回的是空字符串make就说明R在PATH里找不到make这时候你必须处理环境变量的问题。这个验证方法非常关键因为RStudio内部的R进程和你在PowerShell里的PATH未必一致个人经验是RStudio启动后会自动读取系统环境变量如果你在修改环境变量之前就打开了RStudio它可能还保留着旧的环境变量需要重启RStudio再试。3.5 第五步用一个小包做个编译测试验证环境是否完全可用最稳妥的方式是真实编译一个包。我推荐你试试Rcpp因为它是R生态中最依赖编译器的包之一而且安装量极大、兼容性很好。在R控制台里执行install.packages(Rcpp, type source)注意type source的意思是强制从源码编译而不是下载预编译的二进制包。如果你想更直接地测试编译过程还可以用Rcpp包里自带的一个小测试# 安装完成后运行Rcpp自带的编译测试 library(Rcpp) evalCpp(2 2)如果返回4说明从R调用编译器的整条链路都是通的你的Rtools环境就算配置成功了。如果这一步报错最常见的错误信息是g not found或make not found这就明确指向PATH问题下面一章我会展开讲。4. Windows环境变量配置的完整细节4.1 环境变量的基本概念为什么R找不到编译器先聊清楚概念不然你只知道改不知道为什么要改。Windows的PATH或者写作Path环境变量本质上是一个目录列表。当你在命令行里输入一个命令名比如gcc时Windows会依次在PATH包含的目录中去寻找对应的gcc.exe文件。它不会全局扫描整个硬盘那样太慢了。R在编译时是通过system调用来执行gcc、make这些命令的所以R进程的PATH同样决定了它能不能找到这些工具。因此“配置环境变量”的本质就是把Rtools的可执行文件目录加入PATH。Rtools安装目录下通常有两个bin目录一个是C:\rtools43\bin里面主要是一些辅助工具另一个是C:\rtools43\usr\bin里面包含make、sh等Unix工具。而真正的编译器gcc.exe在C:\rtools43\mingw64\bin下面。这三个目录需要都加进PATH吗答案是不一定全都要但建议都加上。不同版本的Rtools对PATH的预期略有差异R 4.2以后官方推荐的方式是把C:\rtools43\usr\bin加入PATHR在编译时会通过启动脚本自动去定位mingw64\bin。但从实践经验出发手动把三个目录都加进去可以覆盖更多边缘情况尤其是当你从命令行直接调用编译器时不至于找不着。4.2 手动配置PATH的完整步骤Win10/Win11通用如果你确定自动配置没生效或者你想把Rtools的路径从用户级提升到系统级方便其他账号使用那就手动操作。下面以Windows 11为例Win10其实完全一样。第一步右键点击桌面上的“此电脑”或“我的电脑”选择“属性”然后点击窗口右侧的“高级系统设置”。第二步在弹出的“系统属性”窗口中点击下方的“环境变量(N)...”按钮。第三步在“用户变量”区域选中名为Path的变量如果没有就新建一个变量名就叫Path点击“编辑”。第四步在编辑窗口中点击“新建”然后依次添加以下三个条目C:\rtools43\binC:\rtools43\usr\binC:\rtools43\mingw64\bin注意我这里写的是Rtools43的默认路径如果你装的是Rtools44那就是C:\rtools44\bin、C:\rtools44\usr\bin、C:\rtools44\mingw64\bin以此类推。当你输入第一个条目时Windows可能会自动在后面添加一个反斜杠没关系不影响。三条路径确认无误后一路点“确定”关闭所有窗口。第五步关键中的关键——关闭所有已经打开的终端窗口和RStudio然后重新打开。配置环境变量只是写入注册表已经运行的程序不会自动感知这个变化你必须让它们重新启动才会加载新的PATH。这是个非常反直觉的点很多新手配置完发现没用其实就是忘了重启终端。第六步再次验证。新开一个PowerShell窗口输入gcc --version如果这次能正常输出版本信息就说明PATH配置生效了。再去RStudio里跑一下Sys.which(make)确认R这边也正常。4.3 用户级PATH和系统级PATH怎么选在“环境变量”窗口里你会看到上下两个区域上半部分是“User的用户变量”下半部分是“System的系统变量”。我给的建议是优先配置用户变量别碰系统变量除非你很清楚自己在做什么。原因有两个。第一修改用户变量不需要管理员权限修改系统变量需要弹出UAC确认窗口如果你在公司电脑上用的不是管理员账号系统变量根本改不了。第二用户变量只影响你自己不乱动系统全局配置降低把其他软件搞挂的风险。PATH里面如果少了某个关键目录可能导致某些软件启动失败这种事我见得太多了。Rtools是给R用的你在自己的用户级PATH里配好完全够用。4.4 配好PATH之后如何批量验证工具PATH配置完之后不要只看一个gcc就完事。我建议你新建一个PowerShell窗口一次性检查所有关键工具是否就位# 逐个检查编译工具链中的关键程序 gcc --version g --version make --version sh --version如果你的R版本比较旧比如R 3.6对应的Rtools35可能还需要检查ls、cp、sed这些工具但R 4.x系列一般只需要关注前面这几个就够了。如果在某个命令上提示找不到你可以用where.exe来定位它到底去哪了# 查看gcc的实际路径 where.exe gcc # 看输出中是否包含rtools的路径where命令会按PATH中的顺序依次查找并列出所有匹配的可执行文件。如果你发现Rtools的路径排在很后面而系统里恰好还有其他软件比如Git自带了一个mingw64提供了gcc.exe就有可能出现“找到了gcc但是版本不对”的诡异问题。这个问题在下一章详聊。5. 常见问题与排查思路这些坑我都帮你踩过了5.1 “g not found”但明明装了Rtools这个场景我遇到太多次了。用户装了Rtools在RStudio里编译Rcpp包时报sh: g: command not found但自己去“系统属性”里看PATH又觉得没问题。排查思路就三步。第一步确认Rtools实际安装的架构。新版Rtools默认安装的是64位工具链路径在C:\rtools43\mingw64\bin如果你在PATH里写的是C:\rtools43\mingw32\bin32位那肯定找不到g.exe因为你的工具链在mingw64文件夹里。第二步确认PATH条目的顺序。Windows在搜索命令时会按PATH中的先后顺序来如果之前装过MinGW或Git自带的GCC它的路径排在了Rtools前面系统会优先找到那个旧版本。旧版GCC可能不支持R 4.x要求的C17标准编译时会冒出类似error: std::filesystem is not found的提示。解决办法是在用户PATH中把Rtools的三个目录位置整体提到最前面——在编辑窗口中选中Rtools的条目点击“上移”即可。第三步确认你重启了RStudio。RStudio启动时读取一次环境变量如果它是你改PATH之前打开的那么它内部的R进程使用的还是旧PATH。这种情况下最简单的办法是彻底退出RStudio不是关窗口而是托盘退出或任务管理器结束进程然后重新打开再试。5.2 R版本是4.3但装的Rtools版本对不上Rtools和R的版本绑定关系不是随便定的而是由R核心团队在构建二进制包时的工具链版本决定。如果你用R 4.5配Rtools43很多包在编译时可能会报一个很隐晦的错误比如undefined reference to Rf_error这是因为R工具链的ABI接口发生了变化。遇到这种问题别去折腾编译器参数直接下载对应版本的Rtools重装一遍基本能解决。需要补充装多个版本Rtools吗如果你平时只用一个R版本一个Rtools完全够用。如果你确实需要同时跑多个R版本比如一个R 4.2用于旧项目一个R 4.5用于新项目那Rtools42和Rtools45都可以装在电脑里它们井水不犯河水因为R在编译时会根据自身的版本去PATH中寻找对应版本的目录。前提是PATH里相关的目录都要存在顺序无关紧要。5.3 “installation of package had non-zero exit status”背后的信息这个错误几乎是源码安装包时报错的“万金油”它真正有用的信息在它上面几行你得往上翻控制台输出找到configure: error: ...或者Error: ...那一段。R的源码包在安装时通常会先运行configure脚本来探测系统环境这个脚本依赖sh和make也依赖环境变量R_HOME、R_INCLUDE这些。很多时候配置失败是由于缺少某个系统库比如libxml2、curl这时候单纯升级Rtools是没用的需要你先安装对应的系统依赖。一个实用的建议当报错出现时把控制台输出完整复制下来搜里面checking for ...后面跟着no的条目。比如你看到checking for gcc... no那毫无疑问是编译器没进PATH如果是checking for libcurl... no那你就得先去安装对应的依赖包。这类问题是R包生态中的常态不是你环境配置的锅。5.4 Win11下环境变量改了但新的终端里还是找不到Windows 11偶尔有一个特殊毛病环境变量明明改了也开了新终端但echo $env:Path输出却是不完整的。这多半是因为Windows的终端程序并不是每次都从注册表重新读取环境变量而是继承了某个父进程比如Windows资源管理器的环境变量。改完PATH之后如果你不想重启电脑可以尝试用任务管理器重启一下Windows资源管理器或者干脆注销再登录。注销一次就能强制刷新所有进程的环境变量比重启电脑快得多。5.5 快速排错把所有检查项浓缩成一张表我把常见问题的现象和对应处理方式整理成一个速查表方便你遇到问题直接对照。问题现象可能原因处理方式gcc --version提示无法识别Rtools未装或PATH未配置检查安装目录手动添加三个PATH条目RStudio报g not found但终端能找到RStudio启动早于PATH修改退出并重启RStudio必要时注销系统编译时出现make not foundusr\bin未加入PATH添加C:\rtoolsxx\usr\bin到PATHwhere.exe gcc找到的不是Rtools路径其他软件自带GCCPATH顺序被抢占把Rtools路径在PATH中上移到前位编译报错undefined referenceR与Rtools版本不匹配按R主版本重装对应Rtools官网下载Rtools速度极慢网络问题使用CRAN镜像站安装过程中杀毒软件报警编译器行为被误判将安装目录加入杀软白名单或临时暂停实时防护顺带提一嘴国内网络环境下从CRAN下载Rtools有时非常不稳定。我之前帮朋友远程装环境时就遇到过下载到99%断掉的情况。建议用IDM之类的下载工具或者直接找国内镜像站下载安装包省心很多。6. 进阶技巧把Rtools配置省心化的几个思路6.1 用.Rprofile自动设置Rtools路径如果你手头有多个R版本或者你的Rtools装在非默认路径R在编译时可以通过环境变量RTOOLS43_HOME之类去定位Rtools的根目录。但不同版本识别方式略有不同比较通用的做法是在R的.Rprofile里写一段灵活的路径探测逻辑。.Rprofile是R在启动时会自动读取的配置文件位于用户主目录Windows下通常是C:\Users\你的用户名\Documents\.Rprofile或R.home()目录下。可以直接在里面加上这样一段# 自动识别当前R版本对应的Rtools路径 rtools_version - sub(\\..*$, , as.character(getRversion())) rtools_root - paste0(C:/rtools, rtools_version) if (dir.exists(rtools_root)) { Sys.setenv(PATH paste0( file.path(rtools_root, bin), ;, file.path(rtools_root, usr/bin), ;, file.path(rtools_root, mingw64/bin), ;, Sys.getenv(PATH) )) }这段脚本做的事情很简单获取当前R的主版本号比如4.4拼接出默认的Rtools路径然后把三个bin目录插入到PATH最前面。这样做的好处是你以后升了R版本、换了系统也不用重新手动配置PATHR每次启动都会自己去找。如果你不想把Rtools写入系统PATH比如公司电脑权限受限这个方案极为好用。6.2 在R构建过程中临时指定编译器路径有些时候你会遇到一个特殊情况Rtools装了环境变量也配了但某个包的编译脚本比较“固执”它指定了自己的编译器路径。此时你可以在编译前设置两个环境变量强制R使用Rtools的编译器# 强制指定C和C编译器 Sys.setenv(CC C:/rtools43/mingw64/bin/gcc.exe) Sys.setenv(CXX C:/rtools43/mingw64/bin/g.exe)这种方法适合临时调试。除非必要日常使用不推荐因为它会绕过R自己管理工具链的逻辑适用范围比较有限。但在排查问题时它可以帮助你快速确认问题到底是出在PATH还是出在包自身。6.3 devtools和pkgbuild现代R包开发的环境自检利器如果你打算写R包或者经常编译GitHub上的开发版包建议装上devtools和pkgbuild这两个包。它们自带对编译环境的检查功能比自己手工验证方便得多# 安装开发工具包 install.packages(c(devtools, pkgbuild)) # 检查Rtools是否配置正确 pkgbuild::check_build_tools()check_build_tools()会检查Rtools是否存在、版本是否匹配、PATH是否正确并给出明确的错误提示。如果一切正常它返回TRUE如果有问题它会告诉你缺什么、该在哪里改。devtools也是经常被误判为“装不上”的包之一因为它安装时就需要编译大量依赖如果你连devtools都装不上多半说明Rtools的问题还没真正解决。6.4 把RStudio的“Terminal”和PowerShell打通RStudio内置了一个终端面板默认使用Windows的命令提示符或者PowerShell。这个终端的PATH环境变量来自RStudio进程的启动环境所以如果你在RStudio外面新建的终端里gcc可用但RStudio内置终端里不可用那还是同一个问题RStudio需要重启。某些情况下RStudio的内部终端和R控制台的PATH也不一致——终端用的是shell的PATHR控制台用的是R进程的PATH。如果你确认shell里面gcc能用但R控制台里Sys.which(make)查不到最彻底的解决方法是注销Windows用户再重新登录这样所有进程都会重新继承新的环境变量不会有残留。7. 关于Rtools版本升级和卸载时的注意事项7.1 升级R之后是否需要重装Rtools是的需要。R升级到新主版本后比如从4.3升到4.4建议同时安装对应新版本的Rtools并且可以保留旧版本不卸载直到你确认新环境一切正常。但要注意一点R 4.2之后R默认使用UCRT工具链Universal C Runtime它和旧版的MSVCRT工具链在二进制层面不兼容。如果你用R 4.1和Rtools40编译过本地包升级到R 4.4之后这些包需要重新编译。这也是很多人升级R之后发现一堆包“失踪”的原因——不是包没了而是旧包基于旧工具链编译新R无法加载。碰到这种情况不要浪费时间想着怎么“修复”旧包直接在R 4.4里重新install.packages()把需要的包装一遍一般十几分钟就搞定。7.2 卸载Rtools的干净姿势如果你确实想把某个旧版Rtools卸载干净先卸载程序本身然后检查三个地方的残留环境变量Path里是否还有旧路径手动删掉C:\rtools43这样的安装目录是否还存在残余文件如果程序卸载没删干净手动删除检查C:\Users\你的用户名\.Rprofile以及R_HOME\etc\Renviron中是否有指向旧版本的路径。第四处是很多人漏掉的R本身在启动时可能会读取R_TOOLS或RTOOLS相关的环境变量。你需要在系统属性里搜索“RTOOLS”不分大小写如果发现任何残留一并删除。8. 最后再说点实在话Rtools这个东西本身不复杂复杂的是Windows对环境和路径的“历史包袱”。我自己从R 2.15时代一路装到现在经历过Rtools31、34、35、40、42、43、44中间踩过的坑太多了。印象最深的一次帮一个同事排查了整整一下午最后的结论竟然是他在PATH里手动输入路径时把C:\rtools43打成了C:\rtools43\然后后面又多加了一个反斜杠结果路径变成了C:\rtools43\\binWindows虽然能容忍多一个反斜杠但某些工具脚本却接受不了。类似这种小问题没有任何文档会告诉你只能靠实操去积累。所以如果你现在配置Rtools后依然遇到问题我的建议只有一句话别急着怀疑“是不是这个包有问题”先老老实实把PATH打开用where.exe逐一确认每个工具的位置确认一遍之后再回头编译大概率问题就消失了。工具链环境这东西本质上就是“路径对了一切就对了”。最后再分享一个小技巧当你在R控制台看到‘g’ was not found这类报错时可以先在RStudio里跑一次Sys.setenv(PATH paste(C:/rtools43/usr/bin, Sys.getenv(PATH), sep ;))临时救急然后回头再去修复系统配置。这个操作没法替代正确的PATH配置但能让你的编译任务先跑起来不至于卡在环境问题上干着急。等这个临时环境满足了当下需求再趁有空的时候把PATH彻底配好后面就不用再折腾了。
返回列表