哪个安装程序更好? Pip 或轻松安装

Python 最重要的优势之一是重用现有代码是多么容易。

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

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

历史

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

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

缺点

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

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

轮子

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

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

皮普的介绍

为了充分利用所有这些好处, installer 于 2008 年发布。这个包也取代了 easy_install(虽然仍然主要构建在 setuptools 之上)。 除了车轮具有的所有优点外,Pip 还具有许多其他令人满意的功能:

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

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

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

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

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

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

安装

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

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

用法

使用 Pip 安装包

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

 [[email protected] ~]$ 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 身份为机器上的每个用户安装程序,我们可以跳过这一步:

 [[email protected] ~]$ cat > $HOME/.pydistutils.cfg <<EOF  > [install]  > user=1  > EOF  Once that is set up, just run easy_install as normal.  [[email protected] ~]$ 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 仍然可以提供帮助。

如果您对此信息有任何疑问,我们随时可以回答与本文相关问题的任何询问,一年 365 天,一周 7 天,一天 24 小时。

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

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