V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
huzhikuizainali
V2EX  ›  Python

为什么要使用 anaconda 做数据分析。相比于直接使用某一款 IDE,其必要性是什么?

  •  
  •   huzhikuizainali · 2021-03-29 08:28:33 +08:00 · 6526 次点击
    这是一个创建于 1345 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看很多视频介绍 anaconda 。都说已经帮你做好了环境配置。数据分析常用包都下载好了。继承了 jupyter 和 spyder…………

    我听了以后有如下困惑:
    1 、“Conda 使管理多个数据环境变得容易,这些数据环境可以单独维护和运行,而不会相互干扰。” 什么是单独维护和运行,而且不会相互干扰?什么叫环境配置?配置什么环境?我单独下载一个 spyder 和 python 原生包会出现什么“相互干扰”问题?可否举个例子?

    2 、“you can start using thousands of open-source Conda, R, Python and many other packages.”。实际工作中会用到那么多包么?我看网上的数据分析视频程序开头也就加载那些常用包而已。真用到什么没有的包再 pip 不可以么?(我也知道有些包之间有依赖关系。但是 pip 下载的时候应该会将依赖的包一起下载下来吧?)

    3 、今天看了个视频说从 GitHub 上下载了开源项目,在原生 python 上运行就不行。在 anaconda 中运行就可以。如果原生 python 中缺了什么包没有下载。那么跑程序的时候也会报错,提示 xx 包没有加载成功。怎么就变成对 anaconda 的依赖了呢?求解!

    4 、然后 mini conda 和 anaconda 又是什么关系?是迷你版?如果是为了图省事,避免什么开源项目无法在本地环境中运行,求稳,那干脆就用 anaconda 。用了 mini 版会不会又是一堆报错。如果会报错。那用 mini conda 和用独立的 IDE 也没什么区别了吧?
    47 条回复    2021-04-01 21:29:36 +08:00
    ZxykM
        1
    ZxykM  
       2021-03-29 08:36:43 +08:00   ❤️ 1
    简单来说,anaconda 帮你装好了几乎常用的数据分析包,你不用去自己安装。conda 可以帮你隔离项目依赖,不同项目用不同的依赖避免冲突
    LokiSharp
        2
    LokiSharp  
       2021-03-29 08:46:25 +08:00   ❤️ 3
    没有必要,只是某些人不会装或者懒得装编译器而已
    nyfwan123
        3
    nyfwan123  
       2021-03-29 08:47:54 +08:00   ❤️ 7
    关于第一个问题:单独维护和运行说的是使用类似虚拟环境管理的方式使项目之间使用单独的环境,假设项目 1 只用到了 3 个第三方库,项目 2 用到了另外 5 个不同的第三方库,如果直接使用系统环境安装和管理,首先你需要安装 8 个第三方库才有可能正常运行这 2 个项目。
    其次,某些第三方库是基于最低 Pythonx.x.x 的版本开发(根据版本特性),如果恰好这 8 个第三方库中有 1 个的依赖版本不在你系统安装的解析器环境怎么办?你还需要另外再安装一个版本的解析器,类似你的开发环境中同时存在 Python3.6.9 和 Python3.7.x 。
    然后 spyder 也是一个包,也需要安装很多的依赖,如果你直接 pip 安装 spyder,会看到很多很多的依赖先行安装,不如使用 anaconda 。
    关于第二个问题:实际工作中用到的包的多少,取决于你需要解决的问题,正常情况下秉承着能少则少的情况当然使用 1 、2 个包解决就可以。不过真正的实际情况是,几个包不太可能完成数据分析的耽误,甚至还要执行某个包的具体版本,如果你不使用 anaconda,则可能你的本地同时存在 Python3.6.9 和 Python3.7.x,还需要想办法解决类似 numpy1.11.3 和 numpy1.20.x 和 numpyx.x.x.......
    关于第三个问题:我估计你下载了开源项目在本地解析器 Python 跑报错是因为,你没有安装对应的依赖....而安装了 anaconda 之后,默认情况下会帮你安装了很多数据分析的包,以至于给你产生了一个错觉就是该项目依赖 anaconda 而不是依赖 Python 。
    关于第四个问题:mini conda 是针对只需要几个包、对包管理烂熟于心、能够自由掌控的开发者,它和 anaconda 是子集的关系,你在被限制网速、被 Q 、不使用国内镜像源的情况下体验一下安装 anaconda 就知道为什么会需要 mini conda 。

    ===============

    以上 4 点暴露楼主的问题:
    1 、对 Python 包管理机制认识模糊;
    2 、没有做过实际的数据分析项目;
    3 、对 anaconda 工作原理认识不清;
    4 、mini conda 官方文档没看。

    以上。
    有错也别纠正我,不听。
    rearcher
        4
    rearcher  
       2021-03-29 08:56:33 +08:00
    简单来说,anaconda 只是 python 的一个包管理工具罢了,自带了很多 python 的包,方便创建 python 虚拟环境。但这些没有 anacodna 也能实现,装包可以用 python 自带的 pip,虚拟环境可以用 python 自带的 venv 。
    Mithril
        5
    Mithril  
       2021-03-29 09:00:32 +08:00   ❤️ 1
    你就理解为 Python 本身的设计就只是一个拿来当胶水的脚本语言,开始也没设计严谨的工程化包管理和环境管理功能。
    和 Java 的 Maven,Gradle 或者.NET 的 NuGet 不同,Python 本身没有项目文件。你直接 import 一个库是没法指定版本的。全靠系统里面有啥就用啥。
    所以需要一个 virtualenv 去隔离你不同脚本的“系统环境”,用于给不同脚本提供不同的库环境。
    另外它作为胶水,很多依赖的库并不是 python 写的。特别是一些需要高性能计算的地方,光靠 python 是不行的。然而 python 自带的那个 pip 就只能管理 python 包,所以人们做了 conda 去作为一个更通用的包管理系统去解决这些乱七八糟的问题。
    podel
        6
    podel  
       2021-03-29 09:05:07 +08:00
    同意 3 楼观点。可能楼主并没有做过实际的数据分析项目。不能够深入其中了解其中的痛点。
    比如说 你的第一个问题: 有很多程序 对于某个库的版本要求是不一致的。有的要求某个库高版本,有的要求某个库低版本。 两个项目的库依赖之前相互排斥。这个时候,就需要环境管理了。
    我觉得 楼主可以不用顾这顾那儿的。想搞这些东西,直接按照行业成熟标准来就可以了。
    Lc7
        7
    Lc7  
       2021-03-29 09:07:53 +08:00
    @nyfwan123 不纠错,我就是想问问你说的这些和我自己用 python 安装包有什么区别?什么 3 个、5 个包的,最后 8 个包,难道 anaconda 不是也装 8 个包?

    我的理解是 anaconda 便于多环境的管理,不用项目或者用户在同台设备上所需开发环境是不一样的。
    nyfwan123
        8
    nyfwan123  
       2021-03-29 09:10:16 +08:00
    @Lc7 anaconda 类似 docker 你电脑安装了 docker 后只有一个 docker 环境,但是可以开启无限的 container
    wuwukai007
        9
    wuwukai007  
       2021-03-29 09:21:34 +08:00
    就是懒人包而已
    hareandlion
        10
    hareandlion  
       2021-03-29 09:33:52 +08:00
    节约配置环境的时间,让用户把精力集中在核心内容上,不然第一步就可能劝退不少人。当年装了 tensorflow 核心库,还要装 keras 才能跑模型,自己来的话还要改本地配置,anaconda 一键安装省心多了。。。
    qianc1990
        11
    qianc1990  
       2021-03-29 09:35:25 +08:00
    直接 pip 会有各种各样的问题出现,特别是在做爬虫项目的时候。如果愿意花时间处理这些方面的问题,没人拦你直接 pip.
    laqow
        12
    laqow  
       2021-03-29 09:40:23 +08:00
    有时间研究的话用原生 python 自己拼会让你知道很多埋在代码里面的坑,anaconda 少了很多这方面的东西
    0x000007b
        13
    0x000007b  
       2021-03-29 09:41:46 +08:00
    懒,是人类前进的动力
    newee
        14
    newee  
       2021-03-29 09:45:22 +08:00
    嗨 在实际过程中 你不同的项目要用不同的库 不同的库依赖各种版本

    楼上都说了很多了,就是避免冲突,最好是每个项目隔离,要不就会出现 A 项目能运行,B 项目出错。当 B 能运行,A 又出错的情况。
    WilliamYang
        15
    WilliamYang  
       2021-03-29 09:55:01 +08:00 via iPhone
    对于熟练 Python 的人来说没有什么用
    soulzz
        16
    soulzz  
       2021-03-29 09:57:59 +08:00
    emmmm
    我觉得都用 python 了就没那么多折腾的
    拉一个 docker 系统镜像,命令行进去写好 requirements.txt
    代码运行环境全配好打包成完整的镜像发布
    解决 100%的问题
    AlexShui
        17
    AlexShui  
       2021-03-29 10:00:14 +08:00
    多个项目是怎么处理 Python 环境的?
    1 、如果不同项目都使用同一个基础环境,那么这个环境会变得非常杂乱。需要导出项目依赖时很麻烦。
    2 、多个类似项目使用各自不同的虚拟环境,或是每次新建虚拟环境,这不是多做了很多重复工作吗。
    总的来说,不论是多个不同项目还是多个相同的项目,用 Anaconda 管理环境都很方便。
    sleeepyy
        18
    sleeepyy  
       2021-03-29 10:25:02 +08:00
    conda 主要优势 /特点:
    1. 把 python 解释器本身也作为一个“包”来管理,你可以在不同虚拟环境中随意装不同版本的 python/升降级 python
    2. conda 与 pip 相比,conda 安装的包是已经编译好的二进制分发的,pip 安装的包是源码分发。这就意味着 conda 不仅可以装使用 python 编写的 package,也可以容易地安装其他语言编写的 package 。例如,cudatoolkit 可以用 conda 直接安装,但无法用 pip 装。

    至于 anaconda,就是一个包含很多常用包的懒人环境而已。这个懒人环境其实不是大家选择 anaconda 的核心。不想这么臃肿的话,一般还是选择 miniconda (只有 conda 本体的 anaconda) 就没有它自带的那些用不到的包,可以自己按需安装。
    VZXXBACQ
        19
    VZXXBACQ  
       2021-03-29 11:35:00 +08:00
    我在做的 Python 项目一个是 3.7 两个 3.8,用 Anaconda 好管理版本,当然实在要说 virtualenv 也可以,但是 virtualenv 的不好管理一些其他包,比如 cudatoolkit,比如安装不同版本的 ffmpeg-dev 。
    xuegy
        20
    xuegy  
       2021-03-29 11:55:19 +08:00
    我觉得这玩意就是给所谓“金融 python”之流的人准备的懒人包。你让他们这些金融的从头开始配置环境还要避免冲突,能有几个人玩得转?
    shm7
        21
    shm7  
       2021-03-29 12:08:22 +08:00 via iPhone
    可能真的不懂 anaconda 是软件包 大量 python 依赖的组合包…
    jsutfun
        22
    jsutfun  
       2021-03-29 12:17:10 +08:00
    就是方便管理而已,我一直用 virtualenv,实验室用的话基本都是共有的 anaconda 环境,方便管理。
    EyreYoung
        23
    EyreYoung  
       2021-03-29 12:51:29 +08:00
    简单点说,运行某些项目对安装的包的版本有要求比如不能低于多少或者不能高于多少,所以运行不同项目需要不同环境,总比你一个环境又删又装来的方便。但是环境管理也有很多种,习惯哪个用哪个,我从头到尾都是 conda,没啥用其他的欲望
    MisakaTian
        24
    MisakaTian  
       2021-03-29 13:18:20 +08:00
    楼上说的很全面了,作为非码农主要看中:
    方便转成 slide 演示这块(当然你可以说这是 Jupyter 的功劳)
    而且一个可以离线的安装包可以省很多事情,不用什么 package 都从头到尾自己整一遍
    用 anaconda 安装 R 的解决方案整的比自己折腾 python 关联 R 来的方便
    no1xsyzy
        25
    no1xsyzy  
       2021-03-29 13:55:18 +08:00
    记得在哪看到一句话
    anaconda 是 Python 的一个 “发行版”
    huzhikuizainali
        26
    huzhikuizainali  
    OP
       2021-03-29 13:57:50 +08:00 via iPad
    @Mithril #5 谢谢你的回复。“Python 本身没有项目文件。你直接 import 一个库是没法指定版本的。全靠系统里面有啥就用啥。
    所以需要一个 virtualenv 去隔离你不同脚本的“系统环境”,用于给不同脚本提供不同的库环境。”————如此说来在 anaconda 会把不同历史版本的 python 解析器。和不同历史版本的 pandas,numpy 包都下载到本地。根据你项目需要。你需要先新建一个本地虚拟环境。在这个虚拟环境中指定用哪个版本的解析器和第三方包。对么?若果是这样。那安装 anaconda 的时候。它岂不是要把各个历史版本的包都给你下载下来?这就是 anaconda 非常臃肿的原因是么?
    如果我以上理解正确。那么对于小白来说新建一个虚拟环境时你需要为这个虚拟环境指定各个包的版本号。可是小白怎么知道呢?如果知道的话那么就像很多老手一样自己去手工 pip 对应版本的包去了。这是不是一个悖论?


    “另外它作为胶水,很多依赖的库并不是 python 写的。特别是一些需要高性能计算的地方,光靠 python 是不行的。然而 python 自带的那个 pip 就只能管理 python 包,所以人们做了 conda 去作为一个更通用的包管理系统去解决这些乱七八糟的问题。”
    ——————那是不是装 conda 就可以了。没必要装 anaconda 了?
    huzhikuizainali
        27
    huzhikuizainali  
    OP
       2021-03-29 14:05:26 +08:00 via iPad
    @MisakaTian #24 谢谢回复。做数据分析有个很重要的需求。就是变量查看器。Matlab 和 Spyder 都可以查看矩阵型变量的数据值。只要在变量空间中双击变量名。就会以表格的形式给你呈现出来。好像 pycharm 的也有这个功能。这种有点刚需的功能好像 jupyter 不具备吧。难道做数据挖掘的人都有很强的 PDF 导出或授课演示需求?为什么 anaconda 要集成 jupyter 呢?
    另外听说以前的 Spyder 不稳定。写代码如果不经常保存。有时会欲哭无泪。作为懒人包管理工具。anaconda 集成这种 ide 是不是有点难为懒人?
    sess222
        28
    sess222  
       2021-03-29 14:58:09 +08:00
    conda 不如容器方便管理,就在容器内暴露个 22 端口走 SSH 直接 pycharm 开发就行了。容器都不是万能的,anaconda 当然也不是。。。一台机子人用的多了 anaconda 就不是那么好用了。
    IgniteWhite
        29
    IgniteWhite  
       2021-03-29 15:52:58 +08:00 via iPhone
    楼主说的 Anaconda 是带 GUI 的。带 GUI 版本是方便小白入门。

    conda 作为 python 包管理器的优势在其他地方。比如举一个小的例子,conda 有回滚功能,能把之前一个 install 安装的包和依赖都恢复了。据我所知 pip 就没有这个功能。在配 virtual env 的时候还是 conda 方便。

    我个人用 pyenv 管理 virtual env,大部分时间用 conda 。有些时候某些包只上了 pypi 没上 conda-forge 我才会用 pip
    Gawain
        30
    Gawain  
       2021-03-29 16:04:04 +08:00
    作为非程序员,仅仅用 python 干点自己需要的事。我估计跟楼主比较贴近。
    说说个人理解,
    1.环境问题,因为是个人项目,基本没遇到过,不提了。我反倒是倾向于直接 docker 。
    2.可以用的时候再下啊,我每次都是。
    3.很多的时候,conda 和 pip
    是感觉不出差别的,但是,有时间 Pip 就会有问题,换了 conda 就可以。原理就是楼上们解释的原因。只有真真切切的遇到了问题,才会明白别人为什么会这么说。
    3.mini coda 的问题,一直在用清华源的 mini conda,安装换源直接 requirements.txt 。直接用 anaconda 也是一样的。但是 anaconda 体积大啊,下载费劲。
    Mithril
        31
    Mithril  
       2021-03-29 16:04:34 +08:00
    @huzhikuizainali 你说的没错,anaconda 里面就是带了一堆的这玩意。。一般是对应版本的 Python 加上几百个特定版本的库。
    一般来说你创建虚拟环境的时候,这环境就是空的。然后你往里面装某个特定版本的库的时候,比如某个库的最新版本,它会带上特定版本的依赖。这样最终你这样用来用去就成了一坨特定版本的库构成的环境了。
    miniconda 就是干这个事用的,它就是精简了那堆乱七八糟自带库的 anaconda 。
    imn1
        32
    imn1  
       2021-03-29 16:46:49 +08:00
    你想想如何在 win10 使用一个只兼容 ie6 的系统,ie8 登入就出错,那就知道了,只能装个 win xp 虚拟机
    这都想不明白的话,剩下就是杠了
    MisakaTian
        33
    MisakaTian  
       2021-03-29 17:32:37 +08:00
    @huzhikuizainali 变量查看是刚需,但我和周围的人的习惯是直接 Print 出来,比如说是数据清洗、挖掘到了特定步骤也都会打印特定数据出来查看处理结果
    演示真的是刚需,大部分整业务分析的人的脚本并不规范(我大概是干了半年才弄明白 if name == main 是啥意思,而且实际上也从来不用)只要能有阶段性结论就打印出来 /画图,业务背景也可以直接写,算是整个工作流整合的非常好了

    当然这都是 Jupyter 这种交互式 IDE 的优点,不过集成好的环境对于我们这些只会写用轮子的人来说真的很友好
    huzhikuizainali
        34
    huzhikuizainali  
    OP
       2021-03-29 20:02:35 +08:00 via iPad
    @MisakaTian 谢谢回复。问个特别小白的问题。如果列数特别多的数据,打印的话是不是就会自动换行?那查看第 m 行 n 列的数据是不是特别费眼力?
    WilliamHL
        35
    WilliamHL  
       2021-03-29 20:23:21 +08:00
    环境隔离,项目 a 需要用到 numpy-A 版本,项目 b 需要用到 numpy-B 版本,这样可以方便进行环境管理和切换
    WilliamHL
        36
    WilliamHL  
       2021-03-29 20:24:30 +08:00
    感觉生产环境 virtualenv 更习惯
    renmu123
        37
    renmu123  
       2021-03-29 22:17:22 +08:00
    1. 虚拟环境相关知识点
    2. 可以懒得下载,直接 import,更别说那些需要编译安装的,小白估计会崩溃。
    版本冲突是指:比如 A 依赖 B 的 1.x 版本,但是 C 依赖 B 的 2.x 版本,但是 1.x 和 2.x 不兼容。conda 能帮你屏蔽掉这些坑。
    3. 应该是环境没有配置好,如果配置好之后会应该是没什么区别的,但是没有经验的人有时候比较难配置
    4. miniconda 是指只安装了 conda 。anaconda 是包含了 conda 以及众多科学计算包的集合体,conda 和 pip 一样是一个包管理器。

    如果是实验室小白或者 python 小白,不建议一开始就折腾,等你遇到冲突的时候再去处理吧。

    ps:pip 的依赖管理很弱,所有才会出现 conda 、poetry 等包管理工具。
    nightwitch
        38
    nightwitch  
       2021-03-29 22:55:07 +08:00
    conda 是有自己生态的包管理器,与其他基于 pypi 的包管理器完全不同。
    conda 不仅可以管理 python 的包,还可以管理其他二进制包,比如 gcc 等。
    huzhikuizainali
        39
    huzhikuizainali  
    OP
       2021-03-29 23:32:58 +08:00 via iPad
    @renmu123 #37 谢谢回复。“ miniconda 是指只安装了 conda 。anaconda 是包含了 conda 以及众多科学计算包的集合体,conda 和 pip 一样是一个包管理器。”
    所以 minconda=conda 。anaconda 已经将数据分析需要的包全都打包在一起给你安装了。且让你在本机上建立几个独立环境。conda 没将那些包打包好供你下载。你需要哪个再通过它下载。但是他很好的帮你解决了依赖关系。你下载 a,他知道 a 依赖 b 。就默认将 b 一起给你下载下来了?

    conda 也可以管理本地虚拟环境么?
    IgniteWhite
        40
    IgniteWhite  
       2021-03-30 01:18:04 +08:00
    @huzhikuizainali conda 十分擅长管理虚拟环境 virtual env
    maloneleo88
        41
    maloneleo88  
       2021-03-30 02:45:59 +08:00 via Android
    @Lc7 用了才知道方便,xp 时代我从来不用 ghost, 嗤之以鼻啊。 win7 后用了一次 ghost 再也没全新安装过。尤其那个过期罐头版本,集成了 rar, pdf reader , ie11, 驱动精灵, adai64,还有各种驱动 补丁。 以前自己装一遍下来 得几个小时吧


    最关键的是,一旦崩了,ghost 一下,几分钟搞定, 我要是再自己重装一遍呢? 又几个小时。。。。。
    renmu123
        42
    renmu123  
       2021-03-30 07:50:19 +08:00 via Android
    @huzhikuizainali 对,差不多就是这个意思
    no1xsyzy
        43
    no1xsyzy  
       2021-03-30 10:33:03 +08:00
    @maloneleo88 …… ghost 本来就是干全盘镜像备份还原这事儿的,嗤之以鼻大约是看到别人拿来装盗版系统了吧(
    suzper
        44
    suzper  
       2021-03-30 12:16:49 +08:00 via Android
    似乎也有很多数据分析的不是计算机专业的?
    前两天才帮助一个学数学的搞定 python 环境问题。
    maloneleo88
        45
    maloneleo88  
       2021-03-30 12:19:39 +08:00 via Android
    @no1xsyzy 我说的是那种 gho 盗版系统, 以前不是很多这种系统捆绑放后门吗 都不干净
    no1xsyzy
        46
    no1xsyzy  
       2021-03-30 12:50:51 +08:00
    @maloneleo88 啊…… 你说的是用现成的 ghost 啊……
    ghost 的正确用法跟之前说电脑如何使用可以最大程度避免垃圾的时候,用虚拟机快照定期恢复差不多,自己做 ghost 备份盘,有问题直接还原。
    不过现在一方面硬盘动辄上 T,另一方面 CoW 之类的前置技术也比较成熟了,就都转向快照了。
    HankLu
        47
    HankLu  
       2021-04-01 21:29:36 +08:00
    烦死 anaconda 了,跟 vscode 总是不太兼容,环境切换太麻烦了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3567 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 11:17 · PVG 19:17 · LAX 03:17 · JFK 06:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.