天天财汇 购物 网址 万年历 小说 | 三峰软件 小游戏 视频
TxT小说阅读器
↓小说语音阅读,小说下载↓
一键清除系统垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放,产品展示↓
首页 淘股吧 股票涨跌实时统计 涨停板选股 股票入门 股票书籍 股票问答 分时图选股 跌停板选股 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吗?此时,你可以执行如下操作

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?因为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。
以上。
[收藏本文] 【下载本文】
   设计艺术 最新文章
如果由你设计更合理的kaiserreich你会怎么做
如何激怒一位美术生?
入坑了,出不来了,有没有人再推荐点你见人
为什么德云社的破事儿听起来都像在听封建社
为什么3D建模blender最好用却很少学blender
今年你拍下的哪些瞬间,给人「春天来了」的
有哪些游戏的最终 BOSS 由于设计的太难,导
“角色也有自己的生活”是什么时候开始成为
为什么All in Ai的百度做不出来sora?
为什么要上学上学的意义是什么?
上一篇文章      下一篇文章      查看所有文章
加:2025-02-26 09:47:39  更:2025-02-26 13:38:23 
 
 
股票涨跌实时统计 涨停板选股 分时图选股 跌停板选股 K线图选股 成交量选股 均线选股 趋势线选股 筹码理论 波浪理论 缠论 MACD指标 KDJ指标 BOLL指标 RSI指标 炒股基础知识 炒股故事
网站联系: qq:121756557 email:121756557@qq.com  天天财汇