标签归档:Conda

只用来管理 Python 版本和虚拟环境,Miniconda 也是一个很好的选择

Anaconda 是一个面向数据科学的 Python 发行版,它打包了 Conda、Python 和一堆机器学习和人工智能相关和常用的包,而且还可以用来安装一些非 Python 编写的库。对于科学计算相关的用途非常方便,开箱即用。看起来很适合实验室或是学校机房使用……

对于常规的 Python 开发来说,Anaconda 太重了,而且主要面向科学计算领域,但是精简版的 Miniconda 却是一个很好的 Python 版本和虚拟环境管理工具。

更重要的是 Miniconda 兼容三个主流操作系统,而且不同平台使用同样的命令和接口(Conda 4.6 以上)。这大概算是个人偏好,因为我总在写东西给别人看,所以总是喜欢兼容主流操作系统并且接口统一的解决方案。而且另一方面 pyenv、virtualenvwrapper、direnv 等等相关替代工具都没有原生 Windows 支持。 

Miniconda 是什么

先来理清几个概念:

  • Conda:包、依赖和环境管理器。
  • Anaconda(某种蟒蛇的名字):面向数据科学的 Python 发行版,包含 conda、conda-build、Python 和 100+ 常用的数据科学常用的库及其依赖。
  • Miniconda:精简版的 Anaconda,也是一个 Python 发行版,只包含 conda、Python 和一些基本的包。

相关资源:

Miniconda 基本用法

首先你需要访问下载页面下载对应操作系统的安装包进行安装,Python 版本选择你想作为默认选项(base version)的版本。然后打开 Windows 下的 Anaconda Prompt 或是 Anaconda Powershell Prompt,Linux 或 macOS 直接使用终端程序。

下面是一些关键用法介绍,详细内容可以阅读 Conda 文档

创建虚拟环境

使用 conda create 命令创建虚拟环境,使用 –name 选项(-n)指定虚拟环境名称:

$ conda create --name foo

使用 conda info 命令查看当前环境名称、Python 版本、虚拟环境文件夹位置、Conda 版本等等各种信息:

$ conda info

使用 –envs 选项(-e)查看所有已创建的虚拟环境。在列出的虚拟环境中,使用星号(*)标识的是当前激活的虚拟环境:

$ conda info --envs

激活虚拟环境

使用 conda activate 命令激活虚拟环境,添加虚拟环境名作为参数:

$ conda activate foo

激活以后会在命令行提示器前显示虚拟环境名称,比如:

(foo) $

不添加虚拟环境名称,就会重新激活基础环境(base):

$ conda activate

设置虚拟环境的 Python 版本

在创建虚拟环境的时候,可以使用 python 参数指定 Python 版本。假设你使用的 Miniconda 默认版本是 Python 3.7,如果你想创建一个 Python 2.7 的虚拟环境,使用下面的命令:

$ conda create --name snakes python=2.7

你可以在虚拟环境名加上标识方便识别 Python 版本,比如:

$ conda create --name snakes-py27 python=2.7

搭配 pip / Poetry 来管理依赖

因为 Conda 安装库的时候默认使用 Conda 自己的仓库,这里包含的 720 多个库除了流行的 Python 包外大多是数据科学相关的包。所以,更好的选择是使用官方 PyPI 仓库,这样可以确保你使用到最近更新的包,而且不会出现有些包找不到的情况。

我们要做的就是只用 Conda 的 Python 版本和虚拟环境管理功能,不用它来管理依赖。依赖管理(安装、卸载、更新等)仍然使用 pip 进行,或是进一步搭配 pip-tools 来管理依赖。

你需要在 conda 环境内使用下面的命令安装 pip:

$ conda install pip

或是统一使用下面的命令格式创建虚拟环境:

$ conda create --name bar pip

这样在执行 pip 命令时会使用虚拟环境内的 pip,而不是系统全局的 pip。这样做的副作用是会产生几个多余的依赖。

除此之外,你也可以搭配使用 Poetry。Poetry 默认会自动创建虚拟环境,所以需要关闭 Poetry 自动创建虚拟环境的设定,执行下面的命令即可:

$ poetry config settings.virtualenvs.create false

总结

按照我目前掌握到的信息,Miniconda 的优缺点总结如下:

优点

  • 用法简单,​易于上手
  • 替代 pyenv+virtualenv/venv+virtualenvwrapper 的多个工具组合
  • 类似 virtualenvwrapper,可以在任意位置激活虚拟环境,而不是必须在项目根目录
  • 支持管理不同的 Python 版本
  • 兼容性很好,支持 Windows

缺点

  • 在 Windows 下,需要使用专用的命令行程序
  • 依赖管理比较弱,需要搭配 pip/Poetry 来使用
  • conda 和 pip/Poetry 组合存在潜在的冲突,但情况在改善

既然一个 Miniconda 就能很好的胜任 Python 版本管理和虚拟环境管理的任务,为什么要用 pyenv+virtualenv/venv+virtualenvwrapper 呢?遗憾的就是依赖管理功能不够完善,和 pip/Poetry 搭配使用则可能会有潜在的冲突。所以,推荐觉得 virtualenv/venv+pip 搭配太麻烦的初学者使用;推荐能接受 Conda+pip/Poetry 这种搭配的人使用;推荐使用 Python 做数据科学相关工作的人使用。

对比之下,最稳定的解决方案大概还是 virtualenv/venv+pip+其他工具……
(如果你发现了错误描述、有不同看法和想要补充的信息,欢迎评论。)

(3)