百科问答小站 logo
百科问答小站 font logo



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

  

user avatar   meng-yan-shi 网友的相关建议: 
      

其实我很认同最高赞答案的说法,他先介绍了自己平时的需求,自己做数据处理,很少训练模型,会跑少量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。有时候一些依赖类似的仓库,如果我们之前已经有类似的虚拟环境了,就不需要重新创建,直接激活之前的虚拟环境就好。


user avatar   tylin98 网友的相关建议: 
      

女王:求求题主放过我,我可不敢有什么政绩。。。




  

相关话题

  如何评价哈工大的左旺孟老师? 
  如果世界上所有的assembler, interpreter, compiler在一瞬间全消失,世界会变成怎样? 
  目前 CS 本科加硕士,请问博士申请 CS,还是 Neuroscience? 
  姚安娜毕业于哈佛大学计算机科学和统计学专业,为什么还要进娱乐圈?高学历人才进娱乐圈是趋势吗? 
  日立的「CMOS 退火」技术是怎样的一种技术?利用该技术的半导体计算机是否能够替代量子计算机? 
  为什么大多数人用C++时都要用&&,||和!来表示与或非,而不是用and or not? 
  在测试驱动开发中 如果测试写错了导致单元测试过不了怎么办?如何保证测试的正确性呢? 
  为什么计算机科学没有系统的学派? 
  为什么讲操作系统都是以Linux和Unix为例,而不是用我们常用的windows为例呢? 
  计算机开发岗和算法岗都有些什么区别? 

前一个讨论
住在加拿大真的是轻松舒适的幸福生活吗?
下一个讨论
40万,德国研究生留学三年不打工那种够吗?目标亚琛工业大学。大佬们,求告知?





© 2024-05-20 - tinynew.org. All Rights Reserved.
© 2024-05-20 - tinynew.org. 保留所有权利