【问题标题】:What does it mean for statically linking and dynamically linking in Python?Python中的静态链接和动态链接是什么意思?
【发布时间】:2015-08-26 12:35:25
【问题描述】:

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

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

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

【问题讨论】:

  • 我认为您通常使用 PySide 的任何方式都算作动态链接,即使它是同一下载的一部分。如果您构建单个文件 exe(cx_Freeze 无论如何都不会这样做),有些人可能会称其为静态链接,但我认为大多数人仍然不会。继续使用它 - 人们可以使用它来构建 Python 应用程序,所以如果你正在这样做,你可能没问题。
  • 谢谢托马斯。你的意思是,即使我构建了单个文件 exe(使用 pyinstaller 或任何东西),它仍然是动态链接吗?如果那时我可以继续使用一个简单的自述文件来说明在哪里下载 pyside 源。是吗?
  • 我想大多数人会说这仍然是动态链接,你提出的应该没问题。如果您担心,请向PySide mailing list 询问——重要的是他们的解释。但如果他们认为这还不够好,我会感到非常惊讶。
  • 谢谢托马斯。我将清除那些有 pyside 邮件列表的人并在此处回复。它对大多数 Python 开发者都有用。

标签: python qt pyside cx-freeze


【解决方案1】:

在 python 中没有静态链接。所有导入都需要在我们的目标机器上安装正确的依赖项。此类库的版本选择由我们决定。

现在让我们来看看 python 的二进制构建器。在这种情况下,我们必须根据 GNU 定义来确定链接类型。如果用户可以随意替换依赖,它就是动态的。如果依赖项与二进制文件本身一起附加,则它是静态链接。在 cx_freeze 或 pyinstaller 的情况下,如果我们将其构建为一个文件,则它是静态链接。如果我们在所有依赖项都作为单独文件收集的正常模式下构建它,它就是动态链接。想法是,我们是否可以替换目标机器中的依赖关系。

【讨论】:

    猜你喜欢
    • 2010-09-23
    • 2011-05-14
    • 2011-03-16
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 2021-10-22
    相关资源
    最近更新 更多