尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Windows Python环境搭建:Miniconda安装配置与虚拟环境管理指南

Windows Python环境搭建:Miniconda安装配置与虚拟环境管理指南 1. 为什么我劝Windows用户从Miniconda开始搭Python环境刚接触Python的朋友十个里有八个在环境配置这一步卡住过。装完Python本体pip装包报错版本冲突A项目要numpy 1.20B项目要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.9conda create -n spider python3.9执行之后conda会解析依赖列出将要安装的包然后问你确认。输入y回车它就会从镜像站下载Python 3.9以及相关的依赖包安装到envs目录下。整个过程快的话一两分钟慢的话三五分钟取决于网络速度。这里有几个参数值得说明。-n是指定环境名称你也可以用--name。环境名建议用英文不要有空格和特殊字符。python3.9是指定Python版本你也可以写python3.9.18这样精确到小版本但一般写大版本就够了conda会自动选该大版本下最新的小版本。如果你想在创建环境的同时安装一些包可以直接跟在后面conda create -n data_analysis python3.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虚拟环境作为解释器装完插件之后打开你的项目文件夹。按CtrlShiftP打开命令面板输入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 environmentconda在创建环境或者安装包的时候会先“Solving environment”也就是解析依赖关系。如果依赖关系复杂这个过程可能会很慢甚至卡住。几个应对方法第一尽量指定精确的版本号减少conda的解析空间。比如python3.9.18比python3.9更快。第二使用conda create的时候加上--no-deps参数跳过依赖解析但这样可能会导致包不完整慎用。第三如果conda实在解析不出来可以试试用mamba。mamba是一个用C重写的conda替代品解析依赖的速度比conda快很多。你可以先装mambaconda 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路径到PATHconda activate报错shell未初始化执行conda init后重开终端下载包速度慢默认源在国外换清华或中科大镜像源Solving environment卡住依赖解析复杂指定精确版本或用mamba替代pip install报SSL错误证书验证失败配置trusted-host或临时关闭ssl_verifyVSCode找不到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 installconda源里没有的包再用pip install。而且尽量先装conda的包再装pip的包不要反过来。第五个坑是环境激活后pip指向不对。有时候你激活了环境敲pip --version发现指向的还是base环境的pip。这是因为pip的路径没有跟着环境切换。解决办法是用python -m pip install来代替直接敲pip install这样能确保用的是当前环境的pip。最后分享一个我常用的工作流每个新项目创建一个独立的conda环境环境名和项目名一致。项目根目录下放一个environment.yml记录这个项目的依赖。项目做完之后如果不再维护就把环境删掉。这样既能保证项目之间的依赖隔离又不会让磁盘里堆满废弃的环境。base环境只用来装conda、mamba这些管理工具不装任何项目依赖。这套流程我用了好几年基本没再遇到过环境冲突的问题。
返回列表