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

2021-03-29 08:28:33 +08:00
 huzhikuizainali
看很多视频介绍 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 也没什么区别了吧?
6183 次点击
所在节点    Python
47 条回复
shm7
2021-03-29 12:08:22 +08:00
可能真的不懂 anaconda 是软件包 大量 python 依赖的组合包…
jsutfun
2021-03-29 12:17:10 +08:00
就是方便管理而已,我一直用 virtualenv,实验室用的话基本都是共有的 anaconda 环境,方便管理。
EyreYoung
2021-03-29 12:51:29 +08:00
简单点说,运行某些项目对安装的包的版本有要求比如不能低于多少或者不能高于多少,所以运行不同项目需要不同环境,总比你一个环境又删又装来的方便。但是环境管理也有很多种,习惯哪个用哪个,我从头到尾都是 conda,没啥用其他的欲望
MisakaTian
2021-03-29 13:18:20 +08:00
楼上说的很全面了,作为非码农主要看中:
方便转成 slide 演示这块(当然你可以说这是 Jupyter 的功劳)
而且一个可以离线的安装包可以省很多事情,不用什么 package 都从头到尾自己整一遍
用 anaconda 安装 R 的解决方案整的比自己折腾 python 关联 R 来的方便
no1xsyzy
2021-03-29 13:55:18 +08:00
记得在哪看到一句话
anaconda 是 Python 的一个 “发行版”
huzhikuizainali
2021-03-29 13:57:50 +08:00
@Mithril #5 谢谢你的回复。“Python 本身没有项目文件。你直接 import 一个库是没法指定版本的。全靠系统里面有啥就用啥。
所以需要一个 virtualenv 去隔离你不同脚本的“系统环境”,用于给不同脚本提供不同的库环境。”————如此说来在 anaconda 会把不同历史版本的 python 解析器。和不同历史版本的 pandas,numpy 包都下载到本地。根据你项目需要。你需要先新建一个本地虚拟环境。在这个虚拟环境中指定用哪个版本的解析器和第三方包。对么?若果是这样。那安装 anaconda 的时候。它岂不是要把各个历史版本的包都给你下载下来?这就是 anaconda 非常臃肿的原因是么?
如果我以上理解正确。那么对于小白来说新建一个虚拟环境时你需要为这个虚拟环境指定各个包的版本号。可是小白怎么知道呢?如果知道的话那么就像很多老手一样自己去手工 pip 对应版本的包去了。这是不是一个悖论?


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

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

我个人用 pyenv 管理 virtual env,大部分时间用 conda 。有些时候某些包只上了 pypi 没上 conda-forge 我才会用 pip
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
2021-03-29 16:04:34 +08:00
@huzhikuizainali 你说的没错,anaconda 里面就是带了一堆的这玩意。。一般是对应版本的 Python 加上几百个特定版本的库。
一般来说你创建虚拟环境的时候,这环境就是空的。然后你往里面装某个特定版本的库的时候,比如某个库的最新版本,它会带上特定版本的依赖。这样最终你这样用来用去就成了一坨特定版本的库构成的环境了。
miniconda 就是干这个事用的,它就是精简了那堆乱七八糟自带库的 anaconda 。
imn1
2021-03-29 16:46:49 +08:00
你想想如何在 win10 使用一个只兼容 ie6 的系统,ie8 登入就出错,那就知道了,只能装个 win xp 虚拟机
这都想不明白的话,剩下就是杠了
MisakaTian
2021-03-29 17:32:37 +08:00
@huzhikuizainali 变量查看是刚需,但我和周围的人的习惯是直接 Print 出来,比如说是数据清洗、挖掘到了特定步骤也都会打印特定数据出来查看处理结果
演示真的是刚需,大部分整业务分析的人的脚本并不规范(我大概是干了半年才弄明白 if name == main 是啥意思,而且实际上也从来不用)只要能有阶段性结论就打印出来 /画图,业务背景也可以直接写,算是整个工作流整合的非常好了

当然这都是 Jupyter 这种交互式 IDE 的优点,不过集成好的环境对于我们这些只会写用轮子的人来说真的很友好
huzhikuizainali
2021-03-29 20:02:35 +08:00
@MisakaTian 谢谢回复。问个特别小白的问题。如果列数特别多的数据,打印的话是不是就会自动换行?那查看第 m 行 n 列的数据是不是特别费眼力?
WilliamHL
2021-03-29 20:23:21 +08:00
环境隔离,项目 a 需要用到 numpy-A 版本,项目 b 需要用到 numpy-B 版本,这样可以方便进行环境管理和切换
WilliamHL
2021-03-29 20:24:30 +08:00
感觉生产环境 virtualenv 更习惯
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
2021-03-29 22:55:07 +08:00
conda 是有自己生态的包管理器,与其他基于 pypi 的包管理器完全不同。
conda 不仅可以管理 python 的包,还可以管理其他二进制包,比如 gcc 等。
huzhikuizainali
2021-03-29 23:32:58 +08:00
@renmu123 #37 谢谢回复。“ miniconda 是指只安装了 conda 。anaconda 是包含了 conda 以及众多科学计算包的集合体,conda 和 pip 一样是一个包管理器。”
所以 minconda=conda 。anaconda 已经将数据分析需要的包全都打包在一起给你安装了。且让你在本机上建立几个独立环境。conda 没将那些包打包好供你下载。你需要哪个再通过它下载。但是他很好的帮你解决了依赖关系。你下载 a,他知道 a 依赖 b 。就默认将 b 一起给你下载下来了?

conda 也可以管理本地虚拟环境么?
IgniteWhite
2021-03-30 01:18:04 +08:00
@huzhikuizainali conda 十分擅长管理虚拟环境 virtual env

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/766001

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX