ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Windows下conda安装与虚拟环境配置全攻略:从入门到踩坑实战

Windows下conda安装与虚拟环境配置全攻略:从入门到踩坑实战 折腾过Python环境的人八成都有过这种经历为了跑一个项目在系统里东装一个Python、西装一个依赖最后机器上散落着三四个版本的解释器和一堆互相打架的包。装个包要提心吊胆生怕把别的项目搞崩。我最早也是这样过来的直到后来彻底切到conda管理环境才算消停。这篇文章就围绕“Windows下安装conda并创建虚拟环境”这件事把从下载安装到日常使用的完整链路捋一遍包括环境创建、激活、包管理、配合PyCharm使用以及一堆只有踩过坑才会知道的细节。不管你是刚摸Python的初学者还是已经被环境问题折磨过几轮的老人照着做一遍应该能少走不少弯路。1. 内容整体设计与思路拆解1.1 为什么偏偏是conda——它到底解决了什么痛点先聊个基本问题conda和pip到底啥区别很多人刚开始只觉得conda能建虚拟环境但它的价值远不止这个。pip是Python生态里的包管理器只管PyPI上的Python包。conda更狠它管的是整个“软件环境”不光能装Python包还能装Python解释器本身甚至能装一些非Python的底层库——比如某些科学计算依赖的C/C库、MKL数学库这些用pip装起来有时会让人抓狂。conda会自己去处理这些依赖的二进制文件统一放在环境目录里互不干扰。关键就在这里conda的环境是一整块独立的“迷你系统”每个环境里有自己专属的Python解释器、专属的site-packages目录跟你系统里其他东西完全隔离。这就意味着你在环境A里装TensorFlow、在环境B里装PyTorch两个环境井水不犯河水想删哪个删哪个想重装哪个重装哪个不会出现“为了装个新包把老项目弄崩”的惨剧。1.2 Windows下这个问题的特殊性Windows和Linux在装conda这件事上最大的区别在于“环境变量”和“路径”这两个坑。Linux用户一般把conda装好之后就万事大吉但Windows用户经常碰到“conda不是内部或外部命令”这种报错——本质就是环境变量没配好或者安装时没选对选项。另外Windows的终端也有讲究老牌的CMD、现代化的PowerShell、微软新推的Windows Terminal它们的路径解析和脚本执行策略都不一样。conda activate在CMD里能用在PowerShell里可能就报错这可不是玄学而是脚本执行权限的问题。后面我会专门讲这个。1.3 选Miniconda还是Anaconda别纠结Anaconda是个大礼包自带几百个常用包和Anaconda Navigator图形界面装完大概要占五六个G的空间。Miniconda是个精简版只有conda、Python和必要的依赖体积几百兆装完后你想要啥包再自己装。我的建议很直接不是特别迷茫的小白直接选Miniconda。原因有三个体积小不影响电脑性能。自带的包再全你也不可能全用上白占硬盘。通过conda install装包的过程本身就是一个学习“看日志、排依赖”的过程长期来看对理解Python环境体系有好处。如果你实在不想碰命令行那就装Anaconda用Navigator界面点着玩但我个人还是建议把命令行用起来毕竟团队协作、服务器上操作、自动化脚本全是命令行的东西。2. 核心细节解析与实操要点2.1 下载安装避坑指南——选版本没那么简单先去官网下载安装包这里有两个容易踩的细节。第一注意下载的是64位版本。现在绝大多数Windows电脑都是64位的但你要是稀里糊涂下个32位的后面装某些科学计算包会莫名报“本体不匹配”的错误排查起来特别费劲。第二Miniconda官网同时提供了Python 2.7版本和Python 3.x版本的安装包。现在Python 2已经停止维护了除非你维护老到掉牙的项目否则直接选Python 3.x版本不要犹豫。安装的时候有几个选项要特别注意Install for: Just me还是All Users。选Just me就行All Users在某些系统上会导致写入权限问题尤其是你不知道系统管理员密码的情况下。Add to PATH。这一步很多人纠结。网上说法五花八门有人说要勾上不勾就用不了conda有人说不建议勾会跟系统已有Python冲突。我的经验是如果电脑上没装过Python或者不介意让conda的base环境接管默认python命令那就勾上。如果电脑里已经有某个项目的Python环境担心冲突那就不勾安装完用Anaconda Prompt或PowerShell里手动初始化来用。但我的实际建议是勾上省去后面很多配置的麻烦毕竟conda本身就是做环境隔离的base环境的python一般也不会真的干扰到你别的项目。Register Anaconda as my default Python。如果电脑之前没装过Python勾上没坏处如果装过这个会默认把文件关联和命令行python指向conda的base环境有些人不喜欢这种“被抢走”的感觉那就取消。安装过程大概两到三分钟完事之后在开始菜单里能看到“Anaconda Prompt”之类的快捷方式Miniconda对应的是Miniconda Prompt。这个Prompt本质上是一个已经预先初始化好conda环境的CMD窗口用它来敲conda命令是最稳妥的路径。2.2 安装后的第一步验证与初始化安装完后打开一个新的CMD窗口或者Windows Terminal敲一行conda --version如果输出类似conda 23.11.0这样的版本号说明安装成功且环境变量配好了。如果提示“conda不是内部或外部命令”先别慌大概率不是没装好而是环境变量没生效。关掉终端重新打开一个新窗口通常就能解决。如果还不行再按后面的排查章节处理。接下来是很多新手会忽略的一步——初始化shell让conda命令能正常绑定到终端里。在CMD里执行conda init这个命令会把conda的初始化脚本写入你的shell配置里。执行完之后它会提示你“关闭并重新打开终端”照做。注意在PowerShell下有可能会碰到“无法加载文件因为在此系统上禁止运行脚本”的报错这是因为Windows默认的ExecutionPolicy限制了脚本执行。解决方案是管理员身份打开PowerShell然后执行Set-ExecutionPolicy RemoteSigned再重新打开终端就正常了。这个坑我见别人踩过不下十次提前在这儿说清楚能省一大段排查时间。2.3 配置国内镜像源——不换源你会等到怀疑人生默认情况下conda从Anaconda官方源下载包。国内网络环境下下载速度和稳定性都不可言说所以装完第一件事就是换源。国内比较通用的是清华源和中科大源用清华源的比较多配置方法也很简单。可以临时指定源安装conda install numpy -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/一次性指定装完就完了。但每次打包都要带这么长一串太麻烦推荐直接写入conda的配置文件以后都走镜像。在终端里执行conda config --set show_channel_urls yes然后手动编辑用户目录下生成的.condarc文件Windows下是C:\Users\你的用户名\.condarc写入channels: - defaults show_channel_urls: true default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud保存后conda会优先从清华源拉包。这里有个细节不要删掉defaults这个channel标签因为某些特定包在国内镜像上同步不及时保留defaults作为兜底能避免“源里根本没有这个包”的尴尬。虽然这样会偶尔走官方的慢速源但总比装不上强。如果你装的是Anaconda完整版换完源再做一件事更新conda本身conda update conda新版本通常会有更好的依赖解析策略和更快的通道读取速度。Miniconda用户同样建议做这一步。3. 实操过程与核心环节实现3.1 创建虚拟环境——用一条命令做好“隔离舱”换完源之后我们就可以正式创建虚拟环境了。语法很简单conda create -n 环境名称 python版本号比如创建一个用于数据处理的环境conda create -n data_sci python3.11这条命令的意思是创建一个叫data_sci的环境并在里面安装Python 3.11。conda会先解析依赖然后显示一个安装计划问你是不是确认输入y回车就行。等提示符回到(base) C:\Users\...的状态环境就创建成功了。这里注意看命令行前面多了(base)这是conda默认激活了base环境代表你现在正处于conda的“主环境”里。这里我要单独强调Python版本的选择。不同项目对Python版本的要求天差地别比如一些老旧项目要求3.7、3.8新一些的项目用3.10、3.11。用conda的好处就是创建环境时可以一条命令指定任意版本的Python不用自己下载解释器、配置PATH。我之前遇到过有朋友为了给不同项目切换Python版本手动去改系统环境变量改完这个项目跑不了、那个项目又崩了后来我直接帮他建了三个conda环境每个环境指定对应Python版本世界从此清净了。3.2 激活、退出、删除——环境的日常操作创建环境只是开始更常用的是环境的进出。激活环境在Windows上跟Linux还有点不一样conda activate data_sci命令执行完命令行前缀会从(base)变成(data_sci)说明你已经切到了这个环境里。此时你输入python调用的就是data_sci环境里的Python 3.11而不是base环境的Python。用which pythonWindows下没有which用where python可以查看当前解析到了哪个路径确认一下where python退出当前环境conda deactivate命令行前缀会回到(base)。如果你想完全退出conda回到系统原生的cmd状态就需要额外执行一次deactivate——但大多数情况下用不到保持在base环境里也没问题。查看当前机器上都有哪些环境conda env list输出会列出一堆环境名和对应的路径当前所在的环境前面会带个*。这个命令我用的频率超高建议形成习惯每次开工前先看一眼列表确认自己在哪个环境里。删除某个用不上的环境conda remove -n 环境名称 --all这个操作很彻底会把环境相关的一切都清掉。删之前务必确认这个环境里有没有没备份的重要代码或数据环境删了就基本找不回来了。还有个常用命令是克隆环境。比如你已经配置好了一个完整的data_sci环境想基于它复制出一个新环境用于另一个项目conda create -n data_sci_copy --clone data_sci这个命令在需要给团队多个成员配置一致环境时特别好用比手动一条条重新装包靠谱得多。3.3 环境里的包管理——装包、卸包、查依赖进入一个环境之后包管理基本就是三个命令conda install 包名 conda uninstall 包名 conda listconda list会列出当前环境所有已安装的包用的时候留意一下当前在哪个环境不然容易抽查到base环境里去了。安装包时可以指定版本比如conda install numpy1.26.0也可以一次装多个包conda install pandas scipy matplotlib jupyter有一个我实际用下来很顺手的小技巧是依赖某种包但不确定它在conda官方源里有没有或者官方源里的版本旧得离谱那就用conda-forge通道conda install -c conda-forge 包名conda-forge是社区维护的通道里面包的种类和更新速度往往优于官方源。在国内网络环境里可以配合前面配置的镜像写-c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge速度会好很多。另一个能大幅提升装包速度的工具是mamba。mamba是conda的C重写版依赖解析速度比conda快好几倍。安装方法很简单conda install mamba -c conda-forge之后就可以用mamba install 包名来代替conda install 包名体验完全不一样尤其是在需要解析大量依赖的复杂项目里差距非常明显。3.4 用requirements.txt或environment.yml复现环境——环境“快照”与迁移配好一个环境之后最怕的就是电脑挂了、硬盘坏了或者换台机器。conda给了两种“环境快照”方案。第一种导出当前环境的包列表conda env export environment.yml这个文件里记录了这个环境中所有包的名称、版本、来源通道等信息以后换机器时只需要conda env create -f environment.yml就能完整恢复出一个一模一样的虚拟环境。文件里记录的是精确版本号和构建号所以恢复出来的环境通常能做到依赖完全一致。第二种如果你只是在同一个conda体系里同步环境也可以用conda list -n 环境名称 --export requirements.txt这种方式导出的格式更简洁一点适合快速手动查看。但如果是需要分享给没装conda的人他们只能用pip装包那就得用到pip freeze requirements.txt注意pip freeze只记录pip视角看到的包和conda list的结果会有些差异但用于pip环境迁移是足够的。需要补充的是pip装进conda环境的包conda list也能看到但用conda uninstall可能卸不掉要用pip uninstall来清理。这个混用的小坑后面我会专门提。3.5 Windows下的路径优化——把环境建在D盘不占C盘空间还有一个很多Windows用户都会遇到的问题conda默认把环境放在C:\Users\你的用户名\.conda\envs\目录下。如果C盘空间紧张或者你习惯把工程文件放在D盘这个默认路径就很让人闹心了。解决办法是通过配置文件修改环境目录。在终端执行conda config --add envs_dirs D:\conda_envs这样以后创建的新环境都会放在D:\conda_envs下。已验证过的老环境不会自动移动位置需要你手动地把原来的环境文件夹剪切过去再重新执行上面的命令。执行完建议打开C:\Users\你的用户名\.condarc确认一下配置是否写入成功。这个做法尤其适合那些“系统盘已经飘红”的朋友把环境目录迁走能解放掉好几个G的磁盘空间。不过在Windows上还牵涉到一个权限问题如果你把环境建在类似C:\Program Files这种系统保护目录下conda可能会因为写入权限不足而创建失败或报错。建议选择D:\下自己创建的普通文件夹。这一点和“安装时选Just me”是同一个思路尽量避开系统需要管理员权限的区域。4. 常见问题与排查技巧实录4.1 “conda不是内部或外部命令”——第一大类问题的总根源这个问题在Windows里是最高频的。用大白话解释就是系统在PATH环境变量里找不到conda的启动程序。在Windows下排查路径问题就有它特有的套路。先检查conda安装路径。默认是C:\Users\你的用户名\miniconda3或C:\ProgramData\anaconda3。打开系统环境变量设置看Path变量里有没有包含像C:\Users\你的用户名\miniconda3和C:\Users\你的用户名\miniconda3\Scripts这样的条目。如果没有手动加上保存后重新打开终端。如果装的时候勾了“Add to PATH”但还是报错那就检查一下是不是开终端的时候用的是管理员模式。Windows上如果同一个终端窗口从非管理员用户切换到管理员环境变量有时不会自动重新加载。简而言之修改完环境变量后务必重新开一个新的终端窗口。4.2 “run conda init before conda activate”——激活环境的常见拦路虎这个报错我在很多答疑帖里都见过。意思是说conda还没把它的启动脚本注册进当前shell。解决方案就是在终端里执行conda init然后重启终端。如果你用的是PowerShell重启后仍然报错那可能是执行策略的限制按上面说的执行一次Set-ExecutionPolicy RemoteSigned再试。还有人会遇到一个问题cmd窗口里激活了环境但PowerShell窗口里一进来还是base环境没跟着走。这其实不是bug而是PowerShell是独立于CMD的一个新会话它自己会在启动时判断要不要激活环境。如果希望PowerShell里一打开就默认进入指定环境可以在PowerShell的$PROFILE文件里加一行conda activate 环境名这样可以实现开机即用、免手动激活的效果。4.3 创建环境时下载慢、卡住、超时这是换源之后最常遇到的问题之一。尽管已经换成清华源但某些包的同步可能不完整或者源本身压力大导致创建环境时“卡”在某个包的下载上久久不动。遇到这种情况有一个比较实用的验收步骤先用Ctrl C终止当前命令。执行conda clean -i清掉下载缓存。重新执行创建命令conda会重新下载。如果还是慢就手动在命令里指定源conda create -n test_env python3.11 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/如果依然卡住检查一下网络问题——有时候是防火墙或杀毒软件拦截了conda的下载进程。把终端程序加入信任列表之后再试。至于代理相关的东西这里不展开建议尽量用国内源直连。4.4 装包后出现“冲突”的解决方案每次我写环境配置教程都一定会提到“依赖冲突”这个词。它的表现是你执行conda install 包A结果conda提示“The following packages are conflicting”或者“failed to solve the environment”。这种问题的根源在于conda严格做依赖解析包A要求numpy版本在1.20到1.24之间而当前环境里正好装的1.26它就宁可拒绝执行安装也不愿意给你留下一个不能用的组合。遇到这种情况我的经验是分三步走别急着用--force硬装那样容易装出一个里外不是人的环境。试试conda install 包A 包B 包C把当前环境里打算一起用的包都写在一条命令里让conda一次性统一解析很多时候能找出一个大家都能接受的版本组合。如果conda的解析器太保守解不出来就切换到mamba它速度更快有时能解析出conda死路还绕不进去的方案mamba install 包A 包B 包C如果还解决不了干脆换方案新建一个空环境只装项目依赖的那些包从一开始就从干净的依赖关系开始。不要在原环境里反复折腾折腾到后面基本就是浪费时间。4.5 pip和conda混装造成的“幽灵包”数据分析用户经常犯一个错先用conda装了一半包图省事剩下的一律pip install。然后某天发现conda list里找不到某个包或者pip list和conda list内容对不上。这种“环境状态不一致”的问题在长期混用后极难排查。我现在给自己定的规矩是能用conda装的就用condapip只负责装conda上确实没有的包。而且所有pip操作都要先激活对应环境再执行避免pip把包装到别的环境里。一个判断package属于conda还是pip的小技巧conda list | findstr 包名有输出说明是conda装的没输出但能 import 到那多半是pip装的。处理这种“pip在环境里装的包找不到卸载入口”的情况进入环境后用pip uninstall 包名一般就能清理掉。注意不要用它来卸载conda装的包否则容易出现“conda认为包还在实际文件已经被删了”的状态后续各种诡异报错就来了。4.6 常见的Windows特有的环境变量问题Windows下的环境变量最坑的一个点是“修改了PATHT但当前终端不生效”。很多人改完环境变量回到原终端敲conda还是提示找不到命令第一反应是“改错了”。其实不是因为会话启动时已经读了一次PATH后续修改不会自动写回当前窗口。解决方案无他就是彻底关闭当前的终端窗口重新开一个。另一个隐藏比较深的点是如果你在“用户变量”和“系统变量”里都配置了Path系统会把两者拼接起来。如果出于某种原因你把conda路径写错了位置可能导致系统先找到某个旧版本的conda。排查方法是执行where conda这个命令会输出所有被PATH记录在内的conda路径从上到下就是系统搜索的顺序。如果出现了多个路径比如一个用户目录下的、一个ProgramData下的就要注意有没有装过两个conda。我见过有朋友不知道自己电脑里同时装了Anaconda和Miniconda命令行调的conda和PyCharm里配的conda根本不是同一个各种莫名其妙的问题接了半个月的锅。4.7 PyCharm里关联conda环境如果日常用PyCharm写代码这个小节值得看一下因为这个配置错误会让人很崩溃代码在命令行里能跑在PyCharm里却报模块找不到。PyCharm关联conda环境的流程是打开File-Settings-Project: 项目名-Python Interpreter点右上角的齿轮图标选Add然后选择Conda Environment。这时有两个选择Use existing environment直接挑一个已经建好的conda环境。Create new environment让PyCharm帮你新建一个。选“Use existing environment”的情况下重要的一步是确认“Conda executable”指向正确的conda路径。这个路径在安装Miniconda后一般是C:\Users\你的用户名\miniconda3\Scripts\conda.exe。如果这里没配对PyCharm会提示找不到conda或者解析不到环境列表。配好后新建或打开一个Python文件在右下角状态栏能看到当前使用的解释器名称。如果它显示的是base环境而你想用data_sci环境手动切换一下即可。这个环节还有一个经常被忽略的点PyCharm里配置完环境后终端窗口也要对应切换到该环境。PyCharm内置的Terminal默认会继承解释器环境但有时候因为conda init没执行过终端里仍然是base环境。在PyCharm的Settings - Tools - Terminal里把Shell path设置为cmd或powershell并确保conda初始化已经完成这样每次打开内置终端都会自动带上指定环境。5. 工具选型解析5.1 终端选择CMD、PowerShell还是Windows Terminal现在Windows上终端种类多选一个顺手的有助于提高效率。CMD老牌兼容性最好conda的命令基本都能跑但对一些现代脚本支持不佳比如输出彩色高亮就没有。PowerShell功能强支持复杂脚本但第一次用conda activate时容易遇到执行策略限制需要额外设置一次ExecutionPolicy。我发现不少教程在这一点上写得含糊新手照着做很容易卡住。Windows Terminal微软官方推荐的现代终端可以同时打开多个标签页每个标签页可以是不同shell。我目前的主力是它左边一个CMD窗口跑conda命令右边一个PowerShell窗口跑git操作视觉上清爽也便于核对不同环境的状态。选好一个终端后建议把conda init各跑一遍让conda和这个终端绑定好后面用起来才能行云流水。5.2 版本管理conda、pyenv还是uv顺便聊一下其他环境管理工具方便你了解什么时候用conda、什么时候用别人。Python生态里pyenv是Linux/macOS下比较流行的Python版本管理工具但Windows上体验一般uv是这两年新兴的、用Rust写的极速虚拟环境和包管理器执行速度比conda和pip都夸张轻量项目的用户体验拉满但生态成熟度和团队里的通用性目前不如conda。什么时候用conda、什么时候用uv我给的建议是依赖Numpy、Pandas、Scikit-learn、PyTorch等科学计算栈用conda因为底层二进制依赖处理得最省心。纯Python项目、Web应用、工具脚本对版本隔离要求高但不想装大几千兆的管理器可以考虑uv。团队协作场景其他人都在用conda那你也用conda环境文件统一的协作成本最低。工具不是越新越好关键是能在当前团队上下文里顺畅复用。“我用uv建环境其他人用conda建环境导出的文件互相不通用”这种事情是很容易在协作里搞出幺蛾子的提前想清楚比较稳妥。5.3 一个额外的建议无论装哪个环境先整理一个“环境规划清单”配环境配久了我慢慢养成了一个习惯写一个env_notes.txt放在工程根目录里面记着这个项目适合用哪个Python版本。核心依赖大概有哪些。创建环境的完整命令。需要哪几个相关环境比如开发环境、测试环境。里边哪些包是从conda装的、哪些是pip装的。这样哪怕隔了几个月回去继续维护老项目或者有新人加入团队照着这个清单几分钟就能把环境搭起来。实际协作时这个文件的物价比什么“你应该用conda这个最佳实践”的科普贴都高因为它是你项目的具体文档。6. 实操记录从零搭一个新环境全过程这一节我按照自己的习惯把“从零开始搭一个数据分析环境”的完整流程贴出来按照实际执行的顺序写方便你直接对照着敲。环境目标Python 3.11 pandas numpy matplotlib jupyter scikit-learn环境名就叫data_sci。第一步确认终端和conda版本conda --version第二步创建环境conda create -n data_sci python3.11 -y-y参数表示跳过确认提示直接执行。第三步激活环境conda activate data_sci看到命令行前缀变成(data_sci)就对了。第四步确认Python版本python --version如果输出的是Python 3.11.x说明环境里的解释器已经正确指向了。第五步安装核心包conda install pandas numpy matplotlib scikit-learn jupyter -y加不加-y看个人习惯我通常是加上省的敲回车。第六步用pip装一个conda没有的包举例pip install some-tool-only-on-pypi第七步把环境导出为文件conda env export environment.yml到这里环境搭建完成。整个过程干净利落没有系统Python污染的问题也不用担心“昨天还能跑今天全崩了”。需要清理环境时直接conda env remove -n data_sci一切都像没发生过一样。7. 最后分享一点个人心得从第一次被环境问题暴打到今天我最大的感受是虚拟环境这个东西本质上是给“不想相互干扰”的程序们各自圈一块地。你给它规划好地盘它能把你从无穷无尽的依赖地狱里解救出来你懒得管它它就会在某个深夜的项目冲刺里狠狠背刺你一下。我在Windows下用conda的时间很长踩过的坑包括但不限于PATH配错导致双conda打架、PyCharm里解释器选错导致装了一万遍还是找不到包、pip和conda混装后环境无法清理、C盘空间被环境占满差点重装系统。这些坑没有一个是有多高深的技术含量但每一个都在当时浪费了我大把时间。写这篇文章就是希望能让你避开我走过的这些弯路。如果你现在刚准备开始我的建议是装Miniconda改一下清华源顺着“2.下载安装避坑指南”到“3.4用requirements.yml复现环境”走一遍再配合“4.常见问题速查表”处理意外基本就能顺顺当当跑起来了。后续有一个项目就单独建一个环境用完就删不心疼也不会给以后的自己留雷。
返回列表