购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 Python开发环境管理

针对深度学习领域而言,Python是目前最常用的编程语言。主流的卷积神经网络训练框架都采用Python作为基础开发语言。对于那些对Python不太熟悉的读者,建议先学习Python官方教程中文版,这是一门容易上手且非常友好的编程语言。本节将深入探讨Python开发环境的管理。

2.2.1 Anaconda虚拟环境的管理

与其他编程语言一样,Python也面临着烦琐的版本依赖问题。对于深度学习而言,不同版本的Python、各种Python包(如PyTorch)、不同版本的cuda、显卡驱动及操作系统版本的不同组合,都会在项目中形成错综复杂的排列组合。如果开发者需要同时开发多个项目,就需要不断在各个版本组合之间切换。这时,Anaconda就能发挥作用,帮助解决这些问题。

Anaconda是一个Python的虚拟环境(Virtual Environment)管理器。用户可以通过指定Python的版本创建虚拟环境,在激活某个虚拟环境后安装的任何Python包都不会影响其他的虚拟环境,用户可以通过一条简单的指令瞬间切换到任何虚拟环境。日常工作中同时管理10个左右的Anaconda虚拟环境是很常见的。

1.安装和认识Anaconda

Anaconda除了提供Python虚拟环境管理器,还预装了很多常用的Python包,导致其安装包体积超过500MB,在中国大陆通过官方网站下载速度可能很慢,读者可以从清华大学开源镜像站下载安装包。安装包是一个扩展名为.sh的Linux脚本文件,直接在命令行中执行这个脚本文件即可完成安装。如果当前用户名是user,那么Anaconda会自动安装在/home/user/anaconda3这个文件夹中。安装结束后可以选择初始化Anaconda环境,安装文件便会在脚本文件/home/user/.bashrc中插入初始化Anaconda环境的命令。bashrc脚本文件是Ubuntu的命令行启动脚本,每一次用户打开一个命令行都会自动执行这个文件,也就自动执行了初始化Anaconda环境的命令。如果读者在自己的命令行中看到命令行前端有(base)字样,说明Anaconda已经准备好,可以使用了。

Anaconda安装文件夹中存放了Anaconda虚拟环境所需要的各种库和Python包。一开始没有虚拟环境的时候只有Anaconda的预装环境,也就是base环境。之后新建的所有虚拟环境都会被完整地保存于/home/user/anaconda3/envs文件夹中,各个虚拟环境所独有的库和Python包都会单独保存。若某个虚拟环境的名字叫MyEnv,建立的新环境就会出现/home/user/anaconda3/envs/MyEnv文件夹,整个虚拟环境的文件都在这个文件夹里面。用户直接删除MyEnv文件夹,便相当于删除了这个虚拟环境。

用户可以为Anaconda虚拟环境指定Python版本、Python包的版本,甚至普通工具库的版本。例如,可以创建一个Python3.7、Cuda11、PyTorch 1.8的虚拟环境,这个虚拟环境将完全独立地拥有自己的一套版本组合。因为Anaconda的虚拟环境对最基本的工具库都进行了管理,用户甚至可以基于Anaconda的虚拟环境对开发用到的C++库进行版本管理。但这不属于本书的讨论范畴。

2.管理Anaconda虚拟环境

Anaconda的虚拟环境管理器是一个称为conda的应用程序,这个程序可以用来管理虚拟环境,也可以用来安装Python包。例如,使用下面的命令可以新建一个名为MyEnv的虚拟环境。

其中,“-n”选项可以理解为name的缩写,用来为新建立的虚拟环境命名。因为没有对虚拟环境进行更详细的限制,系统会复制一个和base一样的虚拟环境。如果要指定Python的版本,则需要添加Python版本的选项。

上面的命令将新建一个安装有Python 3.8的虚拟环境。除了Python,还可以指定其他包的版本,例如:

显然,以上命令会新建一个安装了Python 3.8和NumPy 1.8的虚拟环境。Anaconda甚至还可以通过环境配置文件新建复杂的虚拟环境,但是为了尽量使用Python兼容的做法,一般都会使用Python包管理器pip支持的requirements.txt文件来完成这个任务,因此在这里不进一步展开。

新建好了一个虚拟环境后,就可以激活它了。使用conda的activate选项可以激活某个环境:

上面的命令执行成功后,命令行前端会出现(MyEnv)的前缀,这意味着当前命令行已经处于MyEnv这个虚拟环境之中了。此时进入Python命令行,就能发现当前环境的Python版本正是Python 3.8。

因为虚拟环境会安装其独有的所有库,占据的内存会很大,尽早删除不需要的虚拟空间是一个很好的习惯。只需要执行下面的命令就能删除MyEnv这个虚拟环境。

这条命令做的事情其实就是删除/home/user/anaconda3/envs/MyEnv这个文件夹。值得注意的是,Anaconda为了节省用户建立新环境的时间,对各个虚拟环境使用的包进行了缓存。这也意味着仅删除虚拟环境并不能保证释放所有空间,于是经常会发生Anaconda的空间占用无限膨胀的情况,所以每过一段时间都需要执行以下命令释放缓存空间。

整个Anaconda的空间占用往往高达一百甚至几百GB,而每一次缓存清理都有可能释放几十GB的空间。

2.2.2 Python的包管理器pip

前文提到了Ubuntu的包管理器apt,其实Python也有自己包管理器——pip。激活Anaconda虚拟环境后,这个环境就拥有了一个属于自己的pip,在激活的环境中使用pip安装Python包将仅在此环境中有效。安装命令也很简单,使用以下命令就可以安装NumPy。

pip应用程序会从默认的仓库地址下载并安装能适配当前Python的最高版本。如果需安装指定版本,则需要加上版本选项:

除了通过默认的网络仓库下载安装,pip也可以通过本地文件夹安装。准备好安装的Python包一般会包含一个setup.py安装脚本,进入包含了setup.py的文件夹后,执行以下命令即可安装该包。

除此之外,也可以直接使用Python运行setup.py进行安装。

在深度学习的生态系统里,有很多类似于Detectron2、mmdetection的框架(Framework),需要从本地文件夹安装的方法安装。有时用户如果需要对源代码进行改动,也可以自行修改代码然后从本地文件夹重新安装。

在安装本地项目之前,必须先安装项目所需的依赖包。很多Python项目都非常庞大,往往需要多达十几个Python包,手动安装一个个库未免太过烦琐,这个时候就需要使用requirements.txt文件了。下面是一个requirements.txt文件的样本。

可以看出来,除了列举所需要的库,还能指定版本,甚至还能直接从指定的网络链接下载安装。准备好requirements.txt文件之后,可以通过下面这条简单的命令将所有的依赖包一次性装好。

这样不但操作十分便利,项目所依赖的Python包也一目了然。为了方便用户查找自己需要的包,Python提供了https://pypi.org/包搜索网站,凡是能在该网站上搜索到的包,都可以通过pip安装。

卸载命令也很简单,使用如下命令即可卸载numpy包。

show选项可以打印出某个包的详细信息。

这条命令经常在检查版本是否兼容的时候使用。 sbSZRnJcJRqztDVWaDoRz7Y/YmN/PFUH5Ha8GBEMIW5E/BSYgaAtg4TBfSVQ8pk6

点击中间区域
呼出菜单
上一章
目录
下一章
×