为什么要使用 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 也没什么区别了吧?
6162 次点击
所在节点    Python
47 条回复
ZxykM
2021-03-29 08:36:43 +08:00
简单来说,anaconda 帮你装好了几乎常用的数据分析包,你不用去自己安装。conda 可以帮你隔离项目依赖,不同项目用不同的依赖避免冲突
LokiSharp
2021-03-29 08:46:25 +08:00
没有必要,只是某些人不会装或者懒得装编译器而已
nyfwan123
2021-03-29 08:47:54 +08:00
关于第一个问题:单独维护和运行说的是使用类似虚拟环境管理的方式使项目之间使用单独的环境,假设项目 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
2021-03-29 08:56:33 +08:00
简单来说,anaconda 只是 python 的一个包管理工具罢了,自带了很多 python 的包,方便创建 python 虚拟环境。但这些没有 anacodna 也能实现,装包可以用 python 自带的 pip,虚拟环境可以用 python 自带的 venv 。
Mithril
2021-03-29 09:00:32 +08:00
你就理解为 Python 本身的设计就只是一个拿来当胶水的脚本语言,开始也没设计严谨的工程化包管理和环境管理功能。
和 Java 的 Maven,Gradle 或者.NET 的 NuGet 不同,Python 本身没有项目文件。你直接 import 一个库是没法指定版本的。全靠系统里面有啥就用啥。
所以需要一个 virtualenv 去隔离你不同脚本的“系统环境”,用于给不同脚本提供不同的库环境。
另外它作为胶水,很多依赖的库并不是 python 写的。特别是一些需要高性能计算的地方,光靠 python 是不行的。然而 python 自带的那个 pip 就只能管理 python 包,所以人们做了 conda 去作为一个更通用的包管理系统去解决这些乱七八糟的问题。
podel
2021-03-29 09:05:07 +08:00
同意 3 楼观点。可能楼主并没有做过实际的数据分析项目。不能够深入其中了解其中的痛点。
比如说 你的第一个问题: 有很多程序 对于某个库的版本要求是不一致的。有的要求某个库高版本,有的要求某个库低版本。 两个项目的库依赖之前相互排斥。这个时候,就需要环境管理了。
我觉得 楼主可以不用顾这顾那儿的。想搞这些东西,直接按照行业成熟标准来就可以了。
Lc7
2021-03-29 09:07:53 +08:00
@nyfwan123 不纠错,我就是想问问你说的这些和我自己用 python 安装包有什么区别?什么 3 个、5 个包的,最后 8 个包,难道 anaconda 不是也装 8 个包?

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

楼上都说了很多了,就是避免冲突,最好是每个项目隔离,要不就会出现 A 项目能运行,B 项目出错。当 B 能运行,A 又出错的情况。
WilliamYang
2021-03-29 09:55:01 +08:00
对于熟练 Python 的人来说没有什么用
soulzz
2021-03-29 09:57:59 +08:00
emmmm
我觉得都用 python 了就没那么多折腾的
拉一个 docker 系统镜像,命令行进去写好 requirements.txt
代码运行环境全配好打包成完整的镜像发布
解决 100%的问题
AlexShui
2021-03-29 10:00:14 +08:00
多个项目是怎么处理 Python 环境的?
1 、如果不同项目都使用同一个基础环境,那么这个环境会变得非常杂乱。需要导出项目依赖时很麻烦。
2 、多个类似项目使用各自不同的虚拟环境,或是每次新建虚拟环境,这不是多做了很多重复工作吗。
总的来说,不论是多个不同项目还是多个相同的项目,用 Anaconda 管理环境都很方便。
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
2021-03-29 11:35:00 +08:00
我在做的 Python 项目一个是 3.7 两个 3.8,用 Anaconda 好管理版本,当然实在要说 virtualenv 也可以,但是 virtualenv 的不好管理一些其他包,比如 cudatoolkit,比如安装不同版本的 ffmpeg-dev 。
xuegy
2021-03-29 11:55:19 +08:00
我觉得这玩意就是给所谓“金融 python”之流的人准备的懒人包。你让他们这些金融的从头开始配置环境还要避免冲突,能有几个人玩得转?

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

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

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

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

© 2021 V2EX