跳至主要内容

Python 环境配置:权威指南

在本教程中,您将学习如何为 Python 开发设置计算机环境,并了解实现最佳应用生命周期的基础。
· 15分钟 阅读

使用 AI 探索

datacamp graphic

对于开发者而言,正确配置工作站能够显著提升开发体验。这包括安装与配置合适的工具,并设置各种有助于在软件创建过程中发挥最佳水平的便利设施。数据科学家也不例外,因此,拥有正确的环境配置对于打造从可视化工具到数据摄取流程等独特的软件作品至关重要。在本教程中,我们将讲解数据科学计算机环境的基础设置,不过这份指南同样适用于任何希望使用 Python 语言开发软件的人。让我们开始吧!

范围

Python 可用于多种操作系统。本教程将展示在 Linux Ubuntu 操作系统上的一些示例,但这些内容在其他类 UNIX 系统和 MAC OS 上也广泛适用。对于 MS Windows 系统,也存在一些细微差异,我们将在相关处加以说明。

Python:核心组件

要点:请使用官方网站提供的 Python3 实现

把 Python 解释器视为基于该语言进行应用开发的核心似乎不言自明。但在这一点上,您可能会在选择最佳 Python 解释器时犯难。此外,您可能听说过该语言的两个不同大版本,因此选择正确的版本和解释器是首先需要做出的重要决定。

Python、Anaconda、Jython、WinPython、IronPython……一笼“蛇”太多了

由于该语言的流行,解释器实现有很多。一些实现可以直接在您的计算机上安装,而另一些仍处于早期开发阶段,安装通常仅建议其开发者或勇敢的程序员尝试。官方 Python wiki 列出了部分可用的解释器,并指出了它们相较其他实现的特性。正如我们将在本教程中看到的,官方网站提供的 Python 发行版包含了开始编写 Python 程序所需的一切,不会错过其他实现提供的任何关键功能。

Python2 还是 Python3?该用哪个版本?

尽管 Python 3 已在十年前发布,从 Python 2 过渡到新版本并非易事。采用率较低的主要原因之一是语法差异,导致现有库无法在最新版本中使用。您在开发 Python 软件时会注意到,各类用途的库生态是该语言的一大优势。在此期间,2to3 和 six 等工具与库应运而生,帮助缩小已有软件与最新版之间的差距,简化迁移。撰写本教程时,绝大多数库都已能很好地支持 Python 3,因此此时选择版本并不复杂:用 Python 3。此外,到 2020 年,Python 2 的生命周期将结束。甚至有人计划在 PyCon 2020 上举办“生命庆典”派对,所以不妨加入他们,一起感谢 Python2 曾为您和您的软件所做的一切!

在您的计算机上安装 Python

Python 解释器在大多数操作系统上都可获得,部分系统还提供了便捷安装的软件包。对于 Ubuntu,Python2 和 Python3 在桌面环境中甚至会同时默认安装。请注意更改 python 别名,它仍指向 Python 2 而非 3;或者在您的 ~/.bashrc 文件中定义一个别名,如果您觉得有用。如上所述,预计在接下来的几年中将只保留一个 Python 版本。此时我的建议是安装最新版本的 Python。如果您的计算机已安装 Python3,请检查其版本是否高于 3.5。若安装的是更早版本,建议升级以享受该语言的最新特性。

$ python --version
Python 3.5.2

对于 Windows 用户,安装 Python 解释器同样很简单。官方下载页面提供了安装程序,几次点击即可完成解释器设置。

使用 pip 管理项目依赖

datacamp graphic

对于基础开发而言,安装好 Python 解释器就是开始写代码所需的一切。Python 软件包中包含了解释器,以及一些用于简化应用管理的工具。其中一款工具是 pip,它的目的是帮助您从 PyPI(Python 包索引)或其他公共/私有仓库安装第三方库。

我们的第一个 Python 项目:Jupyter Notebooks

来设想我们的第一个数据科学项目:一个 Jupyter 笔记本,用于整理数据并展示出色的可视化。要使用笔记本,首先需要的库是 Jupyter。在您的计算机上安装 Jupyter 非常简单:

$ pip install --user jupyter

请注意,--user 选项会将库安装给当前执行命令的用户。若要进行系统范围的安装,可以去掉该选项,但可能需要特权用户权限才能完成安装。除了安装之外,pip 命令还可用于下载库、查询当前配置、升级以及在不再需要时卸载库。下表列出了一些对于管理应用依赖非常有用的命令:

命令说明
pip install <package>安装软件包
pip install --user <package>为单个用户安装软件包
pip install --upgrade <package>更新软件包
pip uninstall <package>卸载软件包
pip download <package>下载软件包
pip freeze列出已安装的软件包
pip install -r requirements.txt安装 requirements.txt 文件中列出的软件包
pip show <package>显示关于软件包的信息

我们稍后将再次用到上述命令来管理项目依赖。当前,先把 pip 视为您的应用依赖管理器。最后但同样重要的是,需要了解 pip 命令不仅会安装您请求的库,也会安装其依赖项,因此无需处理复杂的安装流程。pip install 就是正确方式!

虚拟环境:隔离您的项目设置

datacamp graphic

设想在笔记本项目开发过程中,您发现了一个崭新的库,提供了一些功能,您想在将其纳入项目配置前先行尝试。该库要求安装与当前不同版本的 jupyter notebooks。此时您有如下选择:

  • 在不安装依赖的情况下安装新库。除非您修改其代码,否则该库很可能会异常。
  • 连同依赖一起安装新库。您的当前项目将受到影响,被迫升级项目配置并进行一些调整以符合预期。

上述场景在您同时处理两个项目时就可能发生。试想更复杂的情况:您可能同时处理多个项目,或拥有一组依赖同一库且不希望修改的 Python 应用。这将成为真正的头疼问题。幸运的是,Python 提供了一种机制,可将项目配置与其他项目或应用隔离开来。该机制称为虚拟环境。尽管它在 Python 2 时代就已存在(还伴随其他隔离机制),但自 3.6 版本起成为内置包(建议您安装该版本或更新版本!)。对于 3.6 之前的 Python 解释器,可使用 pip 如下安装:

$ pip install -U venv

对于使用 Python2 的用户(除非您选择升级),该库名为 virtualenv,安装方式相同。

$ pip install -U virtualenv

使用 Ubuntu 的开发者还可以通过系统软件包安装 virtualenv,使用 apt-get 如下:

$ sudo apt-get install python3-venv

创建新的虚拟环境很容易。在命令行中输入以下命令,即可在 new_venv 目录中创建一个新的虚拟环境。

$ python -m venv new_venv

建议您在工作区目录下运行上述命令。这样,您的源代码和应用所需库的虚拟环境都会集中在同一自包含目录中。创建完成后,通过加载 new_venv/bin/activate 下的 activate 脚本,即可开始在隔离模式下工作。

source new_venv/bin/activate
(new_venv) $ ...

Windows 用户需执行 Scripts 目录中的 activate 脚本。

new_venv/Scripts/activate
(new_venv) $ ...

请注意,加载虚拟环境后,命令提示符会发生变化,会在括号中显示虚拟环境名称。概览来看,虚拟环境包含如下要素:

  • 一个 python 解释器:与创建虚拟环境时使用的解释器相同。请注意,除非您修改了 python 的别名,否则需要显式使用 python3,或者在同时安装多个 Python3 版本时使用 python3.6。
  • Pip 包管理器。包管理器会将所有库安装在 lib/pythonX.Y/site/packages 目录中。python 解释器会使用该目录解析依赖。
  • 激活/停用脚本。它有助于加载项目环境,并在不再需要时恢复默认配置。成功加载虚拟环境后,您可以如下安装任意库:
$ pip install requests

该命令会将 requests 库安装在虚拟环境中,并可由虚拟环境目录 bin 文件夹内的 python 解释器加载。请注意,安装该库不需要特权用户权限。您可以通过 pip show 命令(pip show requests)检查安装情况,它会提供关于已安装库的详细信息。最后,当您停止当前项目工作时,可通过执行 deactivate 命令停用虚拟环境。

(new_venv) $ deactivate
$

如此简单、强大且实用。虚拟环境来帮忙!:D

提示:可以通过 sys.prefix 变量查看软件包的安装位置。试着在已加载的环境和默认配置下分别执行它。

>>> import sys
>>> print(sys.prefix)

项目脚手架:用 Cookiecutter 轻松搞定!

datacamp graphic

您和我们大多数人一样,都是从一个简单脚本(大概是 Hello World)开始开发 Python 应用的。因此,结合上述概念,可以得到如下工作区结构:

  • 一个包含我们工作区的目录,其中包含
  • 一个虚拟环境目录,以及
  • 一个包含 Hello World 应用的简单脚本。

尽管 Python 项目并不强制要求某种工作区结构,但建议对代码进行结构化管理,并配套测试套件及其他脚本或配置文件,以便覆盖完整的开发生命周期。最简形式下,一个 Python 工作区可以是:

$ tree -L 1
.
├── requirements.txt     ---> Project dependencies file
├── src                  ---> Source code goes here
├── tests                ---> Test code goes here
└── venv                 ---> Virtual environment files

我们在 pip 一节中已经提到过 requirements.txt 文件。该文件将包含项目依赖,可通过 pip freeze 命令生成。src 和 test 目录将分别存放业务逻辑和关联测试。venv 目录(通常使用该名称)存放虚拟环境配置。

更轻松地创建项目脚手架:Cookiecutter

虽然上述方式或许已够用,但随着您的开发技能提升,您可能希望使用包含更多工具的演进型脚手架,以简化开发流程。手动创建 Python 脚手架会很繁琐。更好的做法是维护一个参考项目的副本,并在复制后替换部分内容来创建新项目。尽管可行,但此法容易出错,如果忘了正确配置某些资源,可能导致不一致的情况。使用 cookiecutter 工具可以轻松创建新项目。该工具以项目模板为输入,在将文件名及其内容替换为一组用户输入参数后,保存模板副本。它由 Python 实现,可通过 pip 安装为库。

$ pip install -U cookiecutter

请记住,-U 选项会将工具安装在您的用户空间。您也可以省略它,但那样需要以 root(或 sudoer 用户)身份安装。该工具在 Ubuntu 上也可作为软件包,通过 apt-get 安装:

$ sudo apt-get install cookiecutter

最简单的使用方式如下调用 cookiecutter 工具:

$ cookiecutter <TEMPLATE_LOCATION>

模板位置既可以是本地路径,也可以是 GIT URL。对于希望维护并演进其项目工作区模板的开发者和组织而言,后者更为便利。

为了解 cookiecutter 的工作方式,可以查看一个示例 cookiecutter 项目。该项目以及任何其他 cookiecutter 项目的核心文件名为 cookiecutter.json,其中包含了用户为创建项目工作区所需指定的一组值。该文件采用 JSON 格式,包含一个键值对字典,其中的值为默认值,供用户跳过输入时使用。

{
    "full_name": "Steven Loria",
    "email": "[email protected]",
    "github_username": "sloria",
    "project_name": "My Flask App",
    "app_name": "myflaskapp",
    "project_short_description": "A flasky app.",
    "use_pipenv": ["no", "yes"]
}

根据输入值,cookiecutter 会替换模板中那些包含双花括号 {{...}} 的文件和目录名。

对于有意创建自有原型的人来说,基于 cookiecutter 项目开展工作是个好主意,并将开发应用所需的一切有价值内容放入其中。对于迫不及待想开始新项目的人,已有许多可用的 cookiecutter 项目,随时可以实例化。想寻找适合您需求的 cookiecutter?试试这个cookiecutter 搜索引擎!更棒的是,该工具不仅适用于 Python 项目脚手架,对其他类型项目同样通用!

融会贯通:项目开发生命周期

在介绍了包管理、虚拟环境和项目脚手架的概念之后,我们可以将它们结合起来,说明在完成本教程后如何设置您的计算机并开展工作:

  1. 使用 Python3 作为您的编码解释器。如果能使用 Python 3.6 更佳。
  2. 创建一个新项目,用于存放您的 Python 模块和依赖。
    • 使用 cookiecutter 和您选择的参考模板轻松创建新项目。
  3. 在应用文件夹内创建一个新的虚拟环境,准备好开始编写应用时将其激活。
  4. 编写您生涯中最棒的应用,并在需要时使用第三方库。
    • 别忘了使用 pip freeze 命令在 requirements.txt 文件中声明依赖。
  5. [可选] 将您的项目上传到 Git 等 CVS 系统。但不要上传虚拟环境的内容。正如下文所述,随时都可以重建它。

一旦代码和依赖文件就绪,您可以按如下方式轻松重建项目结构:

  1. 将代码和依赖文件复制到工作区文件夹(Git 用户可以克隆仓库)。
  2. 在应用文件夹内创建一个新的虚拟环境,并激活它以安装应用依赖。
  3. 使用 pip install -r requirements.txt 安装依赖。
  4. 在项目上持续改进或修复。别忘了使用 pip freeze 在 requirements 文件中注明新增的依赖。

在结束本教程前还有一件事。尽管我们没有提到任何可用于 Python 编码的 IDE,您可以自由选择并按需自定义。

祝您愉快地编写 Python!

如果您想进一步学习 Python,请参加 DataCamp 的免费课程 面向数据科学的 Python 入门。

主题