Python中静态链接和动态链接是什么意思?

15

我知道C或C++中静态链接和动态链接的区别。但在Python中意味着什么呢?由于它只是一个解释器,并且只有一种模块导入机制,这有什么意义呢?

如果我使用cx_freeze冻结我的Python应用程序并排除特定库,这是一种动态链接吗?因为用户必须自己下载和安装该库才能运行我的应用程序。

实际上,我的问题是,我正在使用PySide库(带有LGPL v2.1)开发Python GUI应用程序。该库说我应该动态链接到该库以遵守其法律条款(与Qt相同)。在这种情况下,我如何动态链接到PySide?


1
我认为任何你通常使用PySide的方式都算作动态链接,即使它是同一下载的一部分。如果你构建一个单文件exe(无论如何cx_Freeze都不会这样做),有些人可能会称之为静态链接,但我认为大多数人仍然不会这样说。放心使用吧 - 它是供人们构建Python应用程序的,所以如果你正在做这个,你可能没问题。 - Thomas K
谢谢Thomas。你的意思是,即使我使用pyinstaller或其他工具构建单个文件exe,它仍然是动态链接的吗?如果是这样,那么我可以继续使用一个简单的自述文件来说明从哪里下载pyside源代码。是这样吗? - Kaje
我认为大多数人会说这仍然是动态链接,你提出的应该没问题。如果你担心的话,可以向PySide邮件列表询问 - 他们的解释很重要。但是如果他们认为这还不够好,我会非常惊讶。 - Thomas K
谢谢Thomas。我会在pyside邮件列表中澄清并在这里回复。这对大多数Python开发人员很有用。 - Kaje
1个回答

4

在 Python 中,没有静态链接。所有的导入都需要目标机器上安装正确的依赖项。这些库的版本选择取决于我们的决策。

现在让我们来谈谈 Python 的二进制构建。在这种情况下,我们将根据 GNU 定义确定链接类型。如果用户可以自行更换依赖关系,则为动态链接;如果依赖关系与二进制文件本身一起附加,则为静态链接。在 cx_freeze 或 pyinstaller 的情况下,如果我们将其构建为一个文件,则为静态链接;如果我们以普通模式构建,其中所有依赖项都被收集为单独的文件,则为动态链接。核心思想是,我们是否可以在目标机器上替换依赖关系。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接