一年半以前写了关于 Python 包管理及虚拟环境系列
其中历数了 virtualenv
, python3 -m venv
, pipenv
, 并提到了 pyenv 和 conda。但对 pyenv 和 conda 未作介绍,其中 conda 似乎不该错过。 Anaconda 着力于为数据分析提供支撑,并与 Jupyter Notebook 有更完美的结合,而且 PyCharm 中对它也有很好支持。因此本文来了解一下 conda 以及 Anaconda。
首先 Anaconda 是什么,它是一个用于科学计算的,跨平台的包管理与 Python 环境的工具,它方便的解决了多版本 Python 并存,切换及第三方包安装的问题。所以 Anaconda 不只是像 venv
, pipenv
那样的创建管理 Python 虚拟环境,还承担了系统软件的安装管理,像 Mac 下的 brew
那样的功能。一般来说我们没有必要安装 Anaconda, 只需要安装 Miniconda 获得 conda
这个命令行工具即可。
Anaconda 的安装(可跳过,安装 conda 即可)
在这个页面 https://www.anaconda.com/products/individual 目前提供了包含了 Python 3.8 的两种安装方式
- 图形界面安装:https://repo.anaconda.com/archive/Anaconda3-2020.07-MacOSX-x86_64.pkg
- 命令行方式安装:https://repo.anaconda.com/archive/Anaconda3-2020.07-MacOSX-x86_64.sh
命令行安装方式需先下载 Anaconda3-2020.07-MacOSX-x86_64.sh, 然后执行
$ bash ~/Downloads/Anaconda3-2020.07-MacOSX-x86_64.sh
试过直接用 curl https://repo.anaconda.com/archive/Anaconda3-2020.07-MacOSX-x86_64.sh | bash, 会死在 >>> Please answer 'yes' or 'no':'
这个循环上。
或在 Mac 下直接用 brew
进行安装
$ brew cask install anaconda
Anaconda 安装后有一个 ANACONDA NAVIGATOR 的界面
在这个界面可以运行,安装软件,管理虚拟 Python 环境。安装 Anaconda 其实没什么必要,有实际意义也就是那个 conda
命令,于是我们接下来了解 Miniconda 的安装。
Linux 下的安装脚本下载路径:https://repo.anaconda.com/archive/Anaconda3-2020.07-Linux-x86_64.sh
Miniconda 的安装
在这里 https://docs.conda.io/en/latest/miniconda.html 有 Windows, MacOS X, 和 Linux 下的安装包,Mac 平台下目前提供了 Python 为 3.8 和 2.7 的图形界面和命令行的安装方式,和安装 Anaconda 类似的,以 Python 3.8 的安装包为例
- 图形界面安装:https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.pkg
- 命令行方式安装:https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh,也是需先下载,然后
$ bash ~/Downloads/Miniconda3-latest-MacOSX-x86_64.sh
想要快捷的
curl https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh | bash
也是无法过掉>>> Please answer 'yes' or 'no':'
这一关
安装过程中会提示选择安装路径,默认在 ~/miniconda3
, 并且提示初始化为当前所使用的 shell 环境,比如用的是 zsh
的话就会更新 ~/.zshrc
配置
同样的在 Mac OS X 下可用 brew
来安装
$ brew cask install miniconda
$ conda init zsh # 假如所用的 shell 是 zsh, 会修改 ~/.zshrc 文件
$ source ~/.zshrc
$ (base) $ # 初始化后看到提示符中有了一个当前环境 (base)
用 brew
的安装路径在 /usr/local/Caskroom/miniconda/base
如果不初始化 conda, 则 conda create py37 python=3.7
创建虚拟环境后在试图用 conda activate py37
激活时也会要求用 conda init <SHELL_NAME>
实始化。
有意思的是用 pip install conda
也能安装下来,但待到运行 conda
命令的时候提示要安装 miniconda
Linux 下的安装脚本下载路径:https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
conda 的使用
比如说在 Mac OS X 下我选择了用 brew cask install miniconda
来安装,以后方便用 brew update
和 brew upgrade
进行升级。在安装并用 conda init
初始化后,我们会发现执行的 python 默认是 miniconda
内置的 Python 3.8
(base) ➜ test git:(:|) which python
/usr/local/Caskroom/miniconda/base/bin/python
(base) ➜ test git:(:|) python
Python 3.8.3 (default, May 19 2020, 13:54:14)
[Clang 10.0.0 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
那么该如何使用其他版本的 Python 呢?莫急,现在我们要开始体验到 conda
与以前所使用的 venv
, pipenv
的不同之处了。从前要创建某个 Python 版本的虚拟环境需要在操作系统上事先安装好相应版本的 Python,比如下面要为不同版本的 Python 创建虚拟环境
$ python3.7 -m venv py37_venv
$ python3.8 -m vevn py38_venv
$
$ pipenv // 为当前 python 版本创建虚拟环境
$ pipenv --python 3.7 // 为 python 3.7 合建虚拟环境,系统中必须安装有 python 3.7
$ pipenv --python 3.6 // 如果系统中未安装 python 3.6, 就会看到 Python 3.6 was not found on your system…
有了 conda 就不一样,再也不用想方涉法先在系统中互不影响的安装好各个版本的 Python, Python 3.4, Python 3.5, Python 3.6, Python 3.7, Python 3.8, Python 3.9 还有 Python 2 等各个版本,你不疯掉,系统都快疯掉了。
conda 创建的虚拟环境是比 venv
和 pipenv
等更高一层次的虚拟化,它自带指定的 Python 版本,系统中只需要 Minoconda 内置的一个 Python 版本即可。
下面来看 conda 命令管理虚拟环境的用法
(base) $ conda create -n python36 python=3.6 # 创建基于 3.6 的虚拟环境, 或加上修订版本号 python=3.6.3
environment location: /usr/local/Caskroom/miniconda/base/envs/python36
added / updated specs:
- python=3.6
(base)$ conda activate python36 # 激法虚拟环境
(python36) $ python -V
Python 3.6.10 :: Anaconda, Inc.
(python36) $ conda install flask # 用 conda 安装依赖,会安装在 /usr/local/Caskroom/miniconda/base/envs/python36/lib/python3.6/site-packages 中
(python36) $ pip install requests # 也会安装在 /usr/local/Caskroom/miniconda/base/envs/python36/lib/python3.6/site-packages 中
(python36) $ conda deactivate # 退出当前虚拟环境
(base) $ conda info -e # 列出虚拟环境信息,可用路径来激环境,如 conda activate /Users/yanbin/opt/miniconda3
/Users/yanbin/opt/miniconda3
base * /usr/local/Caskroom/miniconda/base
python36 /usr/local/Caskroom/miniconda/base/envs/python36
(base) $ conda env remove -n python36 # 删除虚拟环境,或用 conda remove -n python36 --all
(base) $ conda create -n python36-1 --clone python36 # 克隆虚拟环境
(base) $ conda install -n python36 requests # 为虚拟环境安装组件,无需激活
(base) $ conda remove -n python36 request
其他的 conda 命令
(python36)$ conda list # 查看已安装的包
(python36)$ conda update matplotlib # 更新包
(python36)$ conda remove matplotlib # 删除包
(python36)$ conda update conda # 更新 conda 自身
(python36)$ conda update python # 更新当前 python 的修订版本,如 python 3.6.2 到 python 3.6.3
(base) $ conda list -e > requirements.txt # 导出已安装组件到文件中,像 pip freeze > requirements.txt
(base) $ conda install -n python36 --file requirements.txt # 像 pip install -r requrements.txt 一样
(base) $ conda create -n py36 --file requirements.txt # 还能创建虚拟环境时直接安装依赖
查看 conda 支持哪些 Python 版本的虚拟机,用命令
(base) $ conda search python
显示出当前支持的所有 Python 版本有 2.7.13, 2.7.14, 2.7.14, 2.7.15, 2.7.16, 2.7.17, 2.7.18, 3.5.4, 3.5.5, 3.5.6, 3.6.2, 3.6.3, 3.6.4, 3.6.5, 3.6.5, 3.6.6, 3.6.7, 3.6.8, 3.6.9, 3.6.10, 3.7.0, 3.7.1, 3.7.1, 3.7.2, 3.7.3, 3.7.4, 3.7.5, 3.7.6, 3.7.7, 3.8.0, 3.8.1, 3.8.2, 3.8.3。
conda 和 pip 使用了不同的仓库,conda 里的组件管理应该更严格些,所以 conda 仓库中没有的 Python 组件,请尝试用 pip
来安装。
PyCharm 对 Conda 虚拟环境的支持
PyCharm(或 IntelliJ IDEA) 中除了支持 Virtualenv Environment
和 Pipenv Environment
外,也支持 Conda Environment
, 请看下图
可以此时选择不同的 Python 版本创建一个新 Conda 虚拟环境,也可以从已有的 conda 虚拟环境中选取一个; 而无论是创建 Virtualevn Environment
还是 Pipenv Environment
都必须选择一个系统中安装好的 Python 解释器版本。
总结一下
- 在 Mac OS X 下最简单的安装 conda 的方式为
brew install miniconda
, 然后再conda init zsh
初始化 - Virtualenv 和 Pipenv 创建虚拟环境需要在系统中安装有相应版本的 Python
- 而 Conda 把 Python 版本自身纳入到虚拟环境的一部分,方便系统中多 Python 版本共存。系统中只要安装一个 conda(自带 Python), 想要别的 Python 版本只需用它来创建相应的 Python 虚拟环境。Linux 下都用不着编译源代码的方式来安装 Python 了,只需以命令行的方式运行 .sh 安装好 miniconda 后,得来 Python 想要的版本就不怎么费功夫了。
- conda 和 pip 使用了不同的仓库,conda 没有的组件可用 pip 来安装,反之亦然
- conda 安装 Python 组件前会列出所有的其他依赖
- conda 适用于多语言,除 Python 外还支持 R, Ruby, Lua, Scala, Java, JavaScript, C/C++, FORTRAN,比如
conda install -c anaconda-cluster scala
相关链接: