擴充和嵌入 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 實作之間更容易移植。
推薦的第三方工具¶
這份文件僅涵蓋了此 CPython 版本所提供的、用以建立擴充的基本工具。有一些第三方工具,提供了更為簡單及更為複雜的多種方法,來為 Python 建立 C 和 C++ 擴充。
While this document is aimed at extension authors, it should also be helpful to the authors of such tools. For example, the tutorial module can serve as a simple test case for a build tool or sample expected output of a code generator.
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.
Guides for intermediate topics¶
本指南中的這一節將說明,在沒有第三方工具的協助下,如何建立 C 和 C ++ 擴充。它主要是寫給使用那些工具的創作者們,而不是讓你建立自己的 C 擴充的推薦方法。
在更大的應用程式中嵌入 CPython 運行環境 (runtime)¶
有時候,相較於建立一個擴充,使其在 Python 直譯器中可作為主應用程式運行,還不如將 CPython 運行環境嵌入至一個更大的應用程式中更可取。本節將涵蓋一些要成功完成此任務所涉及的細節。