之前因此要用到特定版本的 Python,就在电脑上装了 Anaconda,这里写一下关于 Python 环境管理的基本方法,以防忘记。
对于 Python 中的一些概念,可以看这篇文章
先看看对 Anaocnda 的介绍:
Anaconda 指的是一个开源的 Python 发行版本,其包含了 conda、Python 等180多个科学包及其依赖项。因为包含了大量的科学包,Anaconda 的下载文件比较大。如果只需要某些包,或者需要节省带宽或存储空间,也可以使用 Miniconda 这个较小的发行版(仅包含 conda 和 Python)。
那 conda 又是什么:
conda 是一个开源的包、环境管理器,可以用于在同一个机器上安装不同版本的软件包及其依赖,并能够在不同的环境之间切换。
安装 Anaconda 主要是为了使用不同版本的 Python,因此先来看看怎么进行 Python 环境的管理。
我们之前提到过,Anaconda 表明的是一个开源的 Python 发行版本,其中包含了 conda、Python 等180多个科学包及其依赖项。也就是说,在 Anaconda 安装完成后,是存在一个 Python 环境的,这个环境就叫做 base,也就是默认环境。先看看系统中都存在什么环境,在终端输入
conda env list
结果为:
# conda environments:
#
base * /opt/Anaconda3
而 Anaconda 也能够创建区别于 base 环境的不同 Python 环境,在终端输入:
conda create -n python35 python=3.5
之后会让你确认哪些包会被下载,哪些包会被安装,确认之后就是等待安装了,一般情况下都很快。之后再次看看系统中都存在哪些 Python 环境:
conda env list
结果为:
base 上方的 python35 就是我们创建的 python 环境,对应的 python 版本为 3.5,环境名为 python35。
创建完环境之后,我们来看看环境安装在哪里。
首先是 base 环境,上图给出了 base 环境的位置,该目录就是 anaconda 安装后的 base 环境。
而自己安装的环境显示为 home 目录。
环境创建之后就需要使用了,不过默认使用的都是 base 环境,上图中环境前方的 “*” 就表明是当前的环境。如果想要切换到 python35 就需要使用 activate 命令:
source activate python35
从上边可以看到,环境此时成功地从 base 切换到了 python35。“*” 符号也移动到了 python35 的路径前,同时在终端的命令提示符的行首出现了 “python35” 的字样,也表明此时的 python 环境为 python35。
在上一部操作中,我们将环境切换到了 python35,此时我们想使用一些比较特殊的工具,如 numpy。我们首先打开 python 解释器,然后使用命令导入numpy:
import numpy
但是会出现下面的提示:
提示我们没有 numpy 这个模块。之前关于 anaconda 的介绍时,我们提到 anaconda Anaconda 包含了 conda、Python 等180多个科学包及其依赖项。但是这里却并没有发现 numpy 的存在,如果之前创建环境的信息还没有被清除的话,在终端中我们能够看到关于 python35 的一些安装信息:
上边的图片提示我们 anaconda 在创建环境的时候并没有安装那么多的依赖项,相反只是安装了一些必要的工具。这提醒我们如果需要使用其它工具的话,需要自己手动安装。不过在此之前我们先看看 base 环境中都存在什么工具,新开一个终端,打开 python 解释器并查看工具列表,之后导入工具:
从上边的结果我们可以知道:
新建的 python35 环境里边什么都没有,如果要使用什么工具的话,就需要自己手动安装了,如 numpy:
conda install numpy
或者是:
pip install numpy
安装完成进入解释器再次导入:
这次就成功地导入了。卸载也是同样的操作:
conda uninstall numpy
或是:
pip uninstall numpy
这样就将包从当前的环境中删除了。
python35 环境使用结束后,就要退出当前环境,使用命令:
conda deactivate
执行上边的命令之后,就退出了当前的 python 环境。但是在 base 环境中是无法使用此命令的,因此没有环境可以用来退出了。
其实直接关闭终端就能够退出当前的 python 环境,因为默认新建终端的 python 环境是 base。但是如果不想关掉当前终端的话,还是退出的好。
之前为了对比 base 环境和 python35 环境的区别,我们列出了 base 环境中的工具包信息,如果需要列出当前 python 环境中的工具包信息,使用:
conda list
除此之外,conda 还支持环境的导入和导出,这就意味着再也不用配置环境头疼了,只需要将获得的环境文件导入就可以了。对于我们创建的环境 python35,我们可以将之导出,之后删除本地的 python35 环境,再将导出的环境文件导入。命令分别为:
# export command
conda env export > envname.yaml
# conda env export > envname.properiter
# remove environment
conda remove -n envname --all
# import command
conda env create -f envname.yaml
# conda env create -f envname.properiter
上面的结果显示:
之前提到过的删除环境命令为:
conda remove -n envname --all
因为目前由于版权问题,anaconda已经不再支持国内的仓库更新,也就是说国内的镜像,如清华、中科大等都没有最新的 anaconda 库,所以通常情况下就保持默认源就好了,不需要更换。
但是默认源下的下载速度真的是十分感人,所以对工具的版本没有特定需求的话,也可以换源,毕竟速度会快。
conda config --remove-key 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
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/
conda config --set show_channel_urls yes
最后一行代码可以显示工具包的来源,原则上有没有不影响结果。
有时候需要使用最新的工具包,但是换源后没最新的工具,不换源速度又很慢,这时候就需要别的操作了。
不得不说,金钱有时候真的是万能的。
通常情况下,我们都希望开发环境是友好的。通常情况下,编写 python 代码会使用的 IDE 为 pycharm。
在 pycharm 中,如果要使用到 anaconda 创建的环境,只需要将之前提到过的 python 安装位置对应添加到 pycharm 项目中的 project interpreter中即可。