1

查看 Python 模块和 Python 框架中“lib-dnyload”目录中的代码,我注意到每当代码创建某种 GUI 或图形时,它都会导入一个扩展名为 .so 的非 Python 文件。“lib-dnyload”中有大量 .so 文件。

通过谷歌搜索,我发现这些文件被称为共享对象,并且是用 C 或 C++ 编写的。我有一台 Mac,我使用 GCC。如何制作可通过 Python 访问的共享对象文件?主要是如何使用 GCC 使用 Mac OS X 制作共享对象。

4

5 回答 5

4

官方 python 文档从简单的示例开始。已经足够开始了。

于 2010-04-09T19:54:24.607 回答
2

在我看来,最简单的方法是使用Cython。Cython 将为您生成一些 C 代码,将其编译为一个“.so”库,您可以从 python 加载该库。这是容易和无痛的。我建议您按照教程进行操作,您应该很快就会拥有一个 so 库。

如果您想了解 Python 的 C 扩展背后的所有细节,您应该深入了解有关 C 扩展的 Python 文档

于 2010-04-09T19:54:32.347 回答
2

使用 Python 构建和安装 C 扩展模块的标准方法是使用包含在标准 Python 库中的Distutils的功能。通常,这意味着在您的项目目录中包含 C 文件并创建一个配置文件,通常称为setup.py,以识别 C 源文件。setup.py通过在 Python 下运行正确配置的文件,Distutils将使用系统的 C 编译器和链接器来编译和链接 C 源文件。(在 OS X 上,您需要安装 Apple 的免费Xcode开发者工具,它会安装gcc. 这是一个简单的教程这应该足以让你开始。

为什么要使用 Distutilssetup.py而不是自己调用 gcc?几个原因:

  1. 由于 C 扩展通常在 Python 解释器本身的上下文中运行,因此以与解释器中的 C 代码兼容的方式编译和链接扩展非常重要。Distutils 试图通过为您正在执行的 Python 提供正确的选项来消除这种猜测。这在 OS X 上尤其重要,其中 Python 有各种风格,包括一些具有多架构可执行文件的各种组合(即-arch i386, -arch ppc, -arch x86_64, -arch ppc64)并支持多个 OS X 版本(即当前的 python.org OS X 安装程序是兼容的) OS X 10.4 到 10.6)。

  2. Distutils 允许您以独立于机器和操作系统的方式打包和分发纯 Python 和 C 扩展模块的组合。在许多情况下,如果编写 C 代码以避免依赖于操作系统的系统调用等,则可以在大多数当前 Python 平台上构建和安装 C 扩展而无需修改,也无需知道使用哪个 C 编译器或选项放。

  3. 您会发现几乎所有带有 C 代码的现代 Python 第三方包都以这种方式工作,因此最好从一开始就养成使用 Distutils 的习惯。

  4. setup.py正如您将在本教程中看到的,在许多情况下设置文件非常容易。

于 2010-04-10T05:14:19.600 回答
0

您可以通过多种方式编写 python 扩展,包括 Cython、SWIG、boost.python ......您还可以编写共享库并使用“ctypes”库来访问它。

于 2010-04-09T23:58:32.107 回答
0

有不同的方法可以做到这一点:

  • Python.hC在代码中使用标题。这会产生最快的代码。
  • 在 Python 标头周围使用包装器,例如SWIG。代码可能会慢一些,但您不需要或只需对 C/C++ 源代码进行少量更改。在大多数情况下,您只需要编写一个 SWIG 接口文件,并且共享对象与 Python/PHP/Java 等集成在一起。这是开始包装 C/C++ 代码的最简单方法。
  • 如果您更熟悉 Python 语言并希望避免以 C/C++ 样式编写 SWIG 接口文件, 那么 Cython是最适合您的包装器。
于 2010-04-10T06:14:43.520 回答