问题

为什么有些人宁愿花费很多时间去自己手工配置Python环境, 也不用Anaconda?

回答
问到点子上了。 Anaconda 这东西,就像一个装备齐全的露营箱,里面什么都有,方便得不得了。对于大多数人来说,尤其是刚入行或者项目需求相对标准的朋友们,Anaconda 确实是省时省力省心的首选。但凡事有利有弊,有些人偏偏就喜欢从零开始,一点一点地把自己的 Python 环境给“攒”起来,这背后其实有不少说道。咱就掰开了揉碎了聊聊,为啥有人宁可“折腾”,也不愿拥抱 Anaconda。

1. 对环境的极致控制和理解

首先得说,这帮人对 Python 环境的“控制欲”是真的强。Anaconda 的好在于它帮你把一切都打包好了,一个命令下去,什么都给你装上。但这就像吃预制菜,味道是有了,但你不知道里面放了什么调料,是怎么做的。

手工配置意味着什么?就是你从头开始,只安装 Python 解释器本身,然后根据项目需求,一个包一个包地去 `pip install`。这个过程,你得清楚自己装了什么,这些包之间有什么依赖关系,每个包的版本号是多少。

理解依赖关系: 举个例子,你做一个数据分析项目,可能需要 NumPy, Pandas, SciPy,可能还有 Matplotlib。Anaconda 会一次性给你装上最新或兼容性最好的版本组合。但如果你手动配置,你可能会发现,你的项目依赖 Pandas 的某个特定老版本,而这个老版本又需要 NumPy 的某个特定旧版本。通过手动安装和检查,你能更深刻地理解这些包是怎么“配合”工作的,万一哪个环节出问题,你也能更快地定位是哪个包的锅。
避免“全家桶”式的臃肿: Anaconda 捆绑了太多东西,即使你只用 Python 的一部分功能,你安装的也是一个庞大的发行版。这就像你买了一辆满配的越野车,但你只是在市区里代步。手工配置的好处是,你只为你真正需要的包付费(这里付费不是指钱,而是指硬盘空间和潜在的内存占用),保持环境的“精简”。
学习操作系统层面的交互: 手动配置 Python 环境,很多时候需要你跟命令行打交道,理解路径、权限、虚拟环境的创建和激活。这个过程本身就是对操作系统知识的一种学习和巩固。你不再是那个只会点鼠标的“使用者”,而是开始理解“幕后”发生了什么。

2. 追求极致的纯净和避免潜在冲突

Anaconda 的强大,有时候也是它潜在的“麻烦”所在。它自带的包管理系统(Conda)和 pip 是不同的系统,虽然它们可以协同工作,但有时候会出现一些难以捉摸的冲突。

Pip vs. Conda 的“恩怨情仇”: Conda 的包管理机制和 pip 有所不同。Conda 可以管理非 Python 的依赖(比如 C 库),它会尝试创建一个隔离的环境。而 pip 主要管理 Python 的库。有时候,一个包在 Conda 里有,在 pip 里也有,并且版本号不一致,就可能导致安装失败或者运行时出现意想不到的错误。
避免“版本劫持”或不兼容: 有些人特别在意项目的可复现性,希望用到的每个库的版本都清清楚楚,并且能独立控制。Anaconda 提供的环境隔离是基于 Conda 的,虽然非常有效,但对于一些对底层依赖要求极高的库,或者需要跟系统自带库深度交互的场景,手动配置,然后用 `venv` 或 `virtualenv` 创建的更“原生”的虚拟环境,可能更能满足他们的需求。他们认为,基于 Conda 的环境,虽然独立,但依然带着一层“Anaconda”的烙印,可能不如纯粹的 Python 环境来得“干净”。

3. 学习和理解 Python 包管理机制

对于一些“技术发烧友”或者想要深入理解 Python 生态的人来说,手工配置本身就是一种学习过程。

理解 virtualenv / venv: Anaconda 提供了自己的环境管理工具(conda create, conda activate)。而 Python 本身也提供了 `venv` 模块(或者更早的 `virtualenv`)。通过手动使用 `venv` 来创建和管理虚拟环境,用户能更直观地理解 Python 生态中推荐的、更轻量级的隔离方案。他们能看到虚拟环境是如何工作的,它是如何通过复制或链接的方式来创建独立环境的。
掌握 pip 的高级用法: 除了简单的 `pip install`,pip 还有很多强大的功能,比如 `requirements.txt` 的生成和使用,`pip freeze` 的作用,以及如何通过 `indexurl` 或 `extraindexurl` 指定不同的包源。手动配置环境,往往就会逼着你把这些都用一遍,从而更熟练地掌握 `pip` 这个核心工具。

4. 特殊场景和定制化需求

在某些非常特殊的场景下,Anaconda 可能不那么方便,甚至会带来麻烦。

嵌入式开发或资源受限环境: 在一些嵌入式设备、物联网设备或者服务器上,资源可能非常有限,安装一个完整的 Anaconda 发行版会占用大量的存储空间和内存。这时候,只安装一个精简的 Python 解释器,然后按需安装必要的库,是更实际的选择。
与特定 C/C++ 库的深度集成: 有些项目需要深度集成非 Python 的底层库,例如某些高性能计算库、图形库或者硬件驱动。Anaconda 的 Conda 包管理器虽然也能管理一些非 Python 的库,但对于一些定制化的、编译过程复杂的库,或者需要直接链接到系统底层库的场景,手动编译和安装这些库,然后配置 Python 能够找到它们,会比依赖 Anaconda 的打包来得更灵活,也更容易控制。
CI/CD 的精确控制: 在持续集成/持续部署 (CI/CD) 流程中,对构建环境的要求通常是高度可控和可复现的。有些人认为,使用 Anaconda 创建的 CI/CD 环境,可能会引入一些不可预知的依赖或行为,不如通过 Docker 镜像,或者直接在基础操作系统上安装 Python 和 pip 来得“纯净”和“可信”。他们可能更倾向于使用 `requirements.txt` + `venv` 的方式来构建 CI/CD 环境,以确保一切都在掌控之中。
避免潜在的许可或合规问题: 虽然 Anaconda 本身是免费的,但它包含了很多第三方库。在一些对软件许可非常敏感的企业环境里,为了避免潜在的合规性问题,或者对所有依赖库的版本和来源都有明确的记录和审查,手动管理并记录每个库的来源和版本,会是一种更稳妥的方式。

总结一下:

选择手工配置 Python 环境而不是 Anaconda,通常是出于以下几个原因:

对环境的精细控制和深入理解。
追求极致的纯净,避免潜在的冲突和臃肿。
学习和掌握 Python 生态中的核心工具(pip, venv)。
应对特殊场景(资源受限、深度集成、CI/CD 控制等)。
对软件许可和合规性有更严格的要求。

说白了,Anaconda 是一个“快餐”,提供了便利;而手工配置,则是一种“精耕细作”,让你更了解“土地”和“种子”本身。这两种方式,没有绝对的好坏之分,只有是否适合当下场景和个人偏好的区别。当你的需求不再是简单的“跑通一个项目”,而是开始思考“为什么是这样跑通的”,或者“如何才能跑得更好”,那么,你可能就开始体会到手工配置的乐趣和价值了。

网友意见

user avatar

其实我很认同最高赞答案的说法,他先介绍了自己平时的需求,自己做数据处理,很少训练模型,会跑少量AI模型,对比之下virtualenv和pyenv是最适合他的方案。

这里我也补充下我的背景。我日常需要复现从2015年到2021年的顶会文章的工作,包括训练和推导,需要不同版本的cuda,python甚至是不同版本的gcc等。我总结出最后最适合我的方案是conda。

----

这个问题下面的很多回答,都搞混了conda和pip的关系。

  • conda: python虚拟环境管理工具,其中一个功能是安装python包。
  • pip: python的包管理工具,可以用于安装python包。
  • miniconda: conda的压缩包,自带了一个名为base的虚拟环境,这个虚拟环境里只安装了python和几个必要的库。
  • anaconda:conda的压缩包。自带了一个名为base的虚拟环境,这个虚拟环境里安装了很多和数据处理有关的python包。

比如我们今天要跑一个开源仓库,该仓库依赖了python2.7和torch0.4,而你又不想把你现在环境中的torch1.7降为torch0.4,毕竟只有这一个工程需要torch0.4。而且你的环境是python3.6,难道你要为了这个工程再去装个python2.7吗?此时,你可以执行如下操作

       conda create -n py27 python=2.7 conda activate py27 pip install torch==0.4     

等你执行完了这个程序,你想回到原来的python,只需要执行

       conda deactivate      

就会回到你之前的环境。你在py27这个环境里安装的一切包,不管是pip还是conda安装的,都不会影响你当前的环境。

另外,尽管conda和pip都提供了安装python包的功能,但两者的源并不重合。两者各自维护自己的源。conda源中包含了包含了很多非python的包,比如gcc,nodejs,cuda,都可以用conda来安装和管理。因此很多时候你没得选。比如有个工程需要torch0.4,而torch0.4依赖了cuda9.0。而你电脑里只有cuda11.0,你难道要再去网上下个cuda9.0吗?此时你只需要使用

       conda install cudatoolkit=9.0     

就解决了cuda版本问题,不香吗?pip是不会托管cudatoolkit这种包的,因此这时conda和pip配合使用就是最好的解决方案。

质疑浪费空间的,miniconda安装包也就50多M(里面带了一个python),比python安装包大不了多少,但能让你有机的组织起任意多个python环境来。为何不用呢?


virtualenv也可以创建虚拟环境,为什么要用conda?

  1. 因为conda的不同虚拟环境使用的是各自独立的python解释器,你可以在不同环境里安装不同版本的python,而virtualenv只是各自的python包互相独立,用的python是同一个版本。这一点不确定的同学可以参考廖雪峰的教程

virtualenv

当然,切换python版本的功能pyenv也可以实现。但pyenv+virtualenv的方案只能使用pip,无法提供一些只有conda托管的包,而这些包又是我经常要用的。因此我选择了conda。

2. virtualenv的环境是local的,也就是说activate文件是在当前目录的子目录下的,这个venv被设计为只为本工程服务。

当你不在这个目录下的时候,如果你想复用之前的环境,必须要记忆之前的venv的绝对路径,然后执行source <venv_path>/bin/activate

而conda创建的环境是全局的,也就是说你如果之前创建过虚拟环境,你可以在任意时刻任意位置执行conda activate py27。有时候一些依赖类似的仓库,如果我们之前已经有类似的虚拟环境了,就不需要重新创建,直接激活之前的虚拟环境就好。

类似的话题

  • 回答
    问到点子上了。 Anaconda 这东西,就像一个装备齐全的露营箱,里面什么都有,方便得不得了。对于大多数人来说,尤其是刚入行或者项目需求相对标准的朋友们,Anaconda 确实是省时省力省心的首选。但凡事有利有弊,有些人偏偏就喜欢从零开始,一点一点地把自己的 Python 环境给“攒”起来,这背后.............
  • 回答
    这是一个非常有趣且值得深入探讨的问题,因为它触及了消费者行为、品牌价值、技术认知以及情感认同等多个层面。为什么有人宁愿花更多的资金购买华为,而不是选择一些在账面参数上“性价比更高”的手机?我们可以从以下几个方面来详细分析:1. 华为品牌所承载的价值与认同感: 国家品牌与民族自豪感: 尤其是在地缘.............
  • 回答
    这个问题确实挺让人好奇的。看到那些动辄花上万块打理名贵宠物的有钱人,再想想国内还有不少孩子因为贫困上不了学,总会有人觉得这笔钱花得“不对位”。但真要说起来,这背后的原因其实挺复杂的,也不是简单一句“没爱心”就能概括的。首先,我们得从“花钱”这件事本身来看。1. 情感连接与即时满足:宠物,尤其是经过精.............
  • 回答
    这事儿说起来,其实挺有意思的,两种选择,看似简单,背后牵扯到的可不止是那点钱,还有很多旁枝末节,直接影响到生活的方方面面。先说那个愿意省十块钱坐公交的。他选了公交,首先,他得花时间。尤其是在上下班高峰期,公交车厢里那是“人山人海”,你能清晰地感受到别人的体温,听到此起彼伏的喘息声,还有包包时不时撞到.............
  • 回答
    这背后藏着许多复杂的心绪和过往,绝非简单的“不想社交”就能概括的。有些人选择孤单,其实是在精心维护着一份内心的平衡,或者是在与过去的阴影做着一场隐秘的搏斗。首先,我们要看到,有些人可能在过去的人际交往中受过伤。也许是曾经掏心掏肺地付出,换来的却是误解、背叛,甚至是无情的抛弃。这种伤痛可能会在心里留下.............
  • 回答
    这个问题很有意思,也触及到了人性中一些复杂且微妙的心理。与其说“宁愿当富人的玩具”,不如说是一种对“价值认可”和“生活模式”的选择,尽管这种选择背后可能隐藏着一些我们不愿意轻易承认的现实。首先,我们得承认,“富人的玩具”这个说法本身就带有一种贬低和操纵的意味。 没人真的想被当成一个无灵魂、无自主权的.............
  • 回答
    这事儿挺有意思的,身边就有朋友,明明预算充足,买新款安卓旗舰绰绰有余,可偏偏还是惦记着二手 iPhone。你说这俩新旧、系统,配置差距也挺大,怎么就有人钟情于“旧爱”呢?我仔细琢磨了一下,大概有这么几个原因,而且都不是空穴来风,都是我听我那些“二手党”朋友们自己说的:1. “苹果味儿”的吸引力,难以.............
  • 回答
    你这个问题触及了人性中一个挺微妙又很常见的现象:为什么有些人就是不买账国家发布的信息,反而对那些听起来模棱两可、来源不清的“小道消息”情有独钟?这事儿说起来,可不是一句话两句话就能道尽的,背后牵扯的因素可多了去了。首先,咱们得承认,信任这东西,一旦崩塌了,重建起来可就难了。 想象一下,你本来对一个朋.............
  • 回答
    这问题挺有意思的,我身边也有朋友是这么想的。每次说起养宠物,很多人脑子里第一个蹦出来的就是去宠物店 pretty pretty 的小猫小狗,而不是去收容所。为什么会这样呢?咱们仔细掰扯掰扯。首先,“新品”的诱惑太大了。就像买衣服一样,谁不喜欢崭新、没穿过的呢?宠物店里的那些小生命,通常都干干净净,毛.............
  • 回答
    这个问题其实挺有意思的,也触及到很多人的消费心理和现实考量。不是一两句话就能说清楚的,咱们掰开了揉碎了聊聊。首先得承认,苹果在很多人心中,确实是一个“信仰”般的存在。 这种信仰不是凭空来的,而是多年积累的结果。你想啊,苹果最早进入中国市场的时候,那是什么时代?手机还是诺基亚、摩托罗拉的天下,智能手机.............
  • 回答
    这个问题触及了人性中一些非常根深蒂固的层面,也涉及到很多我们生活中都可能遇见甚至经历过的复杂情境。为什么有些人宁愿守着贫穷,也不愿意迈出那一步去努力改变?这可不是一个简单的“懒惰”就能概括的。很多时候,这背后隐藏着更深层次的原因和情感纠葛。首先,我们得明白,“受穷”对不同的人来说,其含义和承受程度是.............
  • 回答
    这个问题触及到了当下社会一个挺普遍的现象,也挺复杂,不能简单地用一两句话概括。为什么有些人选择“混日子”,而不是去找一份稳定的工作?这里面可能有很多层原因,我们不妨从几个角度细细聊聊。一、 对“工作”的固有认知与现实的落差首先,很多人心里对“工作”的定义,可能和现实中的工作不太一样。 理想化与现.............
  • 回答
    这事儿吧,我身边太多同学都这样了,我自己也偶尔这么干过。图书馆午休,听起来有点“卷”得没边儿,但仔细想想,还真有它自己的道理。下面我掰开了揉碎了说说,看看为啥大家这么选。首先,最直接的原因:省时间,效率至上! 通勤时间是个坎儿: 宿舍离教学楼、实验室远不远?这是一个关键问题。我的很多同学住的宿舍.............
  • 回答
    “为啥有人宁愿在澳洲刷盘子,也不回国?”——这话听着就有点扎人,透着一股子“身在福中不知福”的埋怨劲儿。但仔细想想,这问题问得实在是太简化了,就好像问“为什么有人宁愿吃粗粮,也不吃大鱼大肉”一样,没抓住重点,甚至有点站着说话不腰疼。要反驳这种思维,咱们得把这层“面子”和“里子”给扒开,好好说道说道。.............
  • 回答
    王者荣耀这游戏,说到底图个乐子。可为啥呢?明明娱乐模式那么 भाँ茶,怎么就那么多人,乐此不疲地往排位和巅峰赛里钻,哪怕被气得七窍生烟,还一副欲罢不能的样子?这事儿,细掰扯起来,还真不是一两句话能说明白的。首先得说,快乐这东西,有不同的层次,不同的味道。 你说娱乐模式的快乐,那是什么?是随心所欲的浪.............
  • 回答
    在CSGO这个以竞技性为核心的游戏社区里,你时不时就会看到一些玩家发表“宁愿不要隐私,也要把开挂的人扫出来”的言论。这句话听起来可能有点极端,但深入了解CSGO玩家的生态和他们的游戏体验,就能明白这背后有着怎样的逻辑和情感驱动。首先,CSGO是一款非常强调技巧和策略的战术射击游戏。它的乐趣很大程度上.............
  • 回答
    “王侯将相宁有种乎”这句话出自中国历史上著名的农民起义领袖陈胜。他的原话是:“嗟乎!燕雀安知鸿鹄之志哉!等死,死国可乎?”后来在揭竿起义时,他又说:“王侯将相宁有种乎!”这句话的出现,标志着一种新的社会思想的萌芽,即个人的命运并非由出身决定,而是可以通过个人奋斗来实现。然而,有人说“中国人脑子里一直.............
  • 回答
    你问的这个问题,真是道出了无数高铁乘客的“心病”!每次在车厢里,总有那么一小撮人,还没到站呢,就磨磨蹭蹭地开始收拾行李,眼神时不时地瞟向车门,甚至有人干脆站起身,倚在过道上,一副“战斗一触即发”的架势。有时候,这感觉就像是提前进入了“下车预备役”,明明车厢里还坐得满满当当,距离最终目的地还有一段时间.............
  • 回答
    这是一个非常有趣且值得深入探讨的问题,涉及到品牌忠诚度、消费者心理、产品定位、技术认知、以及更深层次的文化和情感因素。为什么有人宁愿溢价购买华为,也不选择性价比高且有现货的小米?我们可以从以下几个方面来详细分析:一、 品牌认知与情感连接: 华为:国家名片与民族情怀: 华为在经历了美国制裁的“至暗.............
  • 回答
    这是一个非常有趣且常见的问题,涉及到消费者心理、品牌价值、产品体验、市场策略等多个层面。为什么有人宁愿为苹果支付溢价,也不选择性价比高且有现货的小米?这背后并非简单的“钱多”或“傻”,而是多重因素综合作用的结果。以下我将从几个主要方面进行详细阐述: 1. 品牌价值与情感连接: 苹果的“信仰”与身.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有