初学者最关心的第一个问题是:
什么是Anaconda?
官方定义:Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。
但它不仅仅是一个包的集合,它其实还有一个大包的思想,即一种虚拟的环境。用一个不恰当的比喻,它是一个Python专用的环境虚拟机。
你可以在一台机器上安装不同的Python环境,每个环境的Python版本可以相同也可以不同,在每个Python环境下也可以安装不同的包。
举个例子,我的某一个项目需要使用Python3.6,又一个项目需要Python3.7,还有一个项目需要Python2.7。这种情况下,我可以在我的计算机上创建三个环境,三个环境互不影响,并且可以很简单地从一个环境切换到另外一个环境。
Anaconda是有桌面版的,即可视化交互,不过我个人更喜欢用命令行,所以这里用命令行给大家做演示。
比如用以下命令可以创造一个全新的Python环境,我们可以指定环境的名称,还可以指定Python的版本。
比如我现在新创建的环境名称叫:twofat(二胖),Python版本为3.5。
conda create --name twofat python=3.5
稍等几秒后,就安装好了。
现在我们看看我的环境中有几个Python版本了:
一共有两个Python版本了。
第一个版本是基础版本,所以在环境路径前有一个“*”的标志。默认环境的Python3.6.4:
现在我们切换到刚刚新生成的第二个Python版本:
可以看到“*”符号已经跑到twofat这个环境前了,Python版本也变成3.5.6,真的实现了一键切换版本,十分方便。
除此之外,Anaconda已经包含了200余个Python包,不管你是做数据分析还是Python后端开发,都很方便。既然有这么好用的东西,现在就动手去了解它吧,为什么还要等明天呢?
如果说Anaconda是对Python开发环境的虚拟,那么可以说Docker是对整个系统的虚拟,但它并不是我们所说的那种普通虚拟机。
很多在校大学生的笔记本电脑上装的是Windows系统,但是当学习《操作系统》等相关课程的时候,会要求使用Linux系统,这时候怎么办?
大多数人的选择是VMware,一款很牛逼的虚拟机,它可以在Windows机器上虚拟出一个Linux系统,也可以在Mac系统中虚拟出一个Windows系统。
VMware对学习者来说无疑是一个好得不能再好的工具,不过它也有一个缺点——它的性能就如同下面这张图描述的那样:
在实际开发环境中肯定不能这样搞,在物理机中使用虚拟机会使机器性能大打折扣。但我们直接在服务器上进行开发又不现实,开发环境和部署环境或多或少会有一些区别,很容易因为环境不一致而部署不上。
不只我在开头提到的那个问题,其实我还遇见过很多类似的问题,比如GCC版本不一致、OpenSSL版本不对等等,简直蛋疼的要命。我们常需要耗费很多精力来解决因为环境依赖而产生的很多问题。
所以容器虚拟化这种技术应运而生,Docker将软件和其所依赖的环境一起打包成镜像进行交付,这样就避免了因为环境不同而产生的依赖问题。
其实用过虚拟机的同学应该知道什么是镜像。当我们安装虚拟机的时候需要下载一些操作系统的镜像,它其实就是把操作系统以及操作系统上默认安装的软件进行了打包。镜像就是这个意思。
那么问题来了,既然传统的虚拟机和Docker都是打包镜像,那为什么要选Docker而不选择VMware等虚拟机呢?
传统的虚拟机是通过中间层将一台或多台独立的机器虚拟地运行在物理机上,而容器是直接运行在操作系统内核之上的用户空间,性能是传统虚拟机不可比拟的。
不过,有时候优点也是缺点,前文咱们讲到了,VMware等虚拟机可以在Windows系统之上再虚拟一个Linux系统,也可以在Mac系统中虚拟Windows系统。可是Docker不行,正是由于它直接运行在操作系统的内核之上,所以它只能运行与底层宿主机相同或者相似的操作系统。简单来说就是,Linux物理机只能运行Linux容器。
所以,学习《操作系统》等课程的时候,我们可以选择VMware等软件,而在实际开发中,还是使用Docker吧,这就可以避免我在前文中提到的我遇见的那些问题啦
“工欲善其事必先利其器”。
我们不能一味地只去学习编程,有时候还是需要停下来学习使用一些工具,这样会让我们的学习和工作效率大大提升。
我这里只是告诉大家有这么个东西可以这么去用,具体的学习过程,还得靠大家,百度一下,你就知道。
本文作者:二胖并不胖