擴充和嵌入 Python 直譯器

這份說明文件描述如何在 C 或 C++ 中編寫模組,並使用新模組來擴充 Python 直譯器功能。那些模組可以做到 Python 程式碼能做的事──定義函式、物件型別及方法 (method)──但也能與原生函式庫互動,或藉由避免直譯器的額外負擔來達到更好的效能。文件內容也會描述如何將 Python 直譯器嵌入另一個應用程式中,做為一種擴充語言 (extension language) 使用。最後,它會展示如何編譯及連結擴充模組,使那些模組可以動態地(在執行環境)被載入到直譯器中,前提是底層作業系統有支援這個功能。

這份說明文件假設你具備 C 和 Python 的基礎知識。關於 Python 的非正式介紹,請參閱 Python 教學。Python 語言參考手冊給予此語言更為正式的定義。Python built-ins reference記錄了內建函式與物件型別,而 Python 標準函式庫 (Standard Library)則記錄了賦予此語言廣泛應用範圍的模組(包含內建模組與以 Python 撰寫的模組)。

關於完整的 Python/C API 詳細介紹,請參閱另外一份 Python/C API 參考手冊。

To support extensions, Python's C API (Application Programmers Interface) defines a set of functions, macros and variables that provide access to most aspects of the Python run-time system. The Python API is incorporated in a C source file by including the header "Python.h".

備註

C 擴充介面是 CPython 所特有的,擴充模組在其他 Python 實作上無法運作。在許多情況下,可以避免撰寫 C 擴充並保留對其他實作的可移植性。例如,如果你的用例是呼叫 C 函式庫函式或系統呼叫,你應該考慮使用 ctypes 模組或 cffi 函式庫,而不是編寫自訂的 C 程式碼。這些模組讓你可以撰寫 Python 程式碼來與 C 程式碼介接,而且比起撰寫和編譯 C 擴充模組,這些模組在 Python 實作之間更容易移植。

C API Tutorial

This tutorial describes how to write a simple module in C or C++, using the Python C API -- that is, using the basic tools provided as part of this version of CPython.

  1. Your first C API extension module

Guides for intermediate topics

本指南中的這一節將說明,在沒有第三方工具的協助下,如何建立 C 和 C ++ 擴充。它主要是寫給使用那些工具的創作者們,而不是讓你建立自己的 C 擴充的推薦方法。

在更大的應用程式中嵌入 CPython 運行環境 (runtime)

有時候,相較於建立一個擴充,使其在 Python 直譯器中可作為主應用程式運行,還不如將 CPython 運行環境嵌入至一個更大的應用程式中更可取。本節將涵蓋一些要成功完成此任務所涉及的細節。