Anaconda用法总结&虚拟环境配置

部署运行你感兴趣的模型镜像

一、Anaconda

(一)Anaconda是什么?

1.引言:

我们大家可能都知道,Window系统为用户提供的“编辑系统环境变量”功能,有系统环境变量,自然就有系统环境。系统及系统中所附加的功能,均需要依赖这个环境中的资源才能正常地运行。同理,在项目开发的过程中,无论我们使用什么样的编程语言,大多也绕不开环境配置。

为什么要配置环境呢?难道不可以使用同一个环境呢?首先,环境资源之间可能是存在冲突的,如果将冲突的第三方包配置到了同一个环境中,项目很可能无法运行;其次,不同的项目所使用的资源是不同的,为特定项目配置特定资源,既方便管理,也可以避免冲突。

2.Anaconda-虚拟环境创建器:

Anaconda实际上就是一个成熟、方便的虚拟环境创建器。其包含了conda、Python等180多个科学包及其依赖项。(Miniconda功能类似,其包含的包和依赖项相对少些)。

借鉴一个博主的话说,Anaconda可以为我们搭建一个或多个空工作室,同时为我们提供了获取工具包的仓库并承担了工具包的运送服务,我们所需要做的就是:我们在哪里工作(虚拟环境名),告诉它我们需要什么样的工具(第三方库下载)。

(二)Anaconda的使用

1. pip & conda:

如果想熟练使用Anaconda,对pip和conda必须有一定了解。

“pip” 是Python包的通用管理器;“conda”是跨平台通用包管理器兼环境管理器。你也可以将这两者理解为“第三方库”的应用商城,当你使用“pip/conda install ……”指令时,它会为你从不同的平台上获取并下载你所需要第三方库。

关于pip 和 conda的区别,其实从它们的定义就可揣测一二。

1.适用范围:conda的适用范围是要广于pip的,毕竟pip只能获取Python相关包,同时conda还能作为环境管理器使用,因此在创建虚拟环境时你所使用的指令是“conda create -n 环境名”。

2.依赖检查:第三方库(工具包)可能需要组合使用,有时候仅在环境中下载Package-A无法正常使用,需要同时下载Package-B,这时我们判断A和B之间具有依赖关系。conda 的依赖检查能力是优于 pip 的,而严格的依赖检查机制使得conda用起来更加舒服,毕竟它可以在安装Package-A时自动安装Package-B。

3.Pip的独特优势:pip 是Python官方所认可的包管理器,通过 pip 所安装的第三方库直接来自于Pypi,所以在下载Python的一些相关库时,pip 可能会有更好的表现。并且 pip 中第三方库的数量也是多于 conda 。

2.常用指令汇总:

① 虚拟环境创建
# Format
conda create -n 环境名 python==3.X
# Example
# 创建名为“my_pytorch”的虚拟环境,并在其中安装3.11版本的Python
conda create -n my_pytorch python==3.11 
② 虚拟环境列表
# Format
conda info --envs

输出结果如下:查看当前已创建的所有虚拟环境

注:请大家关注上图中红框标注内容,虚拟环境是创建在“…\Anaconda\envs\”文件夹下,“…\Anaconda”即安装Anaconda所在的文件夹。这一点请牢记,之后在Pycharm中设置解释器时需要用到。

③ 激活虚拟环境
# Format
conda activate 环境名

输出结果如下:由 base 环境进入到环境名对应环境

④ 查看当前环境中所安装的包
# Format
conda list 

输出结果如下:

⑤ 安装第三方库
# 使用默认源下载
conda install 包名 
# 使用镜像源下载(临时),此例中使用清华镜像源
conda install 包名 -i https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/相应目录/
# 使用默认源下载
pip install 包名 
# 使用镜像源下载(临时),此例中使用清华镜像源
pip install 包名 -i https://pypi.tuna.tsinghua.edu.cn/simple

注:默认源在境外,下载速度会比较慢,且容易出现下载中断的情况,建议使用国内的镜像源。

⑥ 设置默认源

conda 

查看源:

conda config --show channels

添加源:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge 
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/

获取第三方库时显示搜索通道:

conda config --set show_channel_urls yes

注:如果执行上述指令后,安装速度依然很慢,可以尝试删除“C:\Users\用户名\.condarc”文件中的“-defaults”。

⑦ 退出当前已激活的虚拟环境
conda deactivate
⑧ 删除虚拟环境
# Format
conda remove -n 环境名 --all
⑨ 卸载第三方库
# Format
conda uninstall 包名

pip uninstall 包名

注:尽量使用下载该第三方库时使用的管理器进行卸载。

二、虚拟环境配置

前一段时间,在参与项目开发的过程中,为了使用“spleeter”包,在虚拟环境的配置中遇到了许多问题。借此机会,以“spleeter”包的安装为例,分享一些虚拟环境配置的经验。(Spleeter是一个由Deezer Research开源的音频分离工具包,基于深度学习技术,被用于将混合音频中的不同音轨进行分离)

1. 了解第三方库

虽然,大部分时候我们只需要在终端输入“pip install XXX”,秉承着缺啥下啥的原则,但是,在使用和下载第三方库前提前了解它的来源和使用方式,是一个很好的习惯。当然,如果你在学生时期就没有“预习”的习惯,可以忽略我上面说的话。

如果,你在安装第三库时多次失败,在CSDN上查找报错原因也无法解决的话,不妨先去PyPi官网:PyPI · The Python Package Index看看这个第三库的相关信息。

下图为“Spleeter”的搜索结果:

大家可以看到红框标注内容中提及:Spleeter 使用了 TensorFlow 框架,那我们自然能想到一点: Spleeter 与 TensorFlow 之间存在依赖关系。所以,如果想在虚拟环境中导入 Spleeter 并使用它,就必须同时导入 TensorFlow。如果,你不曾了解到这一点,直接输入“pip install spleeter”有一定可能会发生报错。

2. 创建虚拟环境

我们的最终目的是在 Pycharm 运行项目时能正常使用第三方库。所以,我们需要为项目创建单独的虚拟环境,并在该虚拟环境下导入我们所需要的第三方库。

# 创建虚拟环境
conda create -n My_env python==3.7
# 激活虚拟环境
conda activate My_env
# 导入Spleeter
pip install spleeter -i https://pypi.tuna.tsinghua.edu.cn/simple

如果你的运气足够好,在下载的过程中触发了 pip 的依赖检查机制,它会为你自动补全依赖项。最为关键的一个依赖项就是前文所提及的 TensorFlow(即:下图中红框标注部分)。

请大家关注上图中绿框标注的几个包。其中,“tensorflow”的版本是2.3.0,有时候自己配置环境的一大难点就是选择第三方库的版本,如果能触发包管理器的依赖检查机制,它会为你选择适配的版本~非常非常省心。“ffmpeg-python”也是对于 Spleeter 比较重要的依赖项。如果,出现安装失败的情况,可以尝试先导入 ffmpeg-python 。

在上图的示例中,非常顺利地导入了 Spleeter ,和我的第一次尝试简直是天壤之别o(╥﹏╥)o,我将之归功于人品大爆发。但以下几点可能是触发 pip 依赖项检查及补全机制的积极因素

安装较旧版本的 Python。有时候,第三方库的更新速度是落后于Python的版本更新,在虚拟环境中配置较久版本的Python,如3.7版,是一个稳妥的选择。

② 优先在虚拟环境中导入依赖项较多的第三方库。如果待导入的第三方库依赖项较多,建议优先导入,毕竟一个空空如也的环境更有可能触发包管理器的检查和补全。就如上述示例中,pip 为环境中导入了相当数量的包,而这其中的很多其实并不会影响到 Spleeter 的使用。

3. 报错解决方

报错类型千千万,但总有些比较通用的方式来应对。

① 以管理员权限运行 Anaconda Prompt

在网路正常的情况下,如果出现下载中断,一般来说可能是 Anaconda Prompt 权限不足(即便已经触发依赖补全)。所以可以尝试按下图所示运行 Anaconda Prompt。

② 根据具体情况灵活使用conda&pip

根据前文所述,conda 和 pip 实际上各有优势。如果希望触发依赖项自动补全,建议使用 conda 指令(conda 的依赖检查机制更加严格,相对来说补全会更加完善)。但 conda 有一个缺陷:第三方库的数量较少。为解决这一问题,conda 提供了通过不同通道获取库的方法,如下:

# 更换获取通道
conda install -c conda-forge spleeter

注:“-c” 是 “-channel” 的简写,conda-forge 是由社区维护的一个 conda 通道,它提供了许多不在默认通道中的第三方库。

如果你所希望导入的第三方库来自 PyPI,且无法通过 conda 的默认通道获取,还是建议使用 pip 导入(使用Python官方认可的包管理器,导入Python 官方维护的第三方库)。经过试验,以管理员权限运行 Anaconda Prompt,并执行 “pip install spleeter -i Simple Index” 是可以正常导入 Spleeter 的。

③ pip 更新

部分情况下安装失败,可能是因为 pip 版本较低。pip 更新方式如下:

# Format
pip install -U setuptools # 更新pip安装工具
pip install --upgrade pip # 更新pip

网络上还有这样一种写法:“pip install --user --upgrade pip”。如果你是在自己创建的虚拟环境中更新 pip 的话,上述的指令没有意义,因为“--user”是指:将包安装到用户级别的目录(通常是用户主目录下的特定路径),并不会更新虚拟环境中的 pip ,后续依然使用的是未更新的 pip 。

但如果用户级别的 pip 可执行文件路径已经包含在环境变量 PATH 中,在虚拟环境中运行 pip 命令时会优先使用用户级别的  pip。此时,“pip install --user --upgrade pip” 带来的更新是有效的。

如果还是无法正常更新,可以使用下面的代码:

python -m pip install --user --upgrade pip

注意:如果没有十足的把握,建议不要轻易删除环境中的 pip。

④ 注意事项

使用 pip 下载 Python 包时,不要同时开启 系统代理 与 VPN(梯子),两者会发生冲突,导致请求被Python官方拦截。

使用 Anaconda Prompt 时,尽量不要使用 “Ctrl + C” 强行终止正在运行的进程,尤其是在使用“pip”指令时,这可能导致 pip 的损坏。

4. Spleeter 导入的其他问题

① ffmpeg 软件安装:

如果想要正常使用 Spleeter 我们还需要安装 ffmpeg ,下载教程参考:http://t.csdnimg.cn/krLge

注意:在将路径添加进环境变量后,一定记得重启系统。

conda env config vars list

执行上述指令可查看是否成功将可执行文件路径—“…/bin” 添加进 conda 环境变量列表。

② 运行报错:

如果在运行过程中出现了:“AttributeError: module 'ffmpeg' has no attribute '_run' ” 、“AttributeError: module ‘ffmpeg‘ has no attribute ‘input‘ ”这类的报错,大概率是因为你的虚拟环境中存在了重名的包,导致调用错误。一般来说是:“ffmpeg” 和 “ffmpeg-python” 重复了,解决方法如下:

# 删除
pip uninstall ffmpeg
pip uninstall ffmpeg-python
# 重新下载
pip install ffmpeg-python

三、总结

创作本文的目的主要是记录我在使用 Anaconda 时的一些经历和心得,减少后来的小伙伴在解决各种报错时吃的苦,但如果大家想要真正熟练使用 Anaconda,只有经常试错,经常总结。如果,大家觉得本文中提出的观点存在问题,也欢迎大家在评论区指正 (*^▽^*)

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值