当我们不再重复“造轮子”时,会使用大量前人打造的工具,为了管理好这些工具的引用和依赖关系,我们必须有良好的意识和趁手的工具。今天这一讲,就是在一切变得复杂之前,让你找到新的方法来节省时间和精力。
开发者们对自己的开发环境总是有着各种各样的偏好。Vim 还是 Emacs?使用 tab 还是空格缩进?Virtualenv 和 Anaconda 哪个更好?纷争不断,争论不休。今天我们会与大家分享自己用于搞定数据处理和机器学习的开发环境。
你不必照着我的配置来弄,但也许其中的一些可以启发你搞定专属的开发环境。
Pip
首先要讲讲 Pip。Pip 是 Python 的包管理工具。Python 内置 pip 已经有一些日子了,所以如果你装了 Python,通常都会自带 pip。
Pip 被用来安装各种包,比如 tensorflow、numpy、pandas 和 jupyter,同时还会将它们的依赖一同安装好。
pip install
许许多多的 Python 资源都通过 pip 包的形式来传输。有时你会在某个包含 Python 脚本的目录下看到一个 requirement.txt 文件。通常,那个文件描述了当前项目所需的所有 pip 包,通过下面的命令即可将它们都安装到当前目录。
pip install -r requirements.txt.
作为整个 pip 包生态的一份子,各种各样的版本号、依赖信息充斥其中。有时我会针对不同项目使用不同版本的库(pip 包),所以我需要有一种能够针对独立环境配置一组包依赖关系的方式。
同时在一台机器上搞 Web 开发和数据科学相关研究会让你电脑上的 Python 包版本系统混乱不堪
目前有两种非常受欢迎的方式用于管理不同的 pip 包:virtualenv 和 anaconda。
Virtualenv
Virtualenv 支持你创建可命名的“虚拟开发环境”,在其中你就能按照单独的习惯安装 pip 包了。
如果你想要针对每个环境独立控制对各类 pip 包的管理,那么这就是一款绝佳的工具比如,你可以为 Web 开发创建独立的环境,定义所需的依赖库,然后为数据相关的开发研究建立截然不同的环境。
这样一来,你再也不用顾虑各种毫无关系的依赖包在开发环境中存在,也可以创建具有专门用途的开发环境。
Anaconda
如今,如果你主要从事数据相关的工作,那么 Anaconda 将会是一个不错的选择。Anaconda 由 Continuum Analytics 打造,并且是一个集成了许许多多数据相关 Python 库的发行版。
Anaconda 的流行应当归功于它只需一次安装就能得到数据科学、机器学习相关的大量工具,所以它胜在快速和简单的安装配置过程上。
与 Virtualenv 一样,Anaconda 也引入了创建专属环境的概念,也提供了每个环境下独立的依赖库版本支持。Anaconda 还有自己的包管理器:conda,你可以用它来安装依赖库。
另外,Anaconda 还允许你通过 pip 安装一些在 Anaconda 包管理器中找不到的 Python 包。
怎么选择呢?
那么究竟该怎么选择呢?是 Virtualenv 还是 Anaconda?比如我时常会跨越 Python 2 和 Python 3 测试新的 TensorFlow 版本和一些其他的库。
理想情况下,我能在这两者上使用那些新的库,但是某些情况下,两者都不能够满足需求。
再认识认识 pyenv
所以最终我选择两者都用,然后用 pyenv 这个库来管理所有的东西。从概念上来看,pyenv 处于 Virtualenv 和 Anaconda 的上层,它不仅被用于管理所使用的 Virtualenv 的虚拟环境和 Anaconda 的开发环境,还可以轻松应对 Python 2 和 Python 3 相关的操作。
Pyenv 所有特性中我最钟意的就是它为给定目录创建默认开发环境这一点。这就使得创建新目录时所需的开发环境实现自动配置。特别是当我每次要创建新项目的时候,这比起以往要记住如何创建复杂环境来说简单多了。
所以到底应该用哪一款 Python 包管理工具?这确实由你的日常工作流和喜好来决定。
如果你一般就是用一些核心的数据研究工具,并且不在意有一些额外多余的库安装到本地,Anaconda 是个不错的选择。选择 Anaconda 能够给你满足所有需求偏好的更简单的工作流。
但是,如果你是一个喜欢定制自己的虚拟工作环境并且对其中的依赖项有极强控制欲的人,那么诸如 Virtualenv 和 pyenv 的工具就非常适合你。
小结一下
管理 Python 依赖库,绝对没有唯一最佳,除了我列举出来的之外还有许许多多非常不错的。
各种各样的工具此起彼伏,记住最重要的就是每个人都有不同的需求、偏好、用法,所以要根据自身的需求来觉得最适合你的工具是什么。
你的 Python 环境是什么样的?你是如何牢牢掌控一切的?在评论中分享你的配置吧!
全部0条评论
快来发表一下你的评论吧 !