| |
首页 淘股吧 股票涨跌实时统计 涨停板选股 股票入门 股票书籍 股票问答 分时图选股 跌停板选股 K线图选股 成交量选股 [平安银行] |
股市论谈 均线选股 趋势线选股 筹码理论 波浪理论 缠论 MACD指标 KDJ指标 BOLL指标 RSI指标 炒股基础知识 炒股故事 |
商业财经 科技知识 汽车百科 工程技术 自然科学 家居生活 设计艺术 财经视频 游戏-- |
天天财汇 -> 设计艺术 -> 为什么有些人宁愿花费很多时间去自己手工配置Python环境 也不用Anaconda? -> 正文阅读 |
|
[设计艺术]为什么有些人宁愿花费很多时间去自己手工配置Python环境 也不用Anaconda? |
[收藏本文] 【下载本文】 |
比如: spyder可以独立安装么? 不存在恶意, 是虚心求教. 自己手工配置有什么好处? 存在什么特殊场景需要这样做? 很纠结Anaconda浪费了… |
不要给我讲什么docker容器,miniconda, 老夫写python就是一把梭, pip install,pip uninstall,拿起pip就是干。 赢了安装新库,输了系统重装。 |
![]() |
感谢楼下大哥的无水印图,感谢 |
其实我很认同最高赞答案的说法,他先介绍了自己平时的需求,自己做数据处理,很少训练模型,会跑少量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吗?此时,你可以执行如下操作
等你执行完了这个程序,你想回到原来的python,只需要执行
就会回到你之前的环境。你在py27这个环境里安装的一切包,不管是pip还是conda安装的,都不会影响你当前的环境。 另外,尽管conda和pip都提供了安装python包的功能,但两者的源并不重合。两者各自维护自己的源。conda源中包含了包含了很多非python的包,比如gcc,nodejs,cuda,都可以用conda来安装和管理。因此很多时候你没得选。比如有个工程需要torch0.4,而torch0.4依赖了cuda9.0。而你电脑里只有cuda11.0,你难道要再去网上下个cuda9.0吗?此时你只需要使用
就解决了cuda版本问题,不香吗?pip是不会托管cudatoolkit这种包的,因此这时conda和pip配合使用就是最好的解决方案。 质疑浪费空间的,miniconda安装包也就50多M(里面带了一个python),比python安装包大不了多少,但能让你有机的组织起任意多个python环境来。为何不用呢? virtualenv也可以创建虚拟环境,为什么要用conda?因为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解决了一些难不倒我的问题,而又额外带来了一些我不愿碰的问题,所以我不用它。 我是一个Python应用开发者,自诩为高手,不是数据分析师,也不是AI工程师。偶尔做一些数据分析,但没有协作者;偶尔serve和使用一些AI模型,但不需要自己做训练,也没有协作者。因此得出上述结论,更偏向于使用原生Python的生态。 安装VS安装包 毫无疑问,Anaconda是一个成功的产品。它最大的特点是All in one的设计思路,给了用户一个开箱即用的产品。并且,这个产品本身即可成为团队协作的标准,确保在我这里运行的结果,在你那里也能轻松复现。 但是对我来说,从零配置原生的Python环境完毕,这个522MB的安装包(以Anaconda3-2020.02-Linux-x86_64.sh为例)都还没下载完。(这个安装包在解压、安装后,总大小3.4GB。) 以前写过一个基于原生Python准备数据分析环境的技术笔记。从中可以看出,从零准备基本的运行环境,对我这种Python老鸟来说,是一件非常容易的事。Anaconda反而很难,因为国内的网络…… 用Python做数据分析的环境初始化 · 零壹軒·笔记?note.qidong.name/2018/03/python-data-analyze-init/ |
![]() |
0 vs $10,000+ Anaconda在下载方面有一个问题。它作为一个商业项目,强调商标与知识产权,禁止滥用,这没有错。但国内镜像都被停了,包的安装与下载就成了一件极其低效的事。(tuna已恢复。) Tsinghua Open Source Mirror?mirrors.tuna.tsinghua.edu.cn/news/close-anaconda-service/ |
![]() |
USTC Mirror Help 文档?mirrors.ustc.edu.cn/help/anaconda.html 梨酱:Anaconda国内镜像停止后,怎么办?(已恢复)111 赞同 · 20 评论文章 |
![]() |
从一家商业公司的角度来考虑,既不能自建镜像,又不能接受团队的低效,难道舔着脸蹭tuna?从合规方向考虑,公司应该出钱购买Team Edition或Enterprise Edition。价格嘛,$10,000起,还有其它单次付费的情况。 原生Python根本不要钱,只需要内部培训一下。而且国内PyPI镜像满天飞,合法合规。 pip vs conda Miniconda是Anaconda的子集,仅包含基本的Python运行环境与conda。 conda是一个了不起的创新!它结合了包管理pip与虚拟环境virtualenv等技术,不仅在客户端简化了操作,还在服务端再造了PyPI的体系。 Python的软件包,大概包含纯Python(.py)、Python混合C/C++(py+so)与纯二进制(so)三大类,都支持import后直接使用。因此,PyPI支持的egg、wheel包,在设计时就考虑了对so的发布支持,即使它很复杂,必须区分架构和系统。 比如,numpy的一个版本就通常包含近20个wheel包。这里列几个有代表性的发布件,大家可以通过文件名感受一下。 numpy-1.19.0-cp36-cp36m-manylinux2010_x86_64.whlnumpy-1.19.0-cp37-cp37m-manylinux2014_aarch64.whlnumpy-1.19.0-cp38-cp38-win_amd64.whlnumpy-1.19.0-pp36-pypy36_pp73-manylinux2010_x86_64.whl 有一类包,本身是三大类中的某一类(总类别已经变成了2×3=6种了),但发布时只有源码包,安装时需要临时编译其中的C/C++部分代码。这类包的问题是,在pip install时可能出现各式各样的crash。有时候,你安装的包本身是正常包,但依赖中有这类包,也会在安装时导致crash。 还有一类,本身是三大类中的某一类,发布时可能只有源码包,或像numpy一样做好了大多数情况下的wheel包(总类别已经变成了2×2×3=12种),但运行时需要依赖某些额外的系统组件(so)。因此,光有pip不够,还需动用系统包管理器,比如apt、yum等,才能完整准备某些运行环境。否则,在运行到某些功能时,就会crash,比如uwsgi、graphviz等。 所以,在上面12种分类中,只有3种是pip能完美支持的,其它9种都需要系统给与某种程度的配合,比如安装gcc、python3-dev等。conda做了比较完善的编译包,甚至包括某些运行时依赖的组件,比如ffmpeg。用户执行conda install就够了,不需要再考虑系统状态。这一点比pip更进一步,非常优秀。 尽管如此,对我来说也并非不可替代。pip在设计时就选择了与apt这些系统包管理器共生,是因为系统包管理器更完善。一家Anaconda,在完备性上是不足以与任何一个Linux发行版竞争的。它只能保证数据科学相关的包,出了这个圈依然要动用系统包管理器。 前面说了,我是一个Python开发者。仅仅有数据科学这部分,对我来说是不够的。在数据分析师、AI工程师那里,conda确实完胜了pip,他们只需要用conda;但在我这里,conda还不够完备。在conda+pip+apt和pip +apt面前,我选择了pip+apt,反而减小了环境准备的复杂度。 考虑工程与发布 数据分析师的产出是PPT,AI工程师的产出是论文或模型,因此对某些事不敏感。 我作为Python应用开发者,要考虑一个软件产品从开发到上线的全部流程。基于pip的Python原生生态,在这方面是比较成熟的,而conda相比之下就比较冷门,并且不具备决定性的技术优势。(前面说的conda+pip+apt,如果能优化为仅conda,就能称为决定性的技术优势,战胜pip+apt,然而并没有。)如何做技术选型,是一件显而易见的事。 问题描述中有提到: 很纠结Anaconda浪费了一些硬盘空间? 不好意思,在大多数Python应用所有环境总共只有100MB以内(包括系统包、Python运行环境与应用本身)的情况下,一个光Python运行环境就有3.4G的东西,真的大到不能忍。从两个角度来解释吧: 作为一家大公司,以Docker镜像方式发布产品。每次产品上线、扩容时,需要额外复制这么大的无用文件,空耗空间与时间,影响发布效率。我怎么和上头吹,我的秒级发布、秒级回退、秒级扩容?而且还要为这么多组件的安全、维护、开源协议操心。作为一个小开发者,买个1核1G的服务器,自带40G系统硬盘。由于没什么点击量,因此一台服务器本来预备serve几十个服务,基础镜像也往往挑选小而冷的Alpine。这个Anaconda一上来就是3.4G,小家小业折腾不起啊!规避长臂管辖 另外,今年美国对台积电的长臂管辖,意味着把商业基础交给美国的商业公司,是一件可能会炸的事。在一些公司内部做技术选型时,把美国商业技术列入低优先级名单、甚至黑名单,已经是大势所趋。 相比之下,非盈利性的基金会PSF更可以信赖。 |
高赞回答说得很对,很多人吧conda,anaconda,miniconda弄混了。 conda:功能1:和pip类似的命令,用于安装不同python库,但如果混用很容易导致库出问题。非必要不建议使用conda安装python库,建议一律使用pip命令安装python库。功能2:用于制造相互之间完全隔离的python环境。被隔离的python环境之间相对独立,可以拥有不同版本的python解释器、不同的库。conda命令相对于python自带的环境管理功能的优点于:允许不同环境使用不同的python版本。 anaconda:用"一个非轻量级软件"来描述或许更为合适。包含有conda命令工具、用来写代码的图形界面,以及自带的base环境(自带的,属于conda功能2下管理的环境),其中包含一系列默认安装好的python数据处理方面的库比如scipy,numpy等。 minconda:anaconda的轻量级,大约50~60M。安装minconda≈安装且只安装conda命令。miniconda只拥有命令行界面(其实严格来说python自带的idle也勉强算图形界面)。缺点在于无法对系统环境如cuda版本进行隔离。 docker:可以看作一个几乎不损失性能的、轻量的"虚拟机"管理工具,并且能够很方便地在不同设备上将"虚拟机"进行迁移。 idle:python自带的图形化用于写代码的界面。非常简陋,功能也极为有限,但省在简单。几乎所有python安装的方式都能打开它。 vscode:类似于win中笔记本一样的东西,没有编译器,用于写代码查看代码的。需要搭配各种语言的解释器使用比如gcc,python,mingw。优点在于有很多不同的插件,可以对许多语言进行调试以及各种强大的功能。可以看作idle的plus++版。 我建议python初学小白直接下载最原始的python,官方自带的ide也就是idle就可以满足最初步的学习。基本上300行以内的代码用这个来写是够的,再多就要考虑使用更高级的ide来写了。 对于把python当成数据处理画图工具的使用者而言,可以考虑使用anaconda。安装方便(耐心等待即可),缺点在于过于臃肿,自带的很多库实际上用不上,配置较低的电脑用起来可能卡顿。 对于多项目开发,需要兼顾不同项目不同版本的库甚至python版本的人,轻量级的miniconda已经足够满足需求。如果有必要的话,项目完成后可以remove环境将之前安装的包删除,进一步节省存储空间。初学者可能不清楚miniconda的某些版本在安装在win系统上时需要添加3个环境变量(没记错的话应该是3个)。 对于需要考虑在不同cuda版本下工作的,以及需要在不同设备上迁移环境的,docker是最优解。docker隔离环境功能在某种意义上可以看作是miniconda的上位替代。但是miniconda本身没有包含idle以外的ide,需要搭配其他ide使用,比如vscode。 对于一些特殊需求比如写网络,爬虫的,我印象中spyder据说挺好用,但没用过不清楚。 我个人而言,本地:win下使用vscode+miniconda。服务器:ubuntu下使用vscode的remote development插件连接到远程docker。 顺便提一句vscode的remote-development插件可以支持调试服务器容器内代码,调试方式和本地调试代码类似,非常好用。不过有时候会有一些bug。以下列举一些我遇到的bug以及解决方式。vscode能够链接服务器,但链接不上服务器上的docker容器:依赖的remote-container的最新版本有问题,回退该插件版本。有时候直接使用命令行的ssh命令能链接服务器,但vscode无法链接:使用命令行ssh先链接服务器,然后删除服务器端个人home目录下的.vscode-ssh文件夹。每次链接容器后python插件失效:卸载重装容器内的python插件。不过总体瑕不掩瑜,还是很好用的。 题外话:conda的环境中使用idle命令可以直接打开该环境下的python的官方ide。(当初小白时很偶然发现的 ) |
我理解有两方面原因,首先Anaconda对数据科学很友好,但对于其他Python应用场景并不是最佳选择,更多人会使用原生python+pip+venv,去搭配自己的开发环境。 其次,Anaconda过于臃肿,光安装包就有五六百兆,占用几个G的运行空间,造成资源浪费。 |
![]() |
如果你知道Anaconda到底是什么,就会明确该不该用它。 Aanconda是基于conda的Python数据科学和机器学习开发平台,这里有几个关键词需要画线重点解释。 |
![]() |
conda是虚拟环境工具+包管理工具,可以用于各种开发语言,这里指Python。conda资源库有上万个第三方库,大部分都是数据科学和机器学习相关领域。 |
![]() |
除了conda,venv、pipenv、Virtualenv等工具也可以用来创建虚拟环境,pip可以用来下载管理Python包。 Python是Anaconda自带的,无需你再次安装,而且配置好了运行环境。 数据科学是指Anaconda侧重于数据科学领域的Python开发,自带pandas、numpy、matplotlib、Jupyter等大多数主流第三方库,这也导致Anaconda体积过大。 |
![]() |
所以综上所述,Anaconda最大特点是:服务Python数据科学和机器学习,一次安装,一劳永逸。 对于从事Python其他开发领域的人来说,并不需要上述的功能,或者完全可以用pip、venv等工具替代,那么Anaconda就不那么值得安装了。 有一些用户为了避免功能冗余,去选择Miniconda,安装包只有50M。 Miniconda是瘦身版的Anaconda,只包含Python和Conda。我也建议大家去使用Miniconda,简洁、强大。你可以使用conda去配置虚拟环境,安装各种第三方库。 |
我这种弱鸡一般是: 安装pythonpython -m venv venv然后开始 pip 错了就删个目录重练,对了就赚了。 |
说个五毛钱的刚需场景。 因为种种原因,经常需要携python环境在不同的机器上跳来跳去,conda环境的跨机器迁移成本太高了,并且按照主流方法迁移成功后,经常会遇到一些奇奇怪怪的问题。而用virtualenv自建的py环境就稳定的一批,配合写个新机器的自动配置脚本,至少我再也没因为迁移环境的问题头疼过。 |
miniconda最大的优点在于linux下不需要root权限。要知道国内服务器集群一般都是redhat,软件包老得不能再老,根本不能用。然而安装和升级各种计算工具都需要找系统管理员,十分不方便。这时候miniconda对我来说简直是神器,不需要权限可以安装python全套,而且顺带mkl,R,gcc,fortran,pandoc等科学计算码农需要的神器都可以装。升级也十分容易。从此我和我的小伙伴们再再也不用看管理员脸色了。 直到我很快发现了另一个神器:docker(使用podman也不需要管理员权限)。自己配置好一套python环境(或者任意的linux工具环境)可以任意迁移到其他平台使用,比miniconda还方便。现在也不需要看conda的脸色了。 |
无他,唯手熟尔。 大部分情况下, 我这种菜鸡Python码农, 一个pyenv就解决了所有的事情, 要什么自行车。 |
以前我都是手动下源码自己build python,一直想不通有了pip为什么还需要conda. 直到有一天对比了运行速度,numpy,scipy自不必说,就连python解释器的速度anaconda都要好于纯python至少20%以上,从此以后我就只用anaconda了。 |
当你需要跑n个不同种类、兼容不同python版本的深度学习相关代码的时候,你就知道为啥需要anaconda了。 但当你用anaconda发现自己的环境变量被乱改,导致连c++标准库都链接不对的时候,你就又把anaconda卸载了。。 |
去参加一个AI培训,用Anaconda+jupyter,但是上课的教授自己也不太熟悉环境,下面参培的老师们也是各种问题,我也没跑通,索性开个venv 手动配+Pycharm编辑,一会儿就顺利跑通了。一周的培训我都这么玩儿的,直到培训结束我也不清楚为什么要折腾anaconda。 |
我是用virutalenv搭建的虚拟环境,没有用anaconda, 但是同事们都用anaconda。 上次国内的Conda源挂掉之后,有些同事也不太爱用conda install了 自己用pip配置python环境也很方便,速度比conda快 最后吐槽一下:conda install 的Solving environment 时间比下载时间都长,加重了我敲代码时的焦虑情绪 |
保持对环境的敏感性? 组里很多学生用conda,除了调代码其他啥也不care,于是当合作做项目时你就会发现: 1、实验机器上几个项目共用一个环境,同时环境下n多未使用的库(当然你可以使用某些工具把使用的库摘出来) 2、不知道进行了什么操作整乱环境变量,一打开shell就conda启动失败,然后就要重装系统(汗!!) 3、组内生产机上古早项目都有独立的venv,然后学生一用生产机,就开始安装conda,然后一启动conda就覆盖掉默认环境,古早项目启动遇到问题就不知道咋办了,就把烂摊子扔那了(已逐渐要求打包成docker image) 总而言之有点太方便了,方便到瞎用,能跑自己的代码就行,但是完全不了解库是如何被管理的 |
之前也是通过Annconda来安装PyTorch的各种库,后来卸载了全部手工安装。原因嘛也很简单:公司收到律师函了,要求员工的工作电脑卸载Anaconda(电脑是公司配发的),不然得交钱,很多的钱。 遇到这种情况能咋办? 对公司来说,对个人来说,无解。要么公司交很多的钱,要么再整一台个人电脑。 也有人认为:对于公司来说,使用商业软件给钱应该是天经地义。的确是对的,但是公司也会从成本和收益角度来考虑,一款商业软件是否值得花钱购买。对于一些核心的商业软件和工具软件,公司当然愿意也必须花钱购买,而对于一些性价比并不高的商业软件,公司不愿意花钱罢了。毕竟对于公司来说,常用的商业软件需要几十款,是需要考虑成本的。 |
之前没接触过CV的时候,我下载了别人的project,pip install了一堆,不是缺这就是少那,怎么install都运行不了,都会报错。 我下载了anaconda之后,改了个运行环境就能启动 |
首先我个人写代码习惯jb全家桶,写python自然会用pycharm,pycharm在新建项目的时候可以很方便的创建虚拟环境,指定一个python解释器版本即可,需要的库也可以直接通过pycharm来管理安装,甚至如果你懒得自己手动加,只管import就好了,出现红色波浪线之后再通过提示来安装即可。所以对我而言配置虚拟环境只不过是点几下鼠标的事情。 那么好处是啥呢,好处是写完代码直接打个包就能丢出去随便跑了,绝大部分情况下不会出什么问题。特殊情况那就特殊对待。 如果说只打包代码文件的话那么就在编写完毕之后利用requirement文件来锁定依赖就好了。 anaconda在我的视角里是一个大型整合包,省事确实省事,但是基于我奇怪的洁癖、喜欢使用新版本尽快学习新特性的习惯、如无必要勿增实体的信条,我不太可能会用anaconda。 当然,我认为anaconda很适合那些重点放在科研上的人员,本身anaconda的目标客户群也是他们,比起研究优雅的实现和加入到程序员的各种党争中去,他们更关心科研结果。 这就跟吹嘘某个语言好什么的一样,只有适合的语言,没有最好的语言。 粗俗点说就是别老想着把三角插头插进两脚插座,要么换两脚插头要么换三角插座,但无论是两脚插头两脚插座三脚插头三角插座,它们本身只是工具罢了,根据需求,怎么适合怎么来。 |
时代变了。目前对于常规 Python 项目,Poetry 是最好的选择,先进而友好,越来越多开源项目选择使用 Poetry 作为包管理工具。对于使用 pip 安装可执行工具方面,使用 pipx 是避免版本冲突的最合适选择。别再用 requirements.txt 了,已经成为过去式了,现代 Python 项目应该使用 pyproject.toml. 原回答: 我自己会习惯于 pip+venv 的解决方案。有时候遇到有些包只有 Anaconda 托管的情况确实会折腾一点,但这种情况比较少见(至少对我而言),因此对我来说不是什么太大的问题。我有时会轻度使用 Python 的几个数据科学和机器学习库,偶尔跑跑深度学习,Python 对我来说主要的作用还是在于写简单脚本,或是做一些简单软件的快速开发。因此对我来说,Conda 不是必要的。 但这仅仅是对于一个非数据科学/机器学习从业者来说。如果有人主业就是做数据科学/机器学习的,或者正在进行相关研究,那我肯定推荐用 Conda……无他,至少 Anaconda 托管的包比较多(准确地说,数据科学领域的包比较多,如果要论全部类别的包数量,Anaconda 远不及PyPI)。 我曾经在实验室做过一段时间相关的任务,经常需要在 Python、R 以及其他语言和环境间切换。如果你一直只使用 pip,就会很容易感到不便,因为整个领域中除 Python 外的其他语言生态几乎都假设你使用 Conda,因此对接 Python 生态也经常就直接在 Anaconda 上发布个包,你并不总是能遇到作者考虑到你有可能不使用 Conda 的情况。在这时,用 Conda 肯定是最方便的方式。 其实看看 Conda 首页就知道 Conda 是干什么的了 |
![]() |
注意一句话 Conda is an open source package management system and environment management system that runs on Windows, macOS, Linux and z/OS. 可以看到,Conda 被定义为一个通用的包管理工具和环境管理工具。而用它像 pip 一样进行包管理只是它的一个子功能。实际上,Conda 在背后里为你做了很多事情,例如尝试切换 NumPy 版本时,Conda 会自动提示你哪些包需要升级/降级,比如 Pandas,而使用 venv/pipenv 时,你通常只会看到一个可读性不强的冲突(仅就我当时的使用情况,我不清楚最近是不是好点了……)。 其实 Conda 与 venv/pipenv 背后的逻辑是很不一样的。本质上,Conda 认为 Python 与其他包,比如 NumPy、Pandas 等没有什么不同。例如当你想创建一个环境并安装 Pandas,Conda 会发现Pandas 需要 NumPy 和 Python 作为前置,然后就会自动下载相关依赖。当你指定了某一个特定的 Pandas 版本时,也会类似地去寻找最合适的 NumPy 和 Python 版本。 而对于 venv/pipenv 来说,Python 是与其他包相区分的,这是很合情合理的——毕竟它们的目的只是作为 Python 的包管理工具,而 Conda 则需要支持其他许多语言。因此,当你使用 venv/pipenv 时,会在你的电脑上确定一个“主”Python,并以该 Python 为基础创建虚拟环境,而不会自动尝试安装多个 Python 版本。 当然,这仅仅是说 venv/pipenv 不会像 Conda 一样“自动”安装不同的 Python 环境,不是说你不能再加个 pyenv 或其他什么来安装多个 Python 版本。但如果你经常有类似的需求,那么使用 Conda 显然会方便一些,不那么折腾。 这里我给出一张图,简单描述一下 pip 和 venv、pipenv、pyenv、pyenv-virtualenv 之间的关系。出现这张图的原文链接我也贴在图片描述里了,感兴趣的话可以自己去看看原文,原文把这些东西之间的区分讲得很清楚。 (不得不说,Python 一个版本管理搞出这么多解决方案属实逆大天) |
![]() |
来自 https://towardsdatascience.com/python-environment-101-1d68bda3094d 而关于有些人认为重要的占用硬盘空间的问题,我不觉得是个特别大的问题……Miniconda 不比一个单独的 Python 多占用多少空间,只是 Anaconda 开箱即用的特点容易让人产生 Conda 很臃肿的错误印象,其实不是这么回事。 最后总结一下,如果你是数据科学相关从业者,而且经常有要在多个不同版本之间切换的需求,那用 Conda 显然是更好的选择。如果你平常只是普通拿 Python 写写小脚本小软件,不经常整数据科学相关的东西,而且也不经常需要在多个版本间切换,那用 pip+venv 或是其他类似的方案也足够了。而且对于非数据科学相关的一些东西,Conda 其实也有不少坑,如果你经常需要用 Django 这种框架,还是建议用 pip 那一套东西。 我个人不用 Conda,仅仅是因为用不上而已。毕竟我很少会遇到要切换 Python 版本的情况,且基本只使用最常见的几个 Python 包,很少遇到版本不同造成的兼容性问题,而且现在也很少做数据科学相关的东西了。但我仍旧认为 Conda 的管理方式很优秀,如果 Conda 能够很好地解决你当前遇到的痛点,且你是数据科学从业者,那用 Conda 肯定是最好的选择。 |
你试试在annaconda里用PyQT5,然后用pyinstaller或者nuitka打包。 然后就会看到报错的多样性。 更别说那几百年不更新一次的包数据库。 这玩意儿除了安装时省心,之后干啥都是麻烦。 |
anaconda适合手头只有一个win环境的小白用户,即安即用,甚至连虚拟环境是啥都还不知道。 但其实conda的核心是虚拟环境,否则安装包单用pip就够了。稍有经验之后,一般都会改用miniconda+vscode+自动化脚本配置,项目大一点的ide改用pycharm或vs。这三个ide都支持远程调试,当你有wsl、vm或者独立linux环境的时候会用着更爽。 如果很在意隔离或者有发布需求,则会去考虑docker、podman等容器。docker其实也很适合小白用户,jupyter docker也是即安即用,有点经验的还会用jupyterhub或直接用python docker去定制自己的需求。 |
可以把anaconda想象成一个软件助手,里面装了好多软件,比如360或者腾讯的软件管家。 (为什么好多人不愿意安装360和腾讯?) 只不过每一个软件之间都可能有冲突。 比如使用这个软件,那个软件的部分功能受限制。 pip的好处是基本上都不会冲突。 虽然conda装完了也带pip,但是总觉得费事,因为如果conda forge装不上,还是需要下载whl文件 那倒不如直接下载pip 所谓的手动配置,其实也没多麻烦, 关于path 就算是不小心把path删掉了,找回来也很方便。 好多教程里推荐用anaconda+pycharm 我觉得其实对于刚上手的童鞋来说,也是没有什么必要。 毕竟对于开始时候的一些学习,用不到pycharm那么庞大的ide。 现在全世界都轻量化了,jupyter notebook 或者 jupyter lab完全可以轻松应对。 或者参考下deepnote 或者Google colab 好多环境都不需要本地配置,还支持多人共享,协同写代码 不是更香! (不过现在pycharm中也增加了对于jupyter 的支持) 而且conda国内源的更新速度还是稍微有点慢,毕竟好多东西都要导一步,就更不如直接下载并安装whl。 综上,其实pip安装可以带来更轻量化的体验,和优雅的安装方式。而conda体积大不只是因为占了硬盘的几个G,更因为集成工具的臃肿。 |
conda优势在于,conda env远强于pyenv,不同env之间可以有很多超越python环境本身的差异。 举个栗子:当你两个程序,分别需要cuda10.2和cuda9.2,conda是最简单酸爽的管理方式。 如果不是这种情况,conda确实没有pip简洁,pip也足够强大 |
git clone,然后用PyCharm打开,自动跳出建立venv,还会检测requirements.txt,点个确定就行了,有多麻烦啊 |
这个问题挺有意思。 由于每个人所处的环境总是有限的,但一种技术(比如Python语言)所涉及的领域极度宽广,所以我们总是喜欢以偏概全。 题主可能通常是用Python做一些算法模型或者AI,所以使用Anaconda特别合适。但题目问的是“Python环境”。 这样问题就变大了。那么用Python环境的人有哪些呢?我一时能想到的,至少有以下这些领域: APP和网页的服务器。爬虫。桌面可视化工具,命令行工具。数据领域:数据分析,数据处理,数据可视化。安全领域:监控 ,加密,黑客技术。游戏服务器。自动化测试。APP前端。游戏前端。其它:教育(例如manim),视频渲染和处理,硬件开发(例如树莓派),物理引擎(例如taichi)…… 以上列举的十几个领域,个别领域的技术有一些重叠,但大部分领域之间几乎没有相关性,唯一的相关性可能是都用到了Python,仅此而已。 所以我们每一个人,都无法代表“Python用户”。 我只能代表:所有Python用户中的,某个应用领域的,某种技术方案的,其中一部分用户。 同一种工具,在不同的人眼里是完全不同的东西——这种现象在很多领域里都有。 比如打印店的小妹、游戏公司的原画、3D建模师、工业设计师、平面设计师都在用PhotoShop,但他们用的功能截然不同,根本不像是在用同一款软件。 认识到了这一点,本问题的答案也就不言自明了: 在自己所在的领域多采用成熟的技术,方便自己的工作、把更多精力用在解决主要问题上。而如果其它领域采取了不同的技术或者相反的技术,也不要惊讶,有兴趣可以多了解。 例如,在我了解的游戏服务器项目中,由于虚拟机和docker的广泛使用,所有Python的第三方包管理工具都不是必要的。当然在docker的基础上再用virtualenv等等也可以,根据项目需求而定。 |
虽然尊重大家各有选择,但从问题本身…我能理解这些手工搭环境的人,但不建议新手这么做。 我的看法是,现在的个人硬件虽然谈不上过剩,但足以让我们拿资源换效率了… 更何况,如果你真的是一个追求代码质量和运行效率的人,可能更适合去学 C++,而不是 Python。 我在很早的时候(至少七八年前)就表达过这样的观点…最适合小白或者转码人士学习的编程语言就是 Python,而最适合他们入门而减少折腾的安装方式就是 Anaconda: 这篇文章现在可能略有过时,但框架没什么毛病,大家遇到具体问题百度就能解决。 Anaconda 有很多好处——虽然这些所谓的好处你用曲线救国的方式大多也能解决。 Anaconda 也有很多弊端——但我自己权衡之下是能够容忍或克服的。 我举两个简单的例子。 比如,前几年大家喜欢写爬虫,经常会有教程用到一个叫做lxml 的库,这个库在 Windows 下用 pip 安装,基本上是不会成功的…你要么折腾什么 C++ runtime,要么去下什么 .whl 自己 install。但你如果用 conda 安装,就可以直接成功。(好多年没用了,现在不知道什么情况了,而且我也转 Mac 了) 第二个例子,比如你要复现一些 AI 模型的代码库,大多数教程都会建议你从 conda create 创建环境开始做,特别是安装 torch 之类的时候,也是 conda 的成功率最高… 总之,我觉得,如果你是系统学习过,且熟悉 virtualenv 或者 pip 依赖之类的方法,能够自己较为清晰地解决不同版本之间的切换和依赖问题的话,那你可以自己手工配置。 但是能问出这个问题的人,他最好的选择大概率是用 Anaconda。 以上。 |
|
[收藏本文] 【下载本文】 |
上一篇文章 下一篇文章 查看所有文章 |
|
|
股票涨跌实时统计 涨停板选股 分时图选股 跌停板选股 K线图选股 成交量选股 均线选股 趋势线选股 筹码理论 波浪理论 缠论 MACD指标 KDJ指标 BOLL指标 RSI指标 炒股基础知识 炒股故事 |
网站联系: qq:121756557 email:121756557@qq.com 天天财汇 |