选择做点事,就得花时间,好让过程有意思
有时候我觉得啊,用计算机系统就好比炒股、打牌,只要不下桌,该遇到的总会遇
一. 环境配置方案
选择Python,必然会涉及环境配置,有很多种方案可选:
1. 基础方案:内置的venv+pip,是官方轻量的环境隔离和包安装工具,但性能和可靠性略逊;
2. 高性能方案:uv,专业高效的新型工具链,整合包管理、项目配置和环境管理功能;是大型纯python项目的趁手工具
3. 科研方案:conda/mamba/pixi,管理跨语言的数据科学和AI应用环境的基准;性格和python一样,有粘性、有广度
我选装了3里面的conda方案,管理各功能软件包之间的依赖,建项目环境边界和基础
二. Anaconda、Miniconda和Miniforge的选择
三个都是基于conda构建的环境和包管理工具,前两种出自ANACONDA公司是附带条件的商业发行版,后一种是社区维护的开源版
1. Anaconda Distribution是一款全面的安装程序,针对数据科学和人工智能工作流程进行了优化,自动包含数百个软件包,还有conda、交互式开发环境Spyder和Jupyter、图形化包管理界面Navigator,体积庞大

2. Miniconda是一个轻量级版本,仅包含 conda、Python 及基础依赖,用户可以按需配置3. Miniforge和Miniconda底层基本一样,默认频道是conda-forge,无商业限制且更快捷,兼容性和性能都很超前

即便是初学者,Miniforge&Miniconda也是更好的选择,一味追求开箱即用的Anaconda在工具现代化的今天,稍微遇到点问题便会束手无策。我也遇到过困难,也有反复折腾的经历,经过认真筛选,为了工作便利,从Anaconda过渡到Miniconda
三、在Anaconda上花的精力和时间
1. 第一次接触是5年前,因为数据分析需要装了Anaconda,按网上的教程照猫画虎点next安装、配置国内镜像、修改环境变量,安装成功
使用习惯,开始的时候主要精力都在Python目标实现疏于环境管理,没有建虚拟环境,需要安装任何库都直接安装,基本不区分pip和conda。IDE也是Jupter和spyder都用,还都默认配置,不出所料后来遇到了问题
2. 实践出真知,26年初有个小项目需要用到pytorch框架,然后我就像平时一样,直接运行pip install torch torchvision torchaudio,安装完以后,运行程序就报错
开始排查,pytorch是不是拉错了版本,卸载相关依赖十几个包,为了排除cuda的影响指定cpu版本和源重新安装;就这么来回折腾了好几遍,层层降级,试了好几个版本程序依然报错
清空缓存,重新修复C++组件也没有解决;怀疑环境问题,第一次新建了虚拟环境,重新安装相关包,仍然报错
重新认真读官方文档,查看pytroch和python相互支持的版本,一个2.9一个3.12,版本都挺成熟稳定也互相都支持,到底问题出哪儿了呢?
再重新建了个虚拟环境,降级python版本试一下,于是指定3.11版,安装pytorch版本2.9,终于程序能跑了
官方声明的版本支持在实践中有出入啊!这个过程前后耗时一个多星期,虽然最后程序跑通了,但是我也知道现在必须得重新折腾了
3. 关于环境和软件包
环境包括基础(base)环境和虚拟环境,其中base环境是新装conda以后的默认环境,主要运行conda相关的包;conda官方建议用户创建新的虚拟环境作为工作环境
软件包有很多种,但在conda生态系统中,最常用的类型是conda包和Python包;Conda 最初由 Anaconda 开发,主要是为了解决pip无法编译C扩展的问题,现在由开源社区维护
疏忽的代价就是两种包,分别落在不同的环境,烦恼是必然的
4. 尝试解决问题,从环境潜移开始
我用Win11,base环境和虚拟环境和新装包都是默认落在C盘的某个地方,环境迁移的目标是搞清楚他们都在哪里,然后把各种环境pip已经安装的包,连同C盘conda建的虚拟环境,及在此虚拟环境里用conda和pip安装的包,安全可靠的全部迁移到D盘的指定文件夹
1)查询当前安装目录
①conda config --show envs_dirs # 显示各处当前存在的环境
%USERPROFILE%\.conda\envs
~\envs
%LOCALAPPDATA%\conda\conda\envs
②conda config --show pkgs_dirs # 显示各处的下载缓存位置
~\pkgs
%USERPROFILE%\.conda\pkgs
%LOCALAPPDATA%\conda\conda\pkgs
③pip config list # 默认地址不显示或显示用户目录下的base环境地址
%LOCALAPPDATA%\pip\cache
%APPDATA%\Python\Python版本\site-packages
④conda info # 用来查看更详细的conda相关的配置信息
很多信息,包括环境、版本、引擎、地址、频道、程序、路径等
⑤python -m site # 用来查看更详细的pip安装程序的安装路径
sys.path = [Python默认的一连串目录]
USER_BASE,USER_SITE便是pip安装目录
2)新建D盘的安装目录
"D:\Data\pypi\pkgs","D:\Data\pypi\cache","D:\Data\conda\pkgs","D:\Data\conda\envs" | %{New-Item -ItemType Directory -Force $_}
3)备份当前目录下的包
①备份pip全局安装的包
pip freeze > D:\Data\pypi\global_base_pip.txt
②备份用户目录下用pip安装的包列表
pip list --user --format=freeze > D:\Data\pypi\user_base_pip.txt
③备份所有 conda 环境列表
conda env list > D:\Data\conda\conda_envs_list.txt
④对每个虚拟环境单独备份,例如
conda activate pytorch_env
conda env export > D:\Data\conda\pytorch_env.yml
conda deactivate
4)设置新的路径指向
①修改conda虚拟环境配置文件
conda config --add envs_dirs D:\Data\conda\envs
②设置conda缓存路径
conda config --add pkgs_dirs D:\Data\conda\pkgs
③设置pip缓存路径
pip config set global.cache-dir D:\Data\pypi\cache
④修改pip安装目录
pip config set global.target D:\Data\pypi\pkgs
⑤用前面1)里面的命令分别查询验证
envs_dirs:新的环境排名在最上面就ok
pkgs_dirs:仅剩余最新指定的目录就ok
global.cache-dir:显示最新指定目录就ok
global.target:显示最新指定目录就ok
针对conda的修改在用户目录:.condarc中
针对pip的修改在用户目录:%APPDATA%\pip\pip.ini中
5)迁移现有虚拟环境
以迁移pytorch_env环境为例:conda create --clone pytorch_env --prefix D:\Data\conda\envs\pytorch_env
运行完以后会定向Source、Destination、Packages、Files,并进行校验和安装,运行完毕conda env list检验复制的环境是否成功,此时C盘原有环境仍在
待检验新的虚拟环境检验可以运行后,开始删除C盘conda记录
conda clean -a -y # 清理conda缓存
rmdir /s /q %USERPROFILE%\.conda\envs # 删除环境目录
rmdir /s /q %USERPROFILE%\.conda\pkgs # 删除缓存目录
conda install命令使用较少,base环境新装的包基本都在用户目录下,所以删除了这两个conda环境和缓存
6)迁移base环境pip安装的包
用备份清单迁移全局包
pip install -r D:\Data\pypi\global_base_pip.txt --target D:\Data\pypi\pkgs
执行以后报错,判断这个文件无法迁移,于是开始迁移用户安装的包
pip install -r D:\Data\pypi\user_base_pip.txt --target D:\Data\pypi\pkgs
运行后从官网下载的部分+cpu的包无法识别,手动修改再次迁移成功,但是仍然有问题。pip迁移备份库到新目录的过程中,新安装的库比备份里的内容多很多,而且还显示numpy等库有冲突,可numpy是anaconda的原生库,不是用户通过pip安装到用户目录下的,说明依赖已经乱了。
也就是传说中的依赖冲突,pip's dependency resolver does not currently take into account all the packages that are installed.可见pip不会自动回退兼容版本,只会无脑装最新版,导致冲突
7)放弃迁移pip环境,返回原路径
因为pip迁移过程出现了问题,关于pip清理的的事项没有办法执行,只能将之前的修改复原,折腾半天好像回到了原点
pip config unset global.target # 清除自定义安装目录
pip config unset global.cache-dir # 清除自定义缓存目录系统会重写了%APPDATA%\pip\pip.ini手动删除新建的pip相关目录,卸载pip用户目录下的所有包,再用1)的命令检查确认。此时我的Anacona又能用了,看了看整体的大小,有十几个G的空间占用,我感到了一阵阵的迷茫四、卸载Anaconda
下定决心卸载有个过程,我深知任何事情都不是表面看到的那样,每件事就像一扇门,进了门可不一定什么样子,也许就是个迷宫,可能会带来更多的麻烦。再说,毕竟Anaconda已经陪我这么久,也用习惯了,谁又愿意反复折腾呢。但是,我安装的时候它是免费发行版,但是现在它有变化,加上我的需求也有变化,经过反复比对,准备换工具
1. 既然定了,就开工吧,第一步控制面板卸载

运行中出现问题了Failed to run pre_uninstall,rmpath,rmreg


程序最后还是运行完了,也可以点finish,但很明显卸载失败了

2.找到安装目录,用管理员身份运行,又走一遍还是一样;再用终端走一遍效果和之前一样
3.趁着conda还能用,conda install conda-chean,可以下载并且能安装,但是无法运行
4. 下载并安装专业卸载工具geek,进入界面找到Anaconda,右键强制删除,扫描到有残留就卡死,反复几次也没效果
5. 开始手工清理
Pip uninstall用户目录下的所有包;pip cache purge清理pip缓存;删除虚拟环境、缓存等conda配置;清理安装时候写入path的环境变量
6. 将安装目录剪切到C盘user文件夹下再运行卸载程序,程序没报错走完后,安装目录就没了,接下来还有很多需要手动删除的配置:
① %USERPROFILE%目录下的
.anaconda,.conda,.condarc,Untitled, .spyder-py3,.continuum,.ipython,.jupyter,.matplotlib,.cache/torch,.ipynb_checkpoints,.streamlit,Jedi
② %APPDATA%目录下
.anaconda,jupyter,Python,pip
③ %LOCALAPPDATA%目录下
conda,pip,spyder
④%PUBLIC%\Documents目录下
Python Scripts
⑤清理注册表
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Anaconda3
\HKEY_LOCAL_MACHINE\SOFTWARE\Python
HKEY_CURRENT_USER\Software\中,关于python、anaconda、continuum等项目。
搜索注册表anaconda项目并分别删除
7. 经过上述6步,三十多小步的操作,还需要重启电脑,这样就算完工了
五、安装Mini forge
2020年Anaconda 修改授权条款后,高校和企业逐步从defaults迁移到conda-forge,Miniforge正是它的官方轻量载体
安装包已经根据前文第二条显示的网址下载,直接启动


选择当前用户,安装在指定路径如D:\conda


根据官方推荐,默认选择只有第一项,点击安装后等了很久


安装成功了

点击finish,没有弹窗很安静
六、安装完成后的初始设置
1. 关于初始化和环境变量
安装程序默认状态下,conda的命令仅在“Miniforge Prompt”中可用,要在终端中使用这些命令,之前很多人通过环境变量实现
但从Conda 4.6+起,根据 Conda 官方最新架构规范及国内网络环境,不再推荐手动添加path,建议放弃环境变量方案,通过conda init自动注入钩子实现控制命令
需要在 Miniforge Prompt 中输入:conda init powershell,执行完毕以后在终端输入conda --version即可显示版本识别环境。(取消时conda init --reverse powershell),2018年9月份的官方文档:
现在conda内置mamba,性能有很大提升,2023年11月份的官方文档:推荐统一使用 .condarc 配置文件管理,2024年10月份的官方文档:
Channels是conda的包仓库(类似的Pypi是pip的包仓库),包括路径索引、包和相关配置信息①分散构建维护:Anaconda官方维护defaults(包括主要的main、R语言相关的R、Linux相关的msys2),开源社区维护conda-forge,各大厂商、行业和高校也有自己维护的channel②集中托管:绝大多数的主流channel终都会托管在Anaconda Cloud③树状分发:Anaconda Cloud --高校/企业镜像站--本地缓存④队列解析:conda客户端按 .condarc从上到下搜索3. miniforge的.condarc相关配置
①默认~/.condarc内容
channels: # 频道顺序决定搜索优先级
- conda-forge
mirrored_channels:
conda-forge:
- https://conda.anaconda.org/conda-forge
- https://prefix.dev/conda-forge
刚安装好的里面就这些内容,非常简单;还有很多内容都可以在这个里面编辑,用户目录下的文件有最高优先级
②默认配置项目
.condarc 是 Conda 的 YAML 格式配置文件,通常位于安装目录或者用户目录下,Conda 安装后已内置一套合理的默认值,绝大多数情况下不需要更改,常用的设置包括:
channel_priority # flexible(默认)跨通道,strict严格顺序
auto_activate_base # true(默认)自动激活base环境,反之false
show_channel_urls # false(默认)安装包时不显示 URL,反之true
envs_dirs:
- ~/conda_envs # 集中管理环境,便于备份/清理
pkgs_dirs:
- ~/conda_pkgs # 包缓存目录,建议与envs同磁盘
yaml格式缩进用空格(禁用Tab),冒号后加空格,稳妥起见推荐用conda config --add或conda config --set进行更改
生效验证:conda config --show-sources查看加载顺序
③更改.condarc相关配置
直接将默认频道改成清华源
channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
然后在power shell运行
conda config --set auto_activate false
conda config --show auto_activate
结果为auto_activate: False则终端不再自动激活base环境
我仅仅改了上面两个项目,只配置了一个源且环境也在自定义的安装目录,所以其余项目不再改动,接受默认配置
4、虚拟环境设置
①创建虚拟环境
conda create -n nenv python=3.11
创建名为nenv的虚拟环境,指定python版本后,开始运行noarch和win-64两个状态,安装19个包;结束后conda env list可以看到新的环境;安装完成后,安装目录从650M增加到1.2G,运行conda clean后回到850M
②安装科学计算包
numpy: 所有科学库的C/NumPy API基础;pandas:结构化数据,包括 DataFrame/时间序列/IO;scipy:高级数学,包括优化/积分/信号处理/统计;matplotlib:底层绘图引擎,依赖numpy;seaborn:统计可视化,依赖matplotlib+pandas
conda activate nenv# 先激活虚拟环境
conda install numpy pandas scipy matplotlib seaborn -y
显示从清华源下载了320M的包,实际安装结束后,安装目录从850M增加到4.7G,运行conda clean后回到3.6G;经过我的测试,如果仅仅安装numpy和pandas,那么空间大概在1.9G
若要卸载可以运行conda env remove -n nenv,可清理环境和里面的所有包
至此,Python的环境配置工具安装工作全部完成!
注1:本文未明确提及的命令,都在power shell中运行
注2:读者有任何问题欢迎评论区交流