anaconda使用

如何使用Anaconda来管理 Python 所用的包和环境


Anaconda 能让你轻松安装在数据科学工作中经常使用的包。你还将使用它创建虚拟环境,以便更轻松地处理多个项目。Anaconda 简化了我的工作流程,并且解决了我在处理包和多个 Python 版本时遇到的大量问题。

Anaconda 实际上是一个软件发行版,它附带了conda、Python 和 150 多个科学包及其依赖项。应用程序conda是包和环境管理器。


使用conda来管理包和环境能减少将来在处理你要使用的各种库时遇到的问题。


管理

包管理器用于在计算机上安装库和其他软件。你可能已经熟悉 pip,它是 Python 库的默认包管理器。conda 与 pip 相似,不同之处是可用的包以数据科学包为主,而 pip 适合一般用途。但是,conda并非像 pip 那样专门适用于 Python,它也可以安装非 Python 的包。它是适用于任何软件堆栈的包管理器。也就是说,并非所有的 Python 库都能通过 Anaconda 发行版和 conda 获得。在使用 conda 的同时,你仍可以并且仍将使用 pip 来安装包。

Conda 安装了预编译的包。例如,Anaconda 发行版附带了使用MKL 库编译的 Numpy、Scipy 和 Scikit-learn,从而加快了各种数学运算的速度。这些包由发行版的贡献者维护,这意味着它们通常滞后于新版本。但是,由于有人需要为许多系统构建这些包,因此,它们往往更为稳定,而且更便于你使用。

环境

除了管理包之外,conda 还是虚拟环境管理器。它类似于另外两个很流行的环境管理器,即virtualenvpyenv

环境能让你分隔你要用于不同项目的包。你常常要使用依赖于某个库的不同版本的代码。例如,你的代码可能使用了 Numpy 中的新功能,或者使用了已删除的旧功能。实际上,不可能同时安装两个 Numpy 版本。你要做的应该是,为每个 Numpy 版本创建一个环境,然后在适用于项目的环境中工作。

在应对 Python 2 和 Python 3 时,此问题也会常常发生。你可能会使用在 Python 3 中不能运行的旧代码,以及在 Python 2 中不能运行的新代码。同时安装两个版本可能会造成许多混乱和错误。而创建独立的环境会好很多。

也可以将环境中的包的列表导出为文件,然后将该文件与代码包括在一起。这能让其他人轻松加载代码的所有依赖项。pip 提供了类似的功能,即pip freeze > requirements.txt。



在 Windows 上,会随 Anaconda 一起安装一批应用程序:

Anaconda Navigator,它是用于管理环境和包的 GUI

Anaconda Prompt 终端,它可让你使用命令行界面来管理环境和包

Spyder,它是面向科学开发的 IDE

管理包

安装了 Anaconda 之后,管理包是相当简单的。要安装包,请在终端中键入conda install package_name。例如,要安装 numpy,请键入conda install numpy。

你还可以同时安装多个包。类似conda install numpy scipy pandas的命令会同时安装所有这些包。还可以通过添加版本号(例如conda install numpy=1.10)来指定所需的包版本。

Conda 还会自动为你安装依赖项。例如,scipy依赖于numpy,因为它使用并需要numpy。如果你只安装scipy(conda install scipy),则 conda 还会安装numpy(如果尚未安装的话)。

大多数命令都是很直观的。要卸载包,请使用conda remove package_name。要更新包,请使用conda update package_name。如果想更新环境中的所有包(这样做常常很有用),请使用conda update --all。最后,要列出已安装的包,请使用前面提过的conda list。

如果不知道要找的包的确切名称,可以尝试使用conda search search_term进行搜索。例如,我知道我想安装Beautiful Soup,但我不清楚确切的包名称。因此,我尝试执行conda search beautifulsoup。



管理环境

如前所述,可以使用 conda 创建环境以隔离项目。要创建环境,请在终端中使用conda create -n env_name list of packages。在这里,-n env_name设置环境的名称(-n是指名称),而list of packages是要安装在环境中的包的列表。例如,要创建名为my_env的环境并在其中安装 numpy,请键入conda create -n my_env numpy。


创建环境时,可以指定要安装在环境中的 Python 版本。这在你同时使用 Python 2.x 和 Python 3.x 中的代码时很有用。要创建具有特定 Python 版本的环境,请键入类似于conda create -n py3 python=3或conda create -n py2 python=2的命令。实际上,我在我的个人计算机上创建了这两个环境。我将它们用作与任何特定项目均无关的通用环境,以处理普通的工作(可轻松使用每个 Python 版本)。这些命令将分别安装 Python 3 和 2 的最新版本。要安装特定版本(例如 Python 3.3),请使用conda create -n py python=3.3。


进入环境

创建了环境后,在 OSX/Linux 上使用source activate my_env进入环境。在 Windows 上,请使用activate my_env。


进入环境后,你会在终端提示符中看到环境名称,它类似于(my_env) ~ $。环境中只安装了几个默认的包,以及你在创建它时安装的包。可以使用conda list检查这一点。在环境中安装包的命令与前面一样:conda install package_name。不过,这次你安装的特定包仅在你进入环境后才可用。要离开环境,请键入source deactivate(在 OSX/Linux 上)。在 Windows 上,请使用deactivate。



保存和加载环境

共享环境这项功能确实很有用,它能让其他人安装你的代码中使用的所有包,并确保这些包的版本正确。可以使用conda env export > environment.yaml将包保存为YAML。第一部分conda env export写出环境中的所有包(包括 Python 版本)。

上图可以看到列出了环境的名称和所有依赖项及其版本。导出命令的第二部分> environment.yaml将导出的文本写入到 YAML 文件environment.yaml中。现在可以共享此文件,而且其他人能够创建和你用于项目相同的环境。

要通过环境文件创建环境,请使用conda env create -f environment.yaml。这会创建一个新环境,而且它具有在environment.yaml中列出的同一库。



列出环境

如果忘记了环境的名称(我有时会这样),可以使用conda env list列出你创建的所有环境。你会看到环境的列表,而且你当前所在环境的旁边会有一个星号。默认的环境(即当你不在环境中时使用的环境)名为root。

删除环境

如果你不再使用某些环境,可以使用conda env remove -n env_name删除指定的环境(在这里名为env_name)。




最佳做法

使用环境

对我帮助很大的一点是,我的 Python 2 和 Python 3 具有独立的环境。我使用了conda create -n py2 python=2和conda create -n py3 python=3创建两个独立的环境,即py2和py3。现在,我的每个 Python 版本都有一个通用环境。在所有这些环境中,我都安装了大多数标准的数据科学包(numpy、scipy、pandas 等)。

我还发现,为我从事的每个项目创建环境很有用。这对于与数据不相关的项目(例如使用 Flask 开发的 Web 应用)也很有用。例如,我为我的个人博客(使用Pelican)创建了一个环境。

共享环境

在 GitHub 上共享代码时,最好同样创建环境文件并将其包括在代码库中。这能让其他人更轻松地安装你的代码的所有依赖项。对于不使用 conda 的人,我通常还会使用pip freeze(在此处了解详情)将一个 piprequirements.txt文件包括在内。

了解更多信息

要详细了解 conda 和它如何融入到 Python 生态系统中,请查看这篇由 Jake Vanderplas 撰写的文章:Conda myths and misconceptions(有关 conda 的迷思和误解)。此外,有空也可以参考这篇conda 文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • Anaconda使用总结 原文出处:2016.7.19 PeterYuan 序 Python易用,但用好却不易,其...
    MiracleJQ阅读 2,178评论 0 11
  • Anaconda使用总结 2016.7.19 PeterYuan 序 Python易用,但用好却不易,其中比较头疼...
    PeterYuan阅读 310,871评论 36 347
  • 前言 Python易用简单方便,而且工具库十分的强大,很多机器学习工具库都提供python API,可是老话说的好...
    斐波那契的数字阅读 3,117评论 0 1
  • 1. 介绍 任何语言的包,依赖和环境管理:Python,R,Ruby,Lua,Scala,Java,Javascr...
    Himryang阅读 73,976评论 6 66
  • 获取结尾两个字符子串: let sessionId = "this is a test" let index = ...
    通哥阅读 118评论 0 0