介绍
在使用 Python 时,尤其是在应用程序开发领域,您会看到某些工具在各个地方或开源代码中经常被提及。 尽管非常常用,但不幸的是,有时很难获得一本好的手册来指导您完成每个步骤,这对于熟悉这些重要且需要的工具绝对至关重要。
在这篇 DigitalOcean 文章中,我们不仅要向您介绍基础知识,还要向您介绍流行的 Python 工具和项目背后的逻辑,因为我们将深入研究在现实生活场景中使用它们。 我们将从下载和安装一些常用库开始,设置和使用虚拟环境(使用 virtualenv),以及管理用于开发和生产您自己的应用程序的包。
本文面向初学者以及寻求获得更深入知识的人。 如果您想查看和了解更多信息,请随时在下面的评论部分提出建议。
CentOS 上的 Python
请记住,如果您使用的是 CentOS/RHEL 系统,则应避免使用操作系统附带的默认 Python 解释器。 相反,您应该选择自己安装 Python。
如果您还没有这样做并且想了解如何操作,请在开始之前查看我们的教程:如何在 CentOS 6.4 上设置 Python 2.7.6 和 3.3.3。
同样,为了在 CentOS 上使用自定义 Python 安装安装 pip 和 virtualenv,您可以按照该文章中的说明进行操作。
Python 和包
虽然 Python 应用程序可以由 单个 文件组成,但通常它们由一系列函数、对象(类)、方便的工具组成,当然还有分布在 多个 文件(s ),将 放置在 模块 中。 这些模块共同构成了所谓的 包。
安装包的传统方式包括首先发现它然后下载。 这听起来很简单,因为它实际上 是 就像 Python 中的许多东西一样 - 但它并不完美 。
当文件准备好并解压后,使用 distutils 模块,您可以通过调用 setup.py
来安装它:
安装包示例:
# Example: cd [package name] cd a_package python setup.py install
distutils(分发实用程序)是用于打包和分发代码的工具集。 它默认与 Python 一起提供(即 包含在 标准库 中)。
尽管上面解释的过程很简单,但如果从安装中抽象出来的挑战存在于过程中的其他地方是没有用的:查找和管理它们。 这就是通过工具进行包管理的地方 - 带来了一些好处,例如:
- 卸载(例如
pip uninstall package_x
), - 版本控制(例如
pip install django==x
), - 和自动依赖管理(因为包可以依赖于其他包)。
包管理
Python 中的包可以是工具、库、框架和应用程序。 鉴于该语言的流行度和美感,有数以万计的软件包可供您用于 您自己的项目 。
包管理工具
两个最常见的 Python 包管理器是 pip 和 easy_install。 它们都旨在帮助用户完成以下任务:
- 下载、安装和卸载
- 建造
- 管理 Python 包等等
从外部看,它们似乎都在做同样的事情,并且它们对公共库 setuptools 的共同依赖增加了这一概念。
然而,在这种情况下,它是隐藏在眼睛之外的东西 - 而且很多也是如此。
pip 与 easy_install
为该任务创建的第一个工具是 easy_install。 尽管与手动完成所有操作相比,使用它是一种解脱和乐趣,但随着时间的推移,它已被证明在某些方面存在问题。 这为开发另一个包管理器 pip 奠定了基础。
pip(由项目本身定义)是 easy_install 的替代品,它比其前身带来了许多好处,包括但不限于:
- 安装前下载所有内容
- 在此过程中提供有用的反馈
- 保存正在采取的行动的历史
- 按照 Python 传统提供有用的错误消息
- 补充 virtualenv 并很好地使用它 very
要了解有关 pip 的更多信息,请单击 此处 阅读位于 PyPI 包索引的介绍。
一个彻底的 pip 方法
在本节中,我们将讨论获取 pip 的必要依赖项,安装其最新版本,然后介绍提供的核心功能,例如 安装 、 卸载、冻结和管理要求。
我什么时候使用 pip?
正如在介绍中所承诺的,我们旨在为您提供现实生活场景的示例。
想象一下,您正在开发一个小型应用程序。 您已经为自己制定了路线图,并且一切进展顺利。 然后,您会发现一个库(或模块),如果您将其包含在您的应用程序中,它会对您有很大帮助。 您可以按照我们解释的传统方式下载它。 但是,一旦您需要处理的不仅仅是一个,而是 3 个、4 个甚至 20 个包,这个过程就会变得很麻烦。 包括管理它们(例如 更新、卸载、替换、使用不同的版本),您可以看到需要处理的问题,这些问题使用包管理器 pip 变得多余。
安装 pip
为了安装 pip,我们首先需要处理它的依赖关系。 不过不用担心,这很容易。
安装工具
如上所述,pip 的依赖项之一是 setuptools 库。 它建立在 Python 的 分发实用程序 工具集(称为 distutils)的(标准)功能之上。 鉴于默认提供 distils,我们只需要 setuptools。
我们将使用 curl
安全地下载 setuptools 的设置文件。 cURL 是一个系统库,它允许通过各种协议(即 用于应用程序之间数据交换的通用语言,例如 HTTP)。 它将从源验证 SSL 证书并将数据传递给 Python 解释器 。
这些 Python 解释器将要执行的设置文件会在我们的系统上设置最新的稳定版本时自动执行安装过程。
执行以下命令:
curl https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py | python -
此安装使我们能够在整个系统中全局使用 pip。 但是,这不是安装任何其他软件包的首选方式。 建议始终使用自包含的 Python 环境,virtualenv。 我们将在下一节中讨论它。
注意:您可能需要明确获得超级用户权限才能继续下载。 在这种情况下,请考虑使用:
curl https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py | sudo python -
在安装了它的单个依赖项之后,我们现在可以继续下载和设置 pip。
我们将再次使用 curl
来安全下载和安装安装文件。
执行以下命令:
curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python -
pip 的默认安装文件夹位于:
/usr/local/bin
为了在不说明完整路径的情况下使用它,必须将其附加到 PATH。
更新 PATH:
export PATH="/usr/local/bin:$PATH"
完成这一步后,我们就可以使用 pip 了。
使用 pip
使用 pip 真的很有趣,可以被认为是没有头疼的。 如果您过去处理过极其不必要的问题,甚至不明白为什么,pip 将确保在此将它们保持在最低限度。
使用 pip 安装包
pip 可以做很多事情,但说它最常用的功能是 安装包 也不会错。 它可以通过多种方式为您处理这项工作。
查找和安装软件包:
# Example: pip install [package name] # Let's install the excellent *requests* library pip install requests
查找并安装特定版本:
# Example: pip install [package name]==[version] # Let's install version 2.0.0. of requests pip install requests==2.0.0
从 URL 或 VCS 存储库安装:
# Example: pip install [url] # Let's install virtualenv pip install https://github.com/pypa/virtualenv/tarball/1.9.X
在 virtualenv 中安装:
# Example: pip install [env name] [package name] # This will either install inside an environment, or create one # Let's install requests inside a virtualenv called *venv* pip install -E venv requests
使用 pip 卸载软件包:
pip 的第二个最常用的功能可能是卸载包。
卸载软件包:
# Example: pip uninstall [package name] # Let's remove requests library pip uninstall requests
使用 pip 升级软件包
如果您正在考虑卸载以安装较新版本的应用程序,您可以尝试 升级 。
升级包:
# Example: pip install --upgrade [package name] # Let's upgrade requests library pip install --upgrade requests
使用 pip 搜索包
在决定删除或升级软件包之前,您可能会觉得需要先 搜索 找到一个。
搜索包:
# Example: pip search [package name] # Let's find all django packages # This might take a while (there's tonnes of them!) pip search django
使用 pip 创建已安装包的列表
pip 最真正卓越和拯救生命的能力之一是能够轻松创建 已安装 包的列表(“冻结”)。 这通常也称为 要求 。 根据您的 Python 环境(无论是虚拟环境还是全局环境),pip 将创建一个文件,列出使用单个命令安装的所有包。
创建一个新列表(“冻结”):
注: 该命令将输出当前工作目录下的文件。
# Example: pip freeze > [file name.ext] # Let's list all the packages currently installed pip freeze > package_list.txt
在模板之上创建一个列表(“冻结”):
注: 该命令将输出当前工作目录下的文件。
# Example: pip freeze -r [existing file.ext] > [filename.ext] # Let's append new packages installed after the last freeze pip freeze package_list.txt > package_list_new.txt
使用 *pip 从列表中安装所有软件包
当你在一个应用程序上工作时——最好是在虚拟环境中——你将在那里安装它的所有依赖项(必需的包)。 使用 freeze 提取它们的列表后,您可以使用 install 再次安装它们。
从列表中安装所有包(“冻结”):
# Example: pip install -r [file name.ext] # Let's install back all the packages from the previous example pip install -r package_list_new.txt
彻底的 virtualenv 方法
让我们从定义 virtualenv 到底是什么以及它派上用场的情况开始。
虚拟环境:
在 Python 世界中, 环境 是一个文件夹(目录),其中包含 Python 项目(应用程序)以有组织、独立的方式运行所需的一切。 当它启动时,它会自动附带自己的 Python 解释器——用于创建它的解释器的副本——以及它自己的 pip。
virtualenv 解决了许多问题:
- 为 Python 项目创建一个全新的隔离环境
- 无需管理员/sudo 权限即可下载软件包
- 轻松打包应用程序
- 创建属于使用 pip 创建的单个项目的依赖项列表
- 使用 pip 创建的需求文件轻松恢复依赖关系
- 让位于跨系统的可移植性
使用 virtualenv 是 ' 推荐的处理 Python 项目的方法,无论您可能忙于多少项目。 它非常易于使用,是您一次性使用的绝佳工具。 当与 pip 结合使用时,它确实会产生奇迹。
我们将从安装 virtualenv 系统开始。
安装虚拟环境
为了安装 virtualenv,我们将调用 pip 寻求帮助。 我们将把它安装为一个全局可用的包,供 Python 解释器运行。
申请有两种获取方式。 您将能够获得的版本取决于您选择的版本。
最简单的方法是使用 pip 搜索、下载和安装。 这可能 not 为您提供最新的稳定版本。
使用 pip 下载 virtualenv:
# Example: [sudo] pip install virtualenv sudo pip install virtualenv
使用 curl 下载最新可用的:
virtualenv 的最新版本是 1.11.X
。
# Example: [sudo] pip install [github repo]/[version] sudo pip install https://github.com/pypa/virtualenv/tarball/1.1.X
使用 virtualenv
使用这个工具包括让它创建一个文件夹,其中包含 Python 解释器和 pip 的副本。 之后,为了使用它,我们需要指定解释器的位置或 activate
它。
您在虚拟环境中使用解释器安装的所有应用程序都将位于该位置。
当您使用 pip 创建它们的列表时,只有文件夹内的那些会被编译成文件。
记住: 当你完成一个环境的工作后,在切换到另一个环境之前 - 或者使用全局安装的环境 - 你需要确保
deactivate
它。
创建/启动 虚拟环境 (virtualenv)
使用与运行环境相同的解释器创建环境:
# Example: virtualenv [folder (env.) name] # Let's create an environment called *my_app* virtualenv my_app
使用自定义 Python 解释器创建环境:
# Example: virtualenv --python=[loc/to/python/] [env. name] virtualenv --python=/opt/python-3.3/bin/python my_app
激活 虚拟环境
# Example: source [env. name]/bin/activate # Let's activate the Python environment we just created source my_app/bin/activate
使用 虚拟环境 无需激活
由于各种原因,您可能会选择在使用环境之前不激活它。 这为您运行的命令带来了更大的灵活性,但是,您需要确保每次都以正确的解释器为目标。
# Example: [env. name]/bin/python [arguments] my_app/bin/python python_script.py
在环境内使用pip安装无需激活
# Example: [env. name]/bin/pip [command] [arguements] # Let's install requests library without activating the env. my_app/bin/pip install requests
停用 虚拟环境 :
# Example: deactivate # Let's deactivate the environment from earlier deactivate