哪个安装程序更好? Pip 或简易安装

Python 最显着的优势之一是重用现有代码非常容易。

  • 需要与服务器交谈? 只需导入请求!
  • 需要与 MySQL 数据库通信吗? 导入 mysql.connector 软件!
  • 需要飞? 只需导入反重力!

当然,这些软件包需要存在于您的服务器中,如果没有合适的工具,安装它们可能会出现问题。 幸运的是,这是 Python 开发人员投入大量时间调查和纠正的问题。

历史

这个问题的解决方案于 2004 年首次以一套工具的形式出现,称为 安装工具. 它是 Python 增强功能的集合,可以轻松打包和传播 Python 发行版,尤其是那些依赖于其他包的发行版。 setuptools 使用的原始格式是“鸡蛋”; 这是一个 ZIP 文件,其中添加了其他信息以帮助系统正确定位和分类。

为了管理这些包,setuptools 包括 简易安装,可以自动下载、构建、安装和管理 Python Eggs。

缺点

可悲的是,Python 鸡蛋有几个缺点:

  • 在给定目录中只能安装单个版本的包。 如果应用程序的不同部分需要同一包的不同版本,这尤其麻烦。
  • 它不支持完全卸载或升级。 删除文件是最常见的方法,但如果缺少任何列出的文件,它可能会变得一团糟。 主要问题在于 .egg_info 文件无法列出记录包元数据的已安装文件。
  • 使用 egg 通常需要修改 sys.path 变量来添加这个 egg 的位置。 反过来,每当发出命令时,这种修改都会减慢搜索速度。 只有当您有很多条目(大约一百个)时才会注意到这一点,虽然这不太可能,但在复杂的设置中肯定是可能的。

轮子

为了克服这些缺点,Python 社区同意了一个 新包装标准 称为 Wheels,类似于 Egg 文件。 但是,有一些显着的差异使其成为更好的选择:

  • 轮子是用来安装的,不是直接导入代码的。 这意味着代码本身在打包之前不需要编译。 这样,它就不会绑定到特定的 Python 版本的实现。 换句话说,您可以在当前安装中安装使用以前版本的 Python 构建的包。 这样,我们不必等待包的开发人员创建新版本。
  • 与此相关,Wheels 保留了用于包装的车轮规格版本。 这使得格式更具前瞻性,因为新版本可以确定哪些包应该被视为旧包。
  • Wheels 的命名约定使得可以查看包的来源和版本。 此信息快速确定当两个包发生冲突时要保留哪些数据。 为了 example,distribution-1.0-1-py27-none-any.whl 是名为“distribution”的包的第一个版本,并且与任何 Python 2.7 实现兼容。 不需要特定的 应用程序二进制接口在任何 CPU 架构上。
  • 最后,Python 轮子包含与鸡蛋相同的所有信息。 可以转换现有鸡蛋而不会丢失任何信息并从任何给定的轮子中提取鸡蛋。

点子介绍

为了利用所有这些好处, 安装程序于 2008 年发布。该软件包还取代了 easy_install(同时仍主要构建在 setuptools 之上)。 除了车轮所具有的所有优点外,Pip 还有许多其他理想的功能:

  • 覆盖你的包对它需要的不同包的特定版本的依赖的能力,使用 需求文件 — 向前兼容性的又一重大胜利。 这使得在部署应用程序时复制环境变得容易。
  • 使用 Pip 卸载命令卸载软件包的能力。 此外,使用 Pip list 命令列出已安装的软件包。 或者,如果您需要在需求格式中列出它们,请使用 Pip freeze。
  • Pip 还可以从 Python 软件的中央存储库 PyPI(Python 包索引)安装包。 这是一个方便的工具,可以让我们所有的包保持最新和同步。
  • Pip 的另一个显着优势是它可以默认以普通用户身份安装文件,而无需升级到 root。 这既是总体上的安全改进,也是在共享主机中安装软件包时的便利,其中 root 访问可能不可用。

那么,我应该使用哪个安装程序?

在大多数情况下,除非您确切知道自己在做什么以及为什么,否则您会想要使用 Pip。 easy_install 是更好选择的特定情况很少见。 您很可能已经知道是否需要使用 easy_install,但这些情况肯定存在。

首先,当您需要安装仅作为鸡蛋提供的软件包时,您别无选择,只能使用 easy_install。

easy_install 的另一个用例是使用外部启动器(例如 启动器) 来启动脚本。 当使用 SETUPTOOLS_LAUNCHER 环境变量配置时,easy_install 将安装附加了 .pya 扩展名的脚本,以便可以通过双击启动它们,类似于任何其他可执行文件。

Easy_install 还允许我们在安装过程中使用 –exclude-scripts 标志排除单个脚本。 如果您需要安装包的多个版本同时保留早期脚本版本,则此标志很有用。

安装

过去,我们必须使用 setuptools 安装 Pip。 如今,情况并非如此——大多数安装 Python 的环境已经附带了 Pip 的副本。 但是,如果没有(并且您的系统包管理器也不提供副本),您可以 运行一个简单的脚本 设置它。

Setuptools(包括安装)通常也是 通过 Pip 安装,通过可下载的软件包,如果您需要手动安装它们。

用法

使用 Pip 安装包

让我们快速回顾一下如何使用这些包分发工具。 一旦您知道要安装的包的名称,使用 Pip 就非常容易。 只需运行 pip install package_name 即可使包可用于导入。 在这种情况下,我们将安装 枕头,一个流行的 Python 图像库。

 [user@host ~]$ pip install Pillow
 Defaulting to user installation because normal site-packages is not writeable
 Collecting Pillow
   Downloading Pillow-8.0.1-cp38-cp38-manylinux1_x86_64.whl (2.2 MB)
   |████████████████████████████████| 2.2 MB 1.5 MB/s
 Installing collected packages: Pillow
 Successfully installed Pillow-8.0.1 

请注意 Pip 如何自动找到适合我们系统的轮文件,在本例中为 Pillow-8.0.1-cp38-cp38-manylinux1_x86_64.whl。 它还检测到我们以普通用户而不是 root 用户身份运行它,并仅为该用户安装了 Pillow。

使用 Easy_Install 安装软件包

要以用户身份安装 easy_install 包,我们首先需要在 /home/user/.pydistutils.cfg 中设置一个配置文件。 如果我们要为机器上的每个用户以 root 身份安装程序,我们可以跳过这一步:

 [user@host ~]$ cat > $HOME/.pydistutils.cfg <<EOF
 > [install]
 > user=1
 > EOF
 Once that is set up, just run easy_install as normal.
 [user@host ~]$ easy_install Pillow
 WARNING: The easy_install command is deprecated and will be removed in a future version.
 Searching for Pillow
 Reading https://pypi.org/simple/Pillow/
 Downloading https://files.pythonhosted.org/packages/[...]
 Best match: Pillow 8.0.1
 Processing Pillow-8.0.1-cp38-cp38-manylinux1_x86_64.whl
 Installing Pillow-8.0.1-cp38-cp38-manylinux1_x86_64.whl to /home/user/.local/lib/python3.8/site-packages
 Adding Pillow 8.0.1 to easy-install.pth file
 Installed /home/user/.local/lib/python3.8/site-packages/Pillow-8.0.1-py3.8-linux-x86_64.egg
 Processing dependencies for Pillow
 Finished processing dependencies for Pillow 

输出更详细,但它告诉我们一些重要的事情。 首先,easy_install 已经被弃用,支持 Pip,所以我们应该尽可能使用 Pip。 其次,我们可以看到,虽然只有 Wheel (.whl) 包可用,但它仍然包含创建 easy_install 所需的 .egg 格式包的所有必要信息。

结论

虽然过去选择更加困难,但现在这个想法很明显; Pip 应该是我们的首选解决方案。 它被明确设计为尽可能多地完成设置工作。 但是,在您的设置明确需要它的极少数情况下,或者当安装包的唯一可用选项是 .egg 文件时,easy_install 仍然可以提供帮助。

如果您对此信息有任何疑问,我们将随时为您解答与本文相关问题的任何询问,每天 24 小时、每周 7 天、每年 365 天。

给我们打电话 800.580.4985,或打开 聊天 或与我们联系,与我们知识渊博的解决方案或经验丰富的托管顾问之一交谈,了解您今天如何利用这些技术!

如果您是完全托管的 VPS 服务器, Cloud 专用,VMWare 私有 Cloud私有父服务器, 托管 Cloud 服务器或专用服务器所有者,并且您对执行概述的任何步骤感到不舒服,我们可以为您提供更多信息。