1. 为什么我劝Windows用户从Miniconda开始搭Python环境
刚接触Python的朋友,十个里有八个在环境配置这一步卡住过。装完Python本体,pip装包报错,版本冲突,A项目要numpy 1.20,B项目要numpy 1.24,装来装去把系统环境搞得一团糟,最后只能重装系统——这种经历我见过太多次了。所以当有人问我“Windows上Python环境怎么搭”的时候,我基本都会直接推荐Miniconda,而不是官方Python安装包。
Miniconda是什么?简单说,它是Anaconda的精简版,只保留了conda这个包管理器和Python本体,去掉了Anaconda预装的那一大堆科学计算库。Anaconda动辄3到5个G,装完一堆你可能一年都用不到的包;Miniconda安装包只有几十兆,装完也就几百兆,干净利落。conda这个工具的核心价值在于它能同时管理Python版本和第三方包,并且通过虚拟环境把不同项目的依赖彻底隔离开。你在A环境里把numpy降级到1.20,不会影响B环境里的numpy 1.24,这就是虚拟环境的意义。
这篇内容适合谁看?如果你是刚学Python的新手,被环境问题折磨过,或者你需要在同一台Windows电脑上维护多个不同依赖的项目,再或者你之前用Anaconda觉得太臃肿想换轻量方案,那这篇就是写给你的。我会从下载安装包开始,一步步讲到conda换源、创建虚拟环境、在VSCode里配置解释器,以及那些官方文档不会告诉你但实际用起来一定会踩的坑。整个过程不需要你懂什么高深原理,跟着操作就行。
我自己的主力开发机是Windows 11,平时同时维护三四个Python项目,有的跑爬虫用3.9,有的跑数据分析用3.11,还有的跑一些老代码需要3.7。全靠Miniconda的虚拟环境撑着,互不干扰。下面把我这些年积累的安装配置流程和踩坑经验完整梳理一遍。
2. Miniconda安装前的准备工作与版本选择
2.1 下载渠道与安装包选择
Miniconda的官方下载地址是docs.conda.io/en/latest/miniconda.html,打开之后你会看到Windows、macOS、Linux三个平台的下载选项。Windows下面又分Miniconda3 Windows 64-bit和32-bit,现在基本没人用32位系统了,直接选64-bit就行。
这里有个细节要注意:官方页面提供的是最新版本的安装包,但如果你有特殊需求,比如某个老项目必须用Python 3.8,那你可以去repo.anaconda.com/miniconda/这个地址找历史版本。不过说实话,Miniconda本体装哪个版本不太重要,因为装完之后你可以通过conda命令创建任意Python版本的虚拟环境。Miniconda自带的那个base环境的Python版本只影响你直接敲python命令时的默认版本,不影响你创建其他环境。
安装包有两种格式:.exe和.zip。.exe是图形化安装程序,双击就能装,适合新手。.zip是免安装版,解压之后配置一下环境变量就能用,适合需要批量部署或者不想在系统里留安装记录的场景。我建议新手直接用.exe,省事。
下载的时候注意看一下文件大小,正常应该在80MB到120MB之间。如果下载下来只有几KB或者几MB,那大概率是下载中断了,重新下就行。国内网络环境下载官方源有时候会比较慢,如果实在下不动,可以找国内镜像站,比如清华大学的镜像站mirrors.tuna.tsinghua.edu.cn,里面也有Miniconda的安装包。
2.2 安装过程中的关键选项
双击.exe之后,安装向导会一步步引导你。前面几个页面都是常规的许可协议和安装路径选择,重点在后面的高级选项页面。
第一个关键选项是“Install for: Just Me”还是“All Users”。如果你电脑只有你自己用,选Just Me就行,安装路径会在你的用户目录下,不需要管理员权限。如果选All Users,安装到C:\ProgramData下面,需要管理员权限,但好处是这台电脑上所有用户都能用。我一般选Just Me,避免权限问题。
第二个关键选项是“Add Miniconda3 to my PATH environment variable”。这个选项默认是不勾选的,官方建议也是不勾选。为什么不勾选?因为如果你系统里已经装了其他Python,把Miniconda加到PATH里可能会导致冲突,你敲python命令的时候不知道调的是哪个。但如果你确定系统里没有其他Python,或者你就是想让conda命令在任何终端里都能直接用,那勾上也没问题。我个人的做法是不勾选,然后用“Anaconda Prompt”这个专用终端来操作conda命令,这样最干净。
第三个选项是“Register Miniconda3 as my default Python”。这个选项的意思是让Miniconda自带的Python成为系统默认的Python。如果你之前没装过Python,勾上也无妨。但如果你已经装了官方Python并且用得好好的,就别勾了,免得打架。
安装路径建议不要有中文和空格。虽然现在conda对中文路径的支持比以前好多了,但保不齐某个包在安装或者编译的时候对路径有要求,中文路径出问题的概率还是比英文路径高。我一般就装在C:\miniconda3或者D:\miniconda3这种简单路径下。
安装过程大概需要一两分钟,进度条走完之后点Finish就结束了。装完之后你会在开始菜单里看到“Anaconda Prompt (Miniconda3)”这个快捷方式,后面我们的所有conda操作基本都在这个终端里进行。
2.3 验证安装是否成功
装完之后第一件事是验证。打开“Anaconda Prompt (Miniconda3)”,你会看到一个类似cmd的黑色窗口,前面有个(base)的标识,说明你当前在base环境下。然后依次敲下面几个命令:
conda --version python --version conda infoconda --version会显示conda的版本号,比如conda 23.11.0。python --version会显示base环境的Python版本,比如Python 3.11.5。conda info会输出一堆信息,包括conda的安装路径、base环境路径、Python版本、平台信息等。如果这三个命令都能正常输出,说明安装没问题。
如果提示“conda不是内部或外部命令”,那说明你没在Anaconda Prompt里操作,而是在普通的cmd或者PowerShell里敲的。回到开始菜单,找到Anaconda Prompt再试。如果你确实想在普通终端里也能用conda,那就需要手动把conda的路径加到系统环境变量里,具体路径一般是你的安装目录下的Scripts和condabin文件夹。
3. conda换源与基础配置:让下载速度飞起来
3.1 为什么要换源
conda默认的包仓库在国外,国内访问速度很不稳定。有时候下载一个几十兆的包要等好几分钟,甚至直接超时失败。换源就是把包仓库地址换成国内的镜像站,下载速度能从几十KB每秒提升到几MB每秒,体验完全不一样。
常用的国内镜像源有清华TUNA、中科大USTC、阿里云等。清华的镜像站更新比较及时,我用得最多。换源的方式有两种:一种是直接修改.condarc配置文件,另一种是用conda config命令逐条添加。我推荐直接改配置文件,一次搞定,不容易出错。
3.2 通过.condarc文件配置镜像源
.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 pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud nvidia: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud这里解释一下各个配置项的含义。channels下面的defaults表示默认从default_channels里列出的地址找包。show_channel_urls设为true之后,你安装包的时候会显示包是从哪个源下载的,方便排查问题。default_channels就是核心的包仓库地址,换成了清华的镜像。custom_channels是针对一些第三方channel的镜像,比如conda-forge、pytorch这些,它们不在defaults里,需要单独指定镜像地址。
保存文件之后,在Anaconda Prompt里执行:
conda clean -i这个命令是清除conda的索引缓存,确保下次安装包的时候用的是新的镜像地址。然后你可以执行conda config --show channels看看当前配置的channel列表,确认换源生效了。
3.3 pip也别忘了换源
conda换源解决的是conda install的下载速度问题,但很多包你还是会用pip install来装。pip的源也需要单独配置。在用户目录下创建pip文件夹,里面新建一个pip.ini文件,路径是C:\Users\你的用户名\pip\pip.ini,内容如下:
[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple trusted-host = pypi.tuna.tsinghua.edu.cn这样pip install的时候也会走清华的镜像。trusted-host这一行是为了避免SSL证书验证的问题,有些环境下不加这一行会报错。
注意:换源之后如果遇到某个包在镜像站上找不到的情况,可以临时用-i参数指定官方源来安装,比如pip install somepackage -i https://pypi.org/simple。但这种情况比较少见,大部分常用包镜像站都有。
3.4 其他值得调整的conda配置
除了换源,还有几个conda配置项值得调整。执行下面这几条命令:
conda config --set auto_activate_base false conda config --set always_yes true第一条命令是关闭base环境的自动激活。默认情况下,你每次打开终端都会自动进入base环境,前面显示(base)。关掉之后,打开终端不会自动激活任何环境,你需要手动conda activate来激活。这样做的好处是避免你在base环境里误装一堆包,保持base环境的干净。base环境我建议只用来管理conda本身,不要在里面装项目依赖。
第二条命令是让conda在执行安装、卸载等操作时自动确认,不用每次都敲y。这个看个人习惯,有人喜欢每次确认一下,有人觉得烦。我一般设成true,省事。
4. 虚拟环境管理:conda的核心用法
4.1 创建虚拟环境的完整命令与参数解读
创建虚拟环境是conda最核心的功能。基本命令格式是:
conda create -n 环境名 python=版本号比如我要创建一个叫spider的环境,用Python 3.9:
conda create -n spider python=3.9执行之后conda会解析依赖,列出将要安装的包,然后问你确认。输入y回车,它就会从镜像站下载Python 3.9以及相关的依赖包,安装到envs目录下。整个过程快的话一两分钟,慢的话三五分钟,取决于网络速度。
这里有几个参数值得说明。-n是指定环境名称,你也可以用--name。环境名建议用英文,不要有空格和特殊字符。python=3.9是指定Python版本,你也可以写python=3.9.18这样精确到小版本,但一般写大版本就够了,conda会自动选该大版本下最新的小版本。
如果你想在创建环境的同时安装一些包,可以直接跟在后面:
conda create -n data_analysis python=3.11 numpy pandas matplotlib jupyter这样创建完环境之后,这些包就已经装好了,省得你再一个个装。
创建完成之后,用conda activate来激活环境:
conda activate spider激活之后,终端前面的标识会从(base)变成(spider),表示你现在在spider环境下。这时候你敲python --version,显示的应该是Python 3.9.x。你在这个环境下用pip install装的包,也只会装到spider环境里,不会影响其他环境。
退出环境用:
conda deactivate4.2 环境查看、克隆与删除
查看当前所有环境:
conda env list或者简写:
conda info --envs输出会列出所有环境及其路径,当前激活的环境前面有个星号。
有时候你需要复制一个环境,比如你配好了一个环境,想基于它改一改做另一个项目。用clone命令:
conda create -n new_env --clone old_env这个命令会把old_env里的所有包复制到new_env里。注意clone出来的环境路径和包都是独立的,改一个不会影响另一个。
删除环境:
conda remove -n env_name --all这个命令会删除整个环境及其所有包。删之前确认一下这个环境确实不需要了,删了就找不回来了。
4.3 环境导出与迁移
如果你想把当前环境的配置分享给同事,或者迁移到另一台电脑,可以导出环境配置文件:
conda env export > environment.yml这个命令会把当前环境的所有包及其精确版本号导出到environment.yml文件里。别人拿到这个文件之后,执行:
conda env create -f environment.yml就能创建一个一模一样的环境。
不过conda env export导出的文件里包含了prefix行,记录了环境路径,这个在迁移的时候可能会造成问题。你可以用conda env export --no-builds来去掉build号,或者手动编辑yml文件删掉prefix行。另外,如果你只想导出你手动安装的包,不包含依赖,可以用:
conda env export --from-history > environment.yml这样导出的文件更简洁,但别人创建环境的时候conda会重新解析依赖,可能会装到不同版本的依赖包。
实操心得:我一般用--from-history导出,然后在yml文件里手动补充一些关键包的版本号。这样既简洁又能保证核心依赖的版本一致。
5. 在VSCode中配置conda虚拟环境
5.1 VSCode与Python插件的安装
VSCode是现在最流行的代码编辑器之一,轻量、免费、插件丰富。去code.visualstudio.com下载Windows版安装包,一路下一步装完就行。装完之后打开VSCode,点击左侧的扩展图标(四个方块那个),在搜索框里输入Python,找到Microsoft出的那个Python插件,点击安装。
这个插件提供了代码补全、语法检查、调试、运行等功能。装完Python插件之后,它还会推荐你装Pylance,这是微软出的语言服务器,提供更强大的类型检查和智能提示,建议一并装上。
5.2 选择conda虚拟环境作为解释器
装完插件之后,打开你的项目文件夹。按Ctrl+Shift+P打开命令面板,输入Python: Select Interpreter,回车。VSCode会列出它检测到的所有Python解释器,包括你conda创建的那些环境。找到你需要的那个环境,比如spider环境对应的python.exe,点击选中。
选中之后,VSCode底部状态栏会显示当前使用的Python版本和环境名称。你新建一个.py文件,在里面敲代码,VSCode就会用你选中的那个环境来运行和调试。
如果VSCode没有自动检测到你的conda环境,可能是conda的路径没被VSCode识别。你可以在VSCode的设置里搜索python.condaPath,把conda的可执行文件路径填进去,比如C:\miniconda3\Scripts\conda.exe。或者你也可以在命令面板里执行Python: Select Interpreter,然后手动输入解释器路径。
5.3 终端自动激活环境
VSCode内置的终端默认是PowerShell。如果你在VSCode里打开终端,发现conda activate命令用不了,提示“conda不是内部或外部命令”,那是因为PowerShell没有加载conda的初始化脚本。
解决办法是在VSCode的设置里搜索terminal.integrated.profiles.windows,添加一个Anaconda Prompt的配置。或者更简单的方式是,在VSCode的settings.json里加上:
"terminal.integrated.defaultProfile.windows": "Command Prompt", "terminal.integrated.profiles.windows": { "Command Prompt": { "path": "C:\\Windows\\System32\\cmd.exe", "args": ["/K", "C:\\miniconda3\\Scripts\\activate.bat"] } }这样VSCode的终端启动时会自动执行activate.bat,加载conda环境。你把路径换成你自己的Miniconda安装路径就行。
注意:如果你之前执行过conda config --set auto_activate_base false,那终端启动后不会自动进入base环境,你需要手动conda activate 环境名。这是符合预期的行为。
6. 常见问题与排查技巧实录
6.1 conda activate报错“run 'conda init' before 'conda activate'”
这是新手最常见的问题之一。你在PowerShell或者普通cmd里敲conda activate,会看到这个报错。原因是conda没有对当前shell进行初始化。
解决办法是在Anaconda Prompt里执行:
conda init这个命令会修改你的shell配置文件,让shell启动时加载conda的初始化脚本。执行完之后关掉终端重新打开,再试conda activate就应该可以了。
如果你用的是PowerShell,执行conda init之后它会修改你的PowerShell profile文件。如果之后你想撤销这个修改,可以执行conda init --reverse。
6.2 安装包时出现SSL证书错误
有时候conda install或者pip install会报SSL证书验证失败的错误,尤其是在公司网络或者用了代理的情况下。解决办法是临时关闭SSL验证:
conda config --set ssl_verify false或者pip的话在pip.ini里加上trusted-host。但要注意,关闭SSL验证会降低安全性,只建议在可信网络环境下临时使用,问题解决后应该改回true。
6.3 环境创建失败或卡在Solving environment
conda在创建环境或者安装包的时候会先“Solving environment”,也就是解析依赖关系。如果依赖关系复杂,这个过程可能会很慢,甚至卡住。几个应对方法:
第一,尽量指定精确的版本号,减少conda的解析空间。比如python=3.9.18比python=3.9更快。
第二,使用conda create的时候加上--no-deps参数跳过依赖解析,但这样可能会导致包不完整,慎用。
第三,如果conda实在解析不出来,可以试试用mamba。mamba是一个用C++重写的conda替代品,解析依赖的速度比conda快很多。你可以先装mamba:
conda install -n base -c conda-forge mamba然后后续用mamba create、mamba install来代替conda的对应命令,用法完全一样。
6.4 卸载Miniconda的正确姿势
如果你要卸载Miniconda,不要直接删安装目录,那样会留下注册表项和环境变量。正确的做法是:
第一步,用conda remove把所有你创建的环境删掉。
第二步,在控制面板的程序和功能里找到Miniconda3,点击卸载。
第三步,手动删除残留的文件夹,包括安装目录和用户目录下的.conda、.condarc等。
第四步,检查系统环境变量PATH里有没有Miniconda相关的路径,有的话删掉。
6.5 常见问题速查表
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| conda命令找不到 | 没在Anaconda Prompt里操作,或PATH未配置 | 用Anaconda Prompt,或手动添加conda路径到PATH |
| conda activate报错 | shell未初始化 | 执行conda init后重开终端 |
| 下载包速度慢 | 默认源在国外 | 换清华或中科大镜像源 |
| Solving environment卡住 | 依赖解析复杂 | 指定精确版本,或用mamba替代 |
| pip install报SSL错误 | 证书验证失败 | 配置trusted-host或临时关闭ssl_verify |
| VSCode找不到conda环境 | conda路径未识别 | 设置python.condaPath |
| 环境创建后python版本不对 | 环境未激活 | 执行conda activate 环境名 |
| 包安装到了base环境 | 忘记激活环境 | 先conda activate再装包 |
7. 我这些年用Miniconda踩过的坑和总结的经验
说几个官方文档不会写但实际用起来一定会遇到的问题。
第一个坑是中文用户名。Windows用户目录如果是中文的,比如C:\Users\张三,conda在某些情况下会出问题,尤其是涉及到路径拼接的时候。如果你正好是中文用户名,建议把Miniconda装到D盘或者C盘根目录下的英文路径,比如C:\miniconda3,不要装在用户目录下。环境变量和.condarc文件的位置也尽量用英文路径。
第二个坑是多个Python版本共存。如果你系统里既有官方Python,又有Miniconda,还有可能装了其他软件自带的Python,那PATH里的顺序就很重要。谁在PATH前面,敲python命令的时候就调谁。我建议是把Miniconda的路径放在最后,或者干脆不把Miniconda加到PATH里,只用Anaconda Prompt来操作。这样最不容易乱。
第三个坑是环境装多了之后磁盘空间不够。每个conda环境都是独立的,里面有一份完整的Python和所有依赖包。一个环境少则几百兆,多则几个G。如果你创建了十几个环境,磁盘空间很快就没了。定期用conda env list看看有哪些环境,不需要的及时删掉。另外conda clean -a可以清理下载缓存和未使用的包,也能释放不少空间。
第四个坑是pip和conda混用。在一个conda环境里,你可以用conda install也可以用pip install。但两者混用有时候会导致依赖冲突,因为conda不知道pip装了什么,pip也不知道conda装了什么。我的建议是:优先用conda install,conda源里没有的包再用pip install。而且尽量先装conda的包,再装pip的包,不要反过来。
第五个坑是环境激活后pip指向不对。有时候你激活了环境,敲pip --version发现指向的还是base环境的pip。这是因为pip的路径没有跟着环境切换。解决办法是用python -m pip install来代替直接敲pip install,这样能确保用的是当前环境的pip。
最后分享一个我常用的工作流:每个新项目创建一个独立的conda环境,环境名和项目名一致。项目根目录下放一个environment.yml,记录这个项目的依赖。项目做完之后如果不再维护,就把环境删掉。这样既能保证项目之间的依赖隔离,又不会让磁盘里堆满废弃的环境。base环境只用来装conda、mamba这些管理工具,不装任何项目依赖。这套流程我用了好几年,基本没再遇到过环境冲突的问题。