Anaconda使用总结

作者: PeterYuan | 来源:发表于2016-07-19 18:03 被阅读188939次

    Anaconda使用总结

    2016.7.19 PeterYuan


    Python易用,但用好却不易,其中比较头疼的就是包管理和Python不同版本的问题,特别是当你使用Windows的时候。为了解决这些问题,有不少发行版的Python,比如WinPython、Anaconda等,这些发行版将python和许多常用的package打包,方便pythoners直接使用,此外,还有virtualenv、pyenv等工具管理虚拟环境。

    个人尝试了很多类似的发行版,最终选择了Anaconda,因为其强大而方便的包管理与环境管理的功能。该文主要介绍下Anaconda,对Anaconda的理解,并简要总结下相关的操作。

    Anaconda概述

    Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本python并存、切换以及各种第三方包安装问题。Anaconda利用工具/命令conda来进行package和environment的管理,并且已经包含了Python和相关的配套工具。

    这里先解释下conda、anaconda这些概念的差别。conda可以理解为一个工具,也是一个可执行命令,其核心功能是包管理环境管理。包管理与pip的使用类似,环境管理则允许用户方便地安装不同版本的python并可以快速切换。Anaconda则是一个打包的集合,里面预装好了conda、某个版本的python、众多packages、科学计算工具等等,所以也称为Python的一种发行版。其实还有Miniconda,顾名思义,它只包含最基本的内容——python与conda,以及相关的必须依赖项,对于空间要求严格的用户,Miniconda是一种选择。

    进入下文之前,说明一下conda的设计理念——conda将几乎所有的工具、第三方包都当做package对待,甚至包括python和conda自身!因此,conda打破了包管理与环境管理的约束,能非常方便地安装各种版本python、各种package并方便地切换。

    Anaconda的安装

    Anaconda的下载页参见官网下载,Linux、Mac、Windows均支持。

    安装时,会发现有两个不同版本的Anaconda,分别对应Python 2.7和Python 3.5,两个版本其实除了这点区别外其他都一样。后面我们会看到,安装哪个版本并不本质,因为通过环境管理,我们可以很方便地切换运行时的Python版本。(由于我常用的Python是2.7和3.4,因此倾向于直接安装Python 2.7对应的Anaconda)

    下载后直接按照说明安装即可。这里想提醒一点:尽量按照Anaconda默认的行为安装——不使用root权限,仅为个人安装,安装目录设置在个人主目录下(Windows就无所谓了)。这样的好处是,同一台机器上的不同用户完全可以安装、配置自己的Anaconda,不会互相影响。

    对于Mac、Linux系统,Anaconda安装好后,实际上就是在主目录下多了个文件夹(~/anaconda)而已,Windows会写入注册表。安装时,安装程序会把bin目录加入PATH(Linux/Mac写入~/.bashrc,Windows添加到系统变量PATH),这些操作也完全可以自己完成。以Linux/Mac为例,安装完成后设置PATH的操作是

    # 将anaconda的bin目录加入PATH,根据版本不同,也可能是~/anaconda3/bin
    echo 'export PATH="~/anaconda2/bin:$PATH"' >> ~/.bashrc
    # 更新bashrc以立即生效
    source ~/.bashrc
    

    配置好PATH后,可以通过which condaconda --version命令检查是否正确。假如安装的是Python 2.7对应的版本,运行python --versionpython -V可以得到Python 2.7.12 :: Anaconda 4.1.1 (64-bit),也说明该发行版默认的环境是Python 2.7。

    Conda的环境管理

    Conda的环境管理功能允许我们同时安装若干不同版本的Python,并能自由切换。对于上述安装过程,假设我们采用的是Python 2.7对应的安装包,那么Python 2.7就是默认的环境(默认名字是root,注意这个root不是超级管理员的意思)。

    假设我们需要安装Python 3.4,此时,我们需要做的操作如下:

    # 创建一个名为python34的环境,指定Python版本是3.4(不用管是3.4.x,conda会为我们自动寻找3.4.x中的最新版本)
    conda create --name python34 python=3.4
    
    # 安装好后,使用activate激活某个环境
    activate python34 # for Windows
    source activate python34 # for Linux & Mac
    # 激活后,会发现terminal输入的地方多了python34的字样,实际上,此时系统做的事情就是把默认2.7环境从PATH中去除,再把3.4对应的命令加入PATH
    
    # 此时,再次输入
    python --version
    # 可以得到`Python 3.4.5 :: Anaconda 4.1.1 (64-bit)`,即系统已经切换到了3.4的环境
    
    # 如果想返回默认的python 2.7环境,运行
    deactivate python34 # for Windows
    source deactivate python34 # for Linux & Mac
    
    # 删除一个已有的环境
    conda remove --name python34 --all
    

    用户安装的不同python环境都会被放在目录~/anaconda/envs下,可以在命令中运行conda info -e查看已安装的环境,当前被激活的环境会显示有一个星号或者括号。

    说明:有些用户可能经常使用python 3.4环境,因此直接把~/anaconda/envs/python34下面的bin或者Scripts加入PATH,去除anaconda对应的那个bin目录。这个办法,怎么说呢,也是可以的,但总觉得不是那么elegant……

    如果直接按上面说的这么改PATH,你会发现conda命令又找不到了(当然找不到啦,因为conda在~/anaconda/bin里呢),这时候怎么办呢?方法有二:1. 显式地给出conda的绝对地址 2. 在python34环境中也安装conda工具(推荐)。

    Conda的包管理

    Conda的包管理就比较好理解了,这部分功能与pip类似。

    例如,如果需要安装scipy:

    # 安装scipy
    conda install scipy
    # conda会从从远程搜索scipy的相关信息和依赖项目,对于python 3.4,conda会同时安装numpy和mkl(运算加速的库)
    
    # 查看已经安装的packages
    conda list
    # 最新版的conda是从site-packages文件夹中搜索已经安装的包,不依赖于pip,因此可以显示出通过各种方式安装的包
    

    conda的一些常用操作如下:

    # 查看当前环境下已安装的包
    conda list
    
    # 查看某个指定环境的已安装包
    conda list -n python34
    
    # 查找package信息
    conda search numpy
    
    # 安装package
    conda install -n python34 numpy
    # 如果不用-n指定环境名称,则被安装在当前活跃环境
    # 也可以通过-c指定通过某个channel安装
    
    # 更新package
    conda update -n python34 numpy
    
    # 删除package
    conda remove -n python34 numpy
    

    前面已经提到,conda将conda、python等都视为package,因此,完全可以使用conda来管理conda和python的版本,例如

    # 更新conda,保持conda最新
    conda update conda
    
    # 更新anaconda
    conda update anaconda
    
    # 更新python
    conda update python
    # 假设当前环境是python 3.4, conda会将python升级为3.4.x系列的当前最新版本
    

    补充:如果创建新的python环境,比如3.4,运行conda create -n python34 python=3.4之后,conda仅安装python 3.4相关的必须项,如python, pip等,如果希望该环境像默认环境那样,安装anaconda集合包,只需要:

    # 在当前环境下安装anaconda包集合
    conda install anaconda
    
    # 结合创建环境的命令,以上操作可以合并为
    conda create -n python34 python=3.4 anaconda
    # 也可以不用全部安装,根据需求安装自己需要的package即可
    

    设置国内镜像

    如果需要安装很多packages,你会发现conda下载的速度经常很慢,因为Anaconda.org的服务器在国外。所幸的是,清华TUNA镜像源有Anaconda仓库的镜像,我们将其加入conda的配置即可:

    # 添加Anaconda的TUNA镜像
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
    # TUNA的help中镜像地址加有引号,需要去掉
    
    # 设置搜索时显示通道地址
    conda config --set show_channel_urls yes
    

    执行完上述命令后,会生成~/.condarc(Linux/Mac)或C:\Users\USER_NAME\.condarc文件,记录着我们对conda的配置,直接手动创建、编辑该文件是相同的效果。

    Anaconda具有跨平台、包管理、环境管理的特点,因此很适合快速在新的机器上部署Python环境。总结而言,整套安装、配置流程如下:

    • 下载Anaconda、安装
    • 配置PATH(bashrc或环境变量),更改TUNA镜像源
    • 创建所需的不用版本的python环境
    • Just Try!

    cheat-sheet 下载:
    Conda cheat sheet


    参考资料

    相关文章

      网友评论

      • python_yu:您好, 我安装了 anaconda 但是安装的一些三方包总是 PackagesNotFoundError: The following packages are not available from current channels:
        安装了各种源也不好用 谢谢 博主
      • 黑人的嘿:感谢分享
      • 5dcefbbab37c:博主你好,请问我以前就安装了Python3.6了,以及相关的包,那么安装好anacona后,Python以及相关包是还需要再下载安装还是怎么办?非常感谢您能解答😀
        PeterYuan:anaconda的python环境是独立管理的,之前安装的python环境对这个没有影响。如果确定使用anaconda的版本的话,建议在path中把之前安装的去掉或者直接卸载。
      • 奔跑的徐胖子:博主您好,使用安装包安装的anaconda,在哪里使用这些命令来管理包呢?终端中提示没有conda的指令啊
        PeterYuan:主要是conda和pip,如果终端提示无conda,可以检查下path,应该是anaconda的path配置有问题
      • 中州城主:很NICE!
      • b41937fceae5:问博主一个问题,anaconda的windows版本,之前用的好好的,今天突然打不开了,而且也无法更新,点击没有反应,这是怎么一回事呢?万分感谢
      • 简矢:Mac上装完运行,一直在initializing,然后就自动退出了,咋办?
      • RenS_:您好,windows下使用conda下载的包默认是安装在C盘还是anaconda的安装路径下?如果是安装在C盘的话,可以修改吗?
      • huadianhuanglei:感谢博主
      • hilaryliu_363a:必须给老师点个赞 之前vpn下载看不到希望 vpn直接下包也安不上 这清华的源解决了大问题 感恩
      • king的lin:楼主好,请问我win10系统,装了anaconda之后,spyder之类的都正常,但是anaconda navigator打开之后,出现那个initializing的绿圈圈两秒后闪退,这个问题可以解决吗?重装了anaconda,换了版本之后还是不行。多谢楼主!
      • 钢筋铁骨:感谢楼主!有了anaconda之后方便多了!!在用的时候我遇到了一个问题,不知道楼主遇到了没有。我平时自己写setup.py来发布自己的程序,更新到anaconda3之后,setup.py里的console_scripts编译出来之后不可用了,执行的时候path路径不对,总是找不到包ModuleNotFoundError: No module named 'readconfig'
        但是我换成/usr/bin/python执行的时候就能找到包,这是python2和3之间的区别,还是anaconda需要增加一些环境变量呢?
        216f793b5b43:谢谢大哥分享
        钢筋铁骨:自己找到个解决办法,在console_scripts调用的函数开头里加了这么一句,把当前目录加到pythonpath里,能解决问题sys.path.append(os.path.dirname(__file__))。但原因未知..
      • cab5beaee3a4:哇 大爱刚哥 😀
      • 3da85b3b71af:感谢楼主,还想请问您一下,您说的下面第二种方法,在python34环境中也安装conda工具(推荐)。是直接用conda install conda吗?我在promp中运行会提示只呢个安装在root下,无法在python34中安装conda><是不是我理解错了,这个该怎么解决呢?
        如果直接按上面说的这么改PATH,你会发现conda命令又找不到了(当然找不到啦,因为conda在~/anaconda/bin里呢),这时候怎么办呢?方法有二:1. 显式地给出conda的绝对地址 2. 在python34环境中也安装conda工具(推荐)。
        3da85b3b71af:@PeterYuan 嗯,是的是的,3.4的新环境下Script里面是有conda的,而且创建完环境之后会自动创建py34对应的promp快捷方式~谢谢博主:blush:
        PeterYuan:我测试了下,新版本anaconda在非root环境中install conda确实会报'conda' can only be installed into the root environment的错误。不过新版本anaconda会在创建新环境时自动同时安装conda(在 Scripts文件夹下),不用再安装,你可以确认下是否已经存在
      • 10e4889229b3:怎么删除anaconda啊
        10e4889229b3: @PeterYuan 嗯,一开始我找到路径也没看到那个文件夹,后来打开了环境变量之后anaconda文件夹出来了,rm删除了
        PeterYuan:如果是想删除某个环境/包的话,用conda remove就行。如果是想删除整个anaconda,直接删掉安装后的那个anaconda文件夹就行(环境变量里的path也删掉)。
      • mozooo:清华的站里貌似没有pyqt。另外,好像不能给其他Python环境安装conda。我安装的是anaconda2和3。anaconda3安装在了2的env目录下面。
      • 地球是缘的:谢谢博主 很详细
      • whimian:我也用的是清华的这个镜像,不过里面只有anaconda中有的包而conda能够提供的anaconda之外的,比如conda-forge上面的包,不知道有没有其他国内源可以提供
        PeterYuan:@whimian 这个得看具体的conda源吧,详细的镜像我也不是很清楚,好像网上能搜到的源大多也都是介绍Anaconda那个源的
      • cf4d26ddfa42:你好:
        我有几个问题想请教一下。
        1. 你这里提到的anaconda和federal的anaconda installer有什么区别吗? 我看RedHat/CentOS在安装时也使用到anaconda installer进行包的安装,是否两个本质是一回事?
        http://fedoraproject.org/wiki/Anaconda

        2. 另外一个问题,假如有一个CentOS系统,已经定制好了(相应的程序,配置已经都好了),需要把它制作成发行版,即可安装的镜像,使用anaconda installer是否可行?
        PeterYuan:@puyanhong federal anaconda installer跟python发行版anaconda是俩不同的东西,stack overflow上有个问题解释这个(http://stackoverflow.com/questions/33683530/is-anaconda-for-fedora-different-from-anaconda-for-python)。具体关于federal anaconda的细节我也不是很清楚,你可以google一下看看。这篇文章(http://www.cnblogs.com/lpfuture/p/5703555.html)介绍了些关于federal anaconda的知识,你看下对你有帮助不~
      • 84947559219d:谢谢博主…这是我看到的最清楚明白的教程了,我还想问的是,假如说anaconda上没有我想要的包,但是我手上有这个包的setup.py,那么我该如何安装呢
        84947559219d:@PeterYuan 谢谢
        PeterYuan:@403notfound 如果是含有setup.py的源码的话,对于大多数package,进入setup.py所在路径,直接运行python setup.py install就可以完成安装;少数package的安装命令会复杂一点,但其docs一般都会有相关说明。
      • nearby:感谢博主!设置国内镜像后,安装包的速度简直飞起~~应该不会出现那种卡死死等的状态了!!
      • PeterYuan:你运行下conda config --get channels看看结果是不是:
        --add channels 'defaults' # lowest priority
        --add channels 'https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/' # highest priority
        如果不是的话,可能是~/.condarc配置问题。
        你也可以直接在浏览器中输入地址https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/看看能不能正常访问。如果两者都没问题,应该不会卡太久。
        tikyle:@PeterYuan 应该是网络问题,换个时间就可以了!非常感谢!:smile:
        PeterYuan:@tikyle 编辑的是~/.condarc不是/.condarc吧?如果设置都没问题的话,在conda install/update时,提示信息会显示这些包的源地址(看看是不是tuna.tsinghua...),如果还是有问题的话,可以换个时间再试试:joy:
        tikyle:你好!我出现了和2楼一样的问题,清华的源设置的没有问题,输出也是和你一样的结果,在浏览器中也可以正常访问,但是还是不能使用清华的源下载,请问是怎么回事。谢谢!
        --add channels 'defaults' # lowest priority
        --add channels 'https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/' # highest priority
      • e955e92286d8:您好,我在Linux下编辑/.condarc,设置清华源后,conda install matplotlib准备下载,还是卡在Fetching package metadata ....,超级慢,请问一下可能是什么问题呢?谢谢

      本文标题:Anaconda使用总结

      本文链接:https://www.haomeiwen.com/subject/cfamjttx.html