9

这可能是一个有一个非常简单直接的答案的问题,然而,尽管有几年的编程经验,出于某种原因,我仍然不太了解“构建”然后“安装”意味着什么的确切概念”。我知道如何使用它们并且经常使用它们,但不知道后台发生的确切过程......

我浏览了网络、维基百科等……但没有一个简单的答案,我也找不到这里。

我试图理解的一个很好的例子是向 python 添加新模块:http: //docs.python.org/2/install/index.html#how-installation-works

它说“构建命令负责将要安装的文件放入构建目录”

然后对于安装命令:“在构建命令运行之后(无论是显式运行,还是安装命令为您执行),安装命令的工作相对简单:它所要做的就是复制构建下的所有内容/lib(或 build/lib.plat)到您选择的安装目录。”

所以基本上这就是说: 1. 将所有内容复制到构建目录,然后... 2. 将所有内容复制到安装目录

解释中的某处必须缺少一个过程......编译?

希望得到一些简单的不太技术性的答案,但尽可能详细:)

希望我不是唯一一个不知道这个详细答案的人......

谢谢!

艾沃里克

4

3 回答 3

10

构建意味着在沙箱位置将源代码编译为二进制文件,如果出现问题,它不会影响您的系统,例如build源代码目录中的子目录。

安装意味着将构建的二进制文件从build子目录复制到系统路径中的某个位置,以便轻松访问它们。这很少通过直接复制命令完成,并且通常由一些可以跟踪创建的文件并在以后轻松卸载它们的包管理器完成。

通常,构建命令会完成所需的所有编译和链接,但 Python 是一种解释型语言,因此如果库中只有纯 Python 文件,则构建中没有编译步骤。实际上,所有内容都被复制到构建目录,然后再次复制到最终位置。只有当库依赖于需要编译的其他语言编写的代码时,您才会有一个编译步骤。

于 2013-11-10T20:51:55.657 回答
8

你想为你的客厅换一把新椅子,你想自己做。您浏览目录并订购一堆零件。当它们到达您的门口时,您不能立即使用它们。你必须在你的工作室建造椅子。涂了一点肘部润滑脂后,您可以在里面坐下。之后,您将椅子安装在客厅的一个方便坐下的地方。

椅子是您要使用的程序。它作为源代码到达你家。您可以通过将其编译为可运行的程序来构建它。您可以通过使其更易于使用来安装它。

于 2013-11-12T05:00:11.340 回答
2

您所指的构建和安装命令来自 setup.py 文件,对吗?

Setup.py ( http://docs.python.org/2/distutils/setupscript.html )

该文件由 Python 的 3rd 方应用程序/扩展创建。它们不属于:

  1. Python 源代码(一堆 c 文件等)
  2. 与 Python 捆绑在一起的 Python 库

当开发人员为 python 创建一个他想与世界共享的库时,他会创建一个 setup.py 文件,以便该库可以安装在任何具有 python 的计算机上。也许这是缺少的一步

安装程序.py sdist

这将创建一个 python 模块(tar.gz 文件)。这样做是将python库使用的所有文件复制到一个文件夹中。为模块创建一个 setup.py 文件并将所有内容存档,以便可以在其他地方构建库。

Setup.py 构建

这会将 python 模块重新构建到一个库中(特别是对于这个操作系统)。

您可能知道,python 库最初来自的计算机与您正在安装的库不同。

  1. 它可能有不同版本的python
  2. 它可能有不同的操作系统
  3. 它可能有不同的处理器/主板/等

由于上面列出的所有原因,该代码将无法在另一台计算机上运行。因此,setup.py sdist创建一个模块,其中仅包含在另一台计算机上重建库所需的源文件。

setup.py 所做的与 makefile 所做的完全相同。它编译源代码/创建所有这些东西的库。

现在我们在库中拥有了我们需要的所有文件的副本,它们将在我们的计算机/操作系统上运行。

安装程序.py 安装

太好了,我们拥有所需的所有文件。但他们不会工作。为什么?好吧,它们必须被添加到 Python 中,这就是原因。这就是 install 的用武之地。现在我们有了库的本地副本,我们需要将其安装到 python 中,这样您就可以像这样使用它:

import mycustomlibrary

为了做到这一点,我们需要做几件事,包括:

  1. 在我们的 python 版本中将文件复制到它们的库文件夹中。
  2. 确保可以使用import命令导入库
  3. 运行此库的任何特殊安装说明。(设置路径等)

这是任务中最复杂的部分。如果我们的库使用 BeautifulSoup 会怎样?这不是 Python 库的一部分。我们必须以一种方式安装它,以便我们的库和其他任何人都可以使用 BeautifulSoup 而不会相互干扰。

另外,如果 python 安装在其他地方怎么办?如果它安装在有很多用户的服务器上怎么办?

安装透明地处理所有这些问题。所做的是使我们刚刚构建的库能够运行。您所要做的就是使用import命令,安装处理其余的。

于 2013-11-17T12:20:23.827 回答