1. Conda到底解决什么问题
干这行越久越发现,Python开发里最让人头大的不是语法,不是框架,而是环境。今天装个TensorFlow,明天装个PyTorch,两个库的依赖互相打架,pip一升级直接干掉系统库,项目换了台电脑就再也跑不起来——这些破事我相信你多少都碰过。
Conda就是专门来收拾这个烂摊子的。它是一个开源的包管理和环境管理工具,最初来自Python数据科学社区,后来发展成支持多种语言(R、Ruby、Lua、Java等)的通用工具。简单说,Conda能做两件事:一是管理包(安装、卸载、升级),二是管理环境(隔离不同项目所需的依赖)。
一句话理解环境隔离:每个Conda环境就像一间独立的房间,你在A房间把墙刷成蓝色,B房间完全不受影响。项目A用Python 3.8 + NumPy 1.x,项目B用Python 3.11 + NumPy 2.x,两者井水不犯河水,各自跑各自的。
这篇指南面向的场景很具体:刚接触Conda的新手、被环境问题折腾过但还没理清思路的老手、需要在Windows和Ubuntu之间横跳的开发者、想把VSCode和Conda配合好的人。我按照从安装到日常使用的顺序,把Conda这套东西从头到尾梳理一遍,包括那些文档里不会写但你一定会踩的坑。
1.1 Conda与pip的根本区别
很多人问过同一个问题:既然pip也能装包,为什么还要用Conda?它们最大的区别在于依赖解析的深度和层次。
pip是一个Python专用的包管理器,它装的是PyPI上的纯Python包或带二进制轮子的包。它只关心Python包之间的依赖关系,而且这个依赖解析是“线性”的——装A发现依赖B,装B发现依赖C,一路装下去。如果B和C之间版本冲突,pip经常不管不顾直接硬装,装完运行崩溃才告诉你真相。
Conda则是一个跨语言的、基于二进制包的通用包管理器。Conda包不仅包含Python代码,还包含所有非Python的底层依赖,比如C/C++库、动态链接库、OpenBLAS、CUDA的适配层等。它通过SAT求解器来解析依赖关系,在安装前会全局检查所有包的依赖是否兼容,找到一组满足所有约束的版本组合,然后才执行安装。这就是为什么conda install经常要“solving environment”很久——那个求解器正在做全局的版本匹配计算。
所以,Conda更适合用在涉及大量C扩展、底层库的项目中,比如NumPy、SciPy、OpenCV、深度学习框架这类。这些包如果走pip装,经常因为缺系统级的共享库而报错。Conda把这些都打包好了,装上就能跑。
1.2 Miniconda还是Anaconda,这是个选择
Anaconda是Conda的发行版,自带几百个预装包,体积将近3GB。Miniconda是个最小化版本,只包含Conda本身和Python,体积约200MB,其余包需要你自己装。
我的建议始终是:用Miniconda。Anaconda预装的那些包你大概率只用得到其中20%,其余的纯属浪费磁盘空间。而且Anaconda预装的包相互之间版本绑定,有时候反而限制了环境的灵活性。Miniconda配合环境管理,想用什么装什么,干净利落。
下载地址方面,官方在repo.anaconda.com分发安装包,Windows有exe,Ubuntu有sh脚本。Mac也有对应的pkg安装器。不要到处找第三方搬运的压缩包,在官网或开源镜像站拿到安装包最稳妥。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装与第一条命令:从零到能跑起来
2.1 Windows下的安装细节
Windows安装很简单,双击exe,一路Next即可。但有三个选项需要注意。
第一个是“Install for Just Me还是All Users”,选Just Me就好,避免需要管理员权限的问题。第二个是安装路径,默认在用户目录下的anaconda3或miniconda3,不要改成带中文或空格的路径,否则后续很多工具会莫名报错。第三个是高级选项页面,会问你“Add Anaconda3 to my PATH environment variable”和“Register Anaconda3 as my default Python”,这两项默认都不勾选。
很多人装完以后打开终端输入conda,提示“conda 不是内部或外部命令”,原因就在这里。Conda默认不把自己加进系统PATH,而是通过Anaconda Prompt这个专用终端来工作。如果你想在普通cmd或PowerShell里直接用conda,需要在开始菜单里找到“Anaconda Prompt”或“Miniconda Prompt”,首次运行时执行:
bash复制conda init powershell
或者:
bash复制conda init cmd.exe
这条命令会在对应的终端配置文件里写入初始化脚本,之后新开的终端窗口就能直接识别conda命令了。
有两点容易遗漏:conda init只是写入配置,不会对已经打开的终端生效,必须新开一个窗口。另外如果PATH里手动加过Conda路径,可能会导致和conda init写入的配置冲突,最好是让conda自己管理它的初始化,不要自己乱改PATH。
2.2 Ubuntu下安装的完整流程
Ubuntu上用命令行安装,网上流传的教程很多,但不少已经过时。当前推荐的流程是,先确认系统架构:
bash复制uname -m
x86_64架构就下载对应的Miniconda3 Linux x86_64安装脚本。用wget下载后执行:
bash复制wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
安装过程中会问安装路径,默认在$HOME/miniconda3。会问是否执行conda init,建议选yes。这样安装脚本会自动在~/.bashrc中写入初始化配置。安装完成后关掉终端重开,或者手动:
bash复制source ~/.bashrc
此时运行conda --version应该能输出版本号。
还有一个小细节,安装脚本末尾如果选了“Do you wish the installer to initialize Miniconda3?”,选yes。如果当初选no,事后补救就执行:
bash复制~/miniconda3/bin/conda init bash
2.3 “conda init”报错的完整说明
使用中经常遇到这样的报错:
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'. To initialize your current shell, run: conda init
这个问题几乎人人都会碰到,尤其在同一台机器上装了不同来源的Python之后。本质就是conda没有向当前shell的配置文件中写入启动脚本,导致shell不知道去哪找conda函数。
不管你用的是bash、zsh还是PowerShell,统一解法就是运行conda init,然后重启终端。这里有两条实践心得:
第一,conda init之后提示修改了配置文件,最好敲一下cat ~/.bashrc确认写入的是哪几行,心里有数。常见内容是一大段# >>> conda initialize >>>和# <<< conda initialize <<<之间的代码。如果文件里有多段这种标记,说明重复初始化了,需要手动清理成一段,否则终端每次启动都会执行两遍初始化脚本,速度变慢而且可能行为异常。
第二,某些发行版的Linux默认shell不是bash,而是zsh或fish。那就需要执行对应的conda init zsh或conda init fish。判断当前shell可以用echo $SHELL。
3. 换源:让安装速度回到正常水平
3.1 为什么要配置国内镜像源
Conda默认的下载源是repo.anaconda.com,服务器在境外,国内访问速度慢,经常只有几十KB每秒,装个大点的包能等半天。镜像源就是把官方源的内容同步到国内服务器,通过就近访问大幅提升下载速度。
很多Conda使用者的第一课不是创建环境,而是换源。换源本身没有风险,随时可以换回来,不涉及任何特殊操作,就是改一下配置文件里的URL地址,相当于把默认下载地址从海外服务器改成国内服务器。
3.2 配置镜像源的两种方式
方式一是通过命令行直接配置。在终端里执行:
bash复制conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes
或者使用上海交大、中科大等镜像站,地址大同小异。执行完后看下配置:
bash复制conda config --show channels
方式二是直接编辑配置文件。Conda的配置文件位于用户目录下的.condarc,Linux和macOS是~/.condarc,Windows是C:\Users\用户名\.condarc。没有该文件就新建一个。内容这样写:
yaml复制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/free/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
这里有个关键点:镜像源分为两种。pkgs/main和pkgs/free是Anaconda官方源主仓库,对应的是默认的defaults源。conda-forge和pytorch是两个独立的社区源,它们不直接放在主站下,而是通过custom_channels这个映射来设置。
如果只设置了前面三行channels而不设置custom_channels,那么像conda-forge这样单独指定的频道仍然会走境外地址。所以上面那段.condarc是相对完整的配置,建议直接参考那个格式。
配好源之后,建议清理一次缓存的索引信息,避免拿到旧的包列表:
bash复制conda clean -i
首次在换源后安装包时,conda会重新下载频道索引,速度可能稍慢,之后就快多了。
热词里有一个“conda不用镜像源”,有人问不用镜像源是不是更好。默认官方源胜在同步最及时、包最完整,国内直连速度则不稳定。镜像站通常比官方源慢半小时到几小时同步新包。如果你要装刚发布的最新版包,或者使用特殊频道的最新包,偶尔需要临时切回官方源。但日常开发,镜像源是绝大多数人的选择,配好之后能让效率提升好几倍。
3.3 换回官方源的方法
如果你觉得镜像源跟不上或者出了其他问题,可以随时删掉自定义渠道,恢复默认:
bash复制conda config --remove-key channels
conda config --remove-key default_channels
conda config --remove-key custom_channels
或者干脆把.condarc文件另存备份后删掉,Conda会用默认配置重新运行。这也是排查“为什么我的conda行为跟别人不一样”时的一个常用手段——先恢复默认配置,看问题是否依然存在。
4. 虚拟环境管理:日常开发的核心操作
4.1 创建环境:conda create的完整姿势
创建虚拟环境是最常用的操作。基本命令:
bash复制conda create -n myenv python=3.11
-n是--name的缩写,myenv是环境名,python=3.11指定了环境里的Python版本。命令执行后,Conda会解析依赖,然后询问是否确认安装,输入y回车即可。
一种常见需求是创建环境的同时把常用包也装了:
bash复制conda create -n myenv python=3.11 numpy pandas jupyter
这样一条命令搞定,省得后面再一个个装。如果想指定包的版本,可以写成numpy=1.26.0这种格式。
还有一个实用的参数是-y或--yes,表示跳过确认提示直接安装。写脚本时很常用:
bash复制conda create -n myenv python=3.10 -y
关于“conda创建环境失败”,最常见的原因有两个。一是网络问题,下载包时断流或超时,解决方法就是先换源,然后重试;二是Python版本不兼容,比如你指定的Python版本太新还不在Conda的索引里,换个版本号即可。
创建好环境后,其路径在Conda安装目录下的envs文件夹里,比如/home/user/miniconda3/envs/myenv。这个路径在后续配置IDE或使用绝对路径激活环境时有用。
4.2 激活与退出:conda activate报错的根源
激活环境:
bash复制conda activate myenv
激活后,终端提示符前面会出现(myenv)字样,此时Python解释器、pip都是环境内的版本。验证一下:
bash复制python --version
which python
注意which python显示的路径应该包含/envs/myenv/,说明确实用的是环境内的Python。
退出环境:
bash复制conda deactivate
看到(myenv)消失就说明退出成功。
那“conda error: run 'conda init' before 'conda activate'”是怎么回事?我在2.3节已经解释过,这是shell没有正确初始化导致的。Conda在旧版本时用的命令是source activate,新版本统一改成了conda activate,但这要求conda init已经执行过。所以遇到这个报错,不是环境的问题,是shell配置的问题,去跑conda init就好了。
还有一个Windows PowerShell下常见问题:“无法将conda项识别为cmdlet、函数、脚本文件或可运行程序的名称”。这个错误通常有两种可能:一是conda根本没加到PATH里(执行conda init解决),二是PowerShell执行策略限制了脚本运行,需要以管理员身份运行PowerShell,然后执行:
powershell复制Set-ExecutionPolicy RemoteSigned
4.3 删除环境:别再手动删文件夹
删除环境用:
bash复制conda remove -n myenv --all
加上--all表示把整个环境连同里面的包一起删除。不加--all而单独指定包名则只删除那个包。删除后建议顺手清理一下首页缓存:
bash复制conda clean -a
我见过有人直接到envs目录去删文件夹,这样做Minit不推荐。因为Conda内部有环境索引之类的状态记录,手动删文件夹会导致索引不一致,后续再创建同名环境或枚举环境时可能出错。用conda remove才是正路。
有时候环境创建了一半你发现Python版本选错了,或者名字起错了,不要想着“改造”,直接删掉重建。环境本身就是为了方便重建才存在的,别心疼这几个包。
4.4 环境导出与克隆:迁移环境的正确姿势
把当前环境的包列表导出:
bash复制conda env export > environment.yaml
这个YAML文件会记录环境名、所有包的名字和版本。换机器后重建:
bash复制conda env create -f environment.yaml
一种更轻量的导出方式是只导出显式指定的包:
bash复制conda env export --from-history > environment.yaml
这样只记录你手动安装时指定的包和版本,不包含所有依赖的完整快照。这种方式在不同操作系统之间迁移更友好,因为一些底层依赖在不同平台的名字有差异,完整导出的YAML在Windows上生成、在Linux上重建会失败。
克隆一个环境:
bash复制conda create -n myclone --clone myenv
这个操作会复制环境里所有包,环境之间互不影响。在动手改一个重要环境之前,先克隆一个副本再操作,是个好习惯。
4.5 从tar.gz离线创建环境
热词里有个“conda环境tar.gz创建环境”。这个场景是针对离线环境或内网环境的。Conda官方支持从打包好的tar.gz文件创建环境。
一种做法是用conda-pack工具。先在能联网的机器上:
bash复制conda install conda-pack
conda pack -n myenv -o myenv.tar.gz
得到一个myenv.tar.gz,拷贝到目标机器,解压到envs目录下:
bash复制mkdir -p ~/miniconda3/envs/myenv
tar -xzf myenv.tar.gz -C ~/miniconda3/envs/myenv
之后激活:
bash复制conda activate myenv
但这个方式有个坑:conda-pack打包的环境在离线机器上激活后,包路径是绝对路径指向打包机的原始路径,需要执行一下环境内的激活脚本调整路径。解压后在目标机器上第一次激活前,进入环境目录执行:
bash复制source ~/miniconda3/envs/myenv/bin/activate
然后再conda activate myenv就不会报路径问题了。
5. 包管理:安装、卸载与版本锁定
5.1 conda install与pip install怎么选
安装包的核心命令:
bash复制conda install numpy
conda install numpy=1.26.0
conda install "numpy>=1.20,<1.27"
这是指定版本的几种写法。注意第二种写法中版本号用单等号,还可以写成numpy==1.26.0,两者等效。
那到底什么时候用conda install,什么时候用pip install?我的经验是分几种情况:
第一,大而重的包、包含C扩展的包,优先conda install。比如numpy、pandas、scipy、opencv、pytorch、tensorflow,这些包在conda源里有预编译好的二进制,装完立刻能用。
第二,纯粹的Python包,或者Conda源里没有的包,用pip install。比如很多前段开发工具、简单的Web框架,pip装更快更灵活。
第三,同一个环境尽量保持一个安装方式为主。不要一会儿conda install一会儿pip install频繁交替装同一个包的依赖。因为pip和conda的依赖解析是各自独立的,混用会导致两套依赖信息不一致。一个经典事故是conda装了numpy,然后pip install了一个依赖numpy的包,pip自动升级了numpy到更高版本,Conda并不知道,下一次conda install又把这个numpy覆盖回去,反复横跳。
一个比较实用的策略是:用conda创建环境和安装大型科学计算包,用pip补一些conda没有的小包。两者别在同一个环境里交替使用同一个包就行。
5.2 solving environment卡住的根因与对策
“conda中安装库一直卡在solving environment”——这是多少人的噩梦。Conda的依赖求解器做的是全局版本匹配,涉及几百个包的约束条件,计算复杂度很高。
卡住的原因通常是:默认的solver用的是libarchive解压索引并做SAT求解,当环境里包数量多、频道数量多、多个频道里的同一包版本不一致时,计算量会爆炸。
有几种有效的解法:
第一,指定频道时不要混用太多。只在必要的时候手动加conda-forge,别把五六七八个频道全堆在channels里,每个频道都是一套完整的包索引,求解器要跨频道匹配,计算量翻倍。
第二,安装包时明确指定频道:
bash复制conda install -c conda-forge opencv
这样求解器可以优先在这个频道里找。如果加--strict-channel-priority参数,会严格限制只从指定频道安装:
bash复制conda install -c conda-forge opencv --strict-channel-priority
第三,用Mamba替代Conda的默认求解器。Mamba是Conda的C++重写版本,使用libsolv求解依赖,速度和Conda相比提升了数十倍。装一个Mamba:
bash复制conda install mamba -c conda-forge
然后所有conda install操作都可以换成mamba install,网络和解算速度都明显快不少。日常开发我强烈推荐把mamba作为c install的替代品。
第四,彻底卡住时,Ctrl+C中断,然后先清缓存,再试:
bash复制conda clean -a
有时候是索引缓存损坏导致求解过程反复失败卡住,清干净就好。
5.3 实际案例:安装opencv与xinference
安装OpenCV是典型的“用conda最省心”的场景。在干净的Python 3.11环境里直接:
bash复制conda install opencv
conda会拉取opencv的预编译包以及所有底层依赖,包括libopencv、opencv-python-headless等组件,装完以后在Python里import cv2就能用。如果走pip install opencv-python,在Windows上偶尔会遇到DLL加载失败的问题,在Linux上则可能缺libGL.so.1等动态库。
热词里还有“conda安装xinference”。Xinference是一个大模型推理服务框架,比较新,依赖也复杂,牵扯到XGBoost、llama-cpp-python等包。安装方式通常推荐:
bash复制conda create -n xinference python=3.11
conda activate xinference
pip install xinference
Xinference的包比较新,Conda源里未必有,所以用pip装,但环境用Conda来管理。这种“conda管环境,pip管包”的组合方式是现在比较流行的方案。
实际跑一个大模型推理服务,底层还会依赖很多系统库。如果环境装好了但启动报缺少共享库,先确认系统基础依赖是否齐全。Ubuntu下常见缺的是:
bash复制sudo apt install libgl1 libglib2.0-0 libsm6 libxext6 libxrender-dev
这些系统级依赖Conda和pip都管不了,只能走apt或yum。
5.4 卸载与更新
卸载包:
bash复制conda remove numpy
更新某个包:
bash复制conda update numpy
更新所有包:
bash复制conda update --all
Conda自身升级:
bash复制conda update conda
一个建议:日常开发不要频繁conda update --all。Conda的哲学是环境确定后尽量保持稳定,如果某个包需要升级,单独指定包名升级即可。全局升级容易把本来好端端的环境搞崩,尤其是有大量包依赖的环境。我曾经在一个跑了一周训练任务的环境里执行update --all,把整个环境的numpy和cudatoolkit都升坏了,从此再也不干这种傻事。
6. VSCode里用Conda:解释器选择是唯一关键
6.1 VSCode为什么识别不到conda环境
很多人在VSCode里打开自己的Python项目,然后在右下角或命令面板里看不到Conda环境,只能看到系统和pip的Python。
原因不复杂:VSCode的Python插件在启动时会扫描本机已知的Python解释器路径。Conda环境默认在envs目录下,Python插件如果找不到conda的启动脚本,或者conda环境里没有安装Python(极少数情况),就不会出现在列表里。
排查思路:
第一,确认目标conda环境里真的装了Python:
bash复制conda activate myenv
python --version
如果输出正常,说明环境没问题。
第二,在VSCode里打开命令面板(Ctrl+Shift+P),输入“Python: Select Interpreter”,点击“Enter interpreter path”,手动填入Conda环境的Python路径。比如Windows下是C:\Users\你的用户名\miniconda3\envs\myenv\python.exe,Linux下是/home/你的用户名/miniconda3/envs/myenv/bin/python。
手动指定是最直接的办法,能解决绝大部分识别问题。VSCode自己也会尝试自动检测conda,但它依赖Python插件从conda config获得环境信息和系统PATH的初始化情况,往往不如手动指定可靠。
6.2 用终端的正确姿势
在VSCode内置终端里激活conda环境,有一个常见的麻烦。VSCode的终端默认可能不是登录shell,导致~/.bashrc没被执行,conda init写入的初始化脚本没有生效。
解法之一是打开VSCode设置,搜索“terminal.integrated.shellArgs.linux”或“terminal.integrated.defaultProfile.linux”,将默认终端设置为“bash(登录shell)”或者配置终端的启动参数为-l。这样终端启动时就会加载~/.bashrc,conda就能识别了。
另一个更省事的办法:每次直接用命令手动激活:
bash复制conda activate myenv
如果提示找不到conda命令,先跑一下:
bash复制source ~/miniconda3/etc/profile.d/conda.sh
这在临时终端环境里非常管用,尤其当你用VSCode的Remote-SSH跑远程开发时。那台远程机器上的shell配置和本地可能不一样,手动source一下conda.sh是保证能用的。
还有一个曾经困扰过我很久的问题:在VSCode里按F5运行调试Python脚本时,用的解释器是哪个。这个完全由状态栏右下角或左下角显示的Python解释器决定。切到目标conda环境后,调试也会使用该解释器,但注意调试时终端里不会自动激活conda环境,所以脚本里如果依赖环境变量或激活后的设置,需要额外注意。
6.3 Python与VSCode需要做关联吗
热词里有“python和vs code需要做关联吗”——确实需要。VSCode本身不包含Python运行能力,它是一个编辑器,需要安装Python扩展,并且指定一个可用的解释器,才能提供代码补全、调试、代码检查等功能。
具体操作:安装微软官方Python扩展后,打开命令面板,选择“Python: Select Interpreter”,从列表里选,或手动填路径。这个操作相当于告诉VSCode:我用的是哪个Python。之后所有功能(补全、格式化、测试、调试)都基于这个解释器。
在切换conda环境时,别忘了同步切换解释器。否则你明明激活了myenv,VSCode还在用系统Python,import下面一片红线,其实不是项目代码的问题,是解释器选错了。
7. 常见问题排查速查表
把实际踩坑比较频繁的问题整理成一个表,方便查阅。
| 现象 | 根本原因 | 解决办法 |
|---|---|---|
| conda不是内部或外部命令 / 无法识别 | Conda未加入PATH或未初始化shell | 运行conda init,重启终端 |
| conda activate报“run conda init” | Shell未加载conda初始化脚本 | 执行conda init,重启终端 |
| 终端conda命令可执行但VSCode找不到环境 | VSCode未扫描到conda解释器 | 手动指定解释器路径 |
| 安装包一直卡在solving environment | 依赖求解计算量过大 | 用mamba替代,限制频道,清理缓存 |
| 创建环境失败 | 网络问题或Python版本不存在 | 换源、重试、换Python版本号 |
| pip install时报外部管理环境错误 | PEP 668机制限制pip在系统Python安装 | 使用conda虚拟环境或在环境内用pip |
| 装了opencv后import失败 | 缺少系统级动态库 | Ubuntu安装libgl1等系统包 |
| conda update --all之后项目崩了 | 全局升级改变了依赖组合 | 尽量单独升级指定包,少用全局升级 |
| 导出的environment.yaml在另一平台重建失败 | 完整导出包含跨平台不兼容依赖 | 用conda env export --from-history导出 |
补充一个容易踩坑的:pip install某个包时报“error: externally-managed-environment”。这是新版pip对系统Python的保护机制。解决办法不是让pip强制装,而是创建一个conda虚拟环境,然后在环境里用pip装。Conda环境里的pip不受这个限制,这也是用Conda管理Python的额外好处。
7.1 关于“找不到conda可执行文件”的排障顺序
这个问题排在所有问题之前,值得单独说一下。当你输入conda提示找不到,按这个顺序排查:
第一,判断安装是否成功。Windows下看开始菜单里有没有“Miniconda Prompt”或“Anaconda Prompt”,能打开说明安装成功。Linux下找一下有没有~/miniconda3/bin/conda这个文件。
第二,确认PATH里有没有conda。Windows下运行echo %PATH%,Linux下运行echo $PATH,看是否包含conda的bin目录。
第三,如果PATH没有,执行conda init,让Conda自己配置。手动往PATH里加是下策,因为conda.init还会设置很多环境变量和shell函数。
第四,确认终端配置有没有被覆盖。比如你用了oh-my-zsh或自定义PowerShell配置,可能会覆盖终端启动时的初始化脚本,导致conda.init写进去的内容没被加载。
7.2 conda不用镜像源也要注意的地方
有些人坚持不用镜像源,用官方源。那需要注意下载速度慢的问题。可以设置超时时间,避免长时间卡死:
bash复制conda config --set remote_read_timeout_secs 60
conda config --set remote_connect_timeout_secs 30
另外官方源偶尔会有包同步延迟或网络波动,有些版本的包在官方源里可能暂时对应不齐。所以即使不用镜像源,也可以保留pip的国内镜像作为兜底。pip配置国内源的方式是在~/.config/pip/pip.conf(Linux)或%APPDATA%\pip\pip.ini(Windows)写入:
ini复制[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
7.3 热词“ubuntu 26安装conda”的说明
关于“ubuntu 26安装conda”,我暂时没验证过这个具体版本,但安装流程应该和当前主流流程一致。唯一需要注意的是系统是否已经预装了Python。有些新版本Ubuntu发布时会内置Python 3.12或更高版本,系统预装的Python和Conda环境Python独立存在,互不干扰。Conda安装时会把它的Python设置为默认的base环境,如果你不想在终端输入conda时自动进入base环境,可以设置:
bash复制conda config --set auto_activate_base false
这样每次新开终端不会自动激活base,保持终端干净。需要时手动conda activate base即可。
8. 最后再分享几个小习惯
写到这里,把Conda的使用全流程基本过了一遍。最后分享几个我在实际使用中形成的习惯,不一定适合所有人,但值得参考。
第一,环境名不要随便起。用项目名加状态后缀,比如nlp-prod、nlp-dev,而不是myenv、test1、test2这种。时间一长环境多了以后,根本分不清哪个是哪个。查当前所有环境用conda env list,可以看出环境路径,但环境名仍然是最好的标识。
第二,环境创建后第一时间记录它的Python版本和依赖清单。可以写一个README或者直接在环境目录下放一个requirements.txt。配合conda env export --from-history使用,即便环境崩了,五分钟就能重建。
第三,在项目里检测Python包版本时,不要用pip list或conda list的输出结果当作项目依赖文档。这两个命令的输出都是当前环境的状态,不是项目声明的依赖。项目依赖应该维护在requirements.txt或environment.yaml中,从文档直接创建环境才是最可靠的。
第四,Windows上尽量用PowerShell而不是cmd作为conda的终端。PowerShell对conda的支持更好,VSCode的集成终端默认也是PowerShell,保持一致可以少踩很多坑。
第五,如果你经常处理深度学习相关的项目,强烈建议把Conda环境放在SSD上。Conda环境里通常有大量小文件,机械硬盘上索引和加载速度会明显变慢,尤其在solving environment阶段,磁盘IO开销非常大。
我自己的日常工作流基本是:Miniconda管理Python环境,mamba做包安装,VSCode远程连服务器,解释器手动指定到对应环境的python路径,依赖文件用conda env export --from-history生成。这一套流程用了两年,没出过大问题。希望这份指南也能帮你把Conda用得顺手。
