Experimental feature in GraalVM

原生擴充功能支援

CPython 提供一個 原生擴充功能 API,用於以 C/C++ 撰寫 Python 擴充功能。GraalPy 為此 API 提供實驗性支援,這讓許多像是 NumPy 和 PyTorch 的套件在許多使用案例中都能良好運作。此支援僅擴展至 API,而非二進位介面 (ABI),因此為 CPython 建置的擴充功能與 GraalPy 並不具備二進位相容性。使用原生 API 的套件必須使用 GraalPy 建置和安裝,而無法使用來自 pypi.org 預先建置的 CPython 輪子。為了獲得最佳結果,請務必僅使用 GraalPy 虛擬環境中預先安裝的 pip 命令來安裝套件。GraalPy 隨附的 pip 版本會在安裝時對套件套用額外的修補程式,以修復已知的相容性問題,並且預先設定為使用來自 graalvm.org 的額外儲存庫,我們會在其中發佈一系列預先建置的 GraalPy 輪子。請勿更新 pip 或使用像是 uv 的替代工具。

嵌入限制 #

Python 原生擴充功能預設以原生二進位檔執行,可以完全存取底層系統。原生程式碼未沙箱化,可以規避 Truffle 或 JVM 可能提供的任何保護措施,甚至包括中止整個程序。原生資料結構不受 Java GC 的約束,並且將它們與 Java 資料結構組合可能會導致記憶體洩漏。原生程式庫通常無法在同一個程序中多次載入,而且它們可能包含無法安全重設的全域狀態。因此,無法在同一個 JVM 中建立多個存取原生模組的 GraalPy 內容。這包括建立內容、關閉它,然後建立另一個內容的情況。第二個內容將無法存取原生擴充功能。

與我們聯繫