引入模組

PyObject *PyImport_ImportModule(const char *name)
回傳值:新的參照。穩定 ABI 的一部分.

這是 PyImport_Import() 的包裝器 (wrapper),它使用 const char* 作為引數,而不是 PyObject*

PyObject *PyImport_ImportModuleNoBlock(const char *name)
回傳值:新的參照。穩定 ABI 的一部分.

這個函式是 PyImport_ImportModule() 的已棄用別名。

在 3.3 版的變更: 當引入鎖被其他執行緒持有時,這個函式過去會立即失敗。但在 Python 3.3 中,鎖機制轉換成針對每個模組的鎖 (per-module lock) 來達到大多數目的,所以這個函式的特殊行為就不再需要了。

自從版本 3.13 後不推薦使用,將會自版本 3.15 中移除。: 請改用 PyImport_ImportModule()

PyObject *PyImport_ImportModuleEx(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist)
回傳值:新的參照。

引入一個模組。這最好透過參考 Python 內建函式 __import__() 來說明。

回傳值是對引入的模組或頂層套件的新參照,或者是 NULL,失敗時會設定例外。就像 __import__() 一樣,當要求一個套件的子模組時,回傳值通常是頂層套件,除非給定一個非空的 fromlist

失敗的引入會移除不完整的模組物件,就像 PyImport_ImportModule() 一樣。

PyObject *PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level)
回傳值:新的參照。穩定 ABI 的一部分 自 3.7 版本開始.

引入一個模組。這最好透過參考內建的 Python 函式 __import__() 來說明,因為標準的 __import__() 函式會直接呼叫這個函式。

回傳值是對引入的模組或頂層套件的新參照,或者是 NULL,失敗時會設定例外。就像 __import__() 一樣,當要求一個套件的子模組時,回傳值通常是頂層套件,除非給定一個非空的 fromlist

在 3.3 版被加入.

PyObject *PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level)
回傳值:新的參照。穩定 ABI 的一部分.

類似於 PyImport_ImportModuleLevelObject(),但名稱是 UTF-8 編碼字串,而不是 Unicode 物件。

在 3.3 版的變更: 不再接受負的 level 值。

PyObject *PyImport_Import(PyObject *name)
回傳值:新的參照。穩定 ABI 的一部分.

這是一個較高階的介面,用來呼叫目前的「引入掛勾函式 (import hook function)」(明確的 level 為 0,表示絕對引入 (absolute import))。它從目前全域變數的 __builtins__ 中呼叫 __import__() 函式。這表示引入是使用目前環境所安裝的引入掛勾來完成的。

此函式總是使用絕對引入。

PyObject *PyImport_ReloadModule(PyObject *m)
回傳值:新的參照。穩定 ABI 的一部分.

重新載入一個模組。回傳重新載入模組的新參照,或在失敗時回傳 NULL 並設定例外(在這種情況下模組仍然存在)。

PyObject *PyImport_AddModuleRef(const char *name)
回傳值:新的參照。穩定 ABI 的一部分 自 3.13 版本開始.

回傳與模組名稱對應的模組物件。

name 引數的形式可以是 package.module。首先檢查模組字典中是否有,如果沒有,則建立新的模組並插入模組字典中。

成功時回傳模組的強參照。失敗時回傳 NULL 並設定例外。

模組名稱 name 是以 UTF-8 解碼。

這個函式不會載入或引入模組;如果模組尚未載入,你將會得到一個空的模組物件。使用 PyImport_ImportModule() 或其變體來引入一個模組。如果尚未存在,則不會建立由 name 的點名稱 (dotted name) 所隱含的套件結構。

在 3.13 版被加入.

PyObject *PyImport_AddModuleObject(PyObject *name)
回傳值:借用參照。穩定 ABI 的一部分 自 3.7 版本開始.

類似於 PyImport_AddModuleRef(),但是會回傳一個借用參照name 為 Python 的 str 物件。

在 3.3 版被加入.

PyObject *PyImport_AddModule(const char *name)
回傳值:借用參照。穩定 ABI 的一部分.

類似於 PyImport_AddModuleRef(),但是會回傳一個借用參照

PyObject *PyImport_ExecCodeModule(const char *name, PyObject *co)
回傳值:新的參照。穩定 ABI 的一部分.

給定一個模組名稱(可能為 package.module 的形式),以及一個從 Python 位元組碼檔讀取或從內建函式 compile() 取得的程式碼物件,載入模組。回傳模組物件的新參照,如果發生錯誤,則回傳 NULL 並設定例外。在出錯的情況下,name 會從 sys.modules 中移除,即使 name 在進入 PyImport_ExecCodeModule() 時已經在 sys.modules 中。在 sys.modules 中留下未完全初始化的模組是很危險的,因為這種模組的引入無法知道模組物件處於未知狀態(且相對於模組作者的意圖,很可能已經損壞)。

如果尚未設定,模組的 __spec____loader__ 將會被設定為適當的值。規格的載入器將被設定為模組的 __loader__(如果有設定),否則將被設定為 SourceFileLoader 的實例。

模組的 __file__ 屬性將會設定為程式碼物件的 co_filename。如果適用,__cached__ 也會被設定。

如果模組已經被引入,這個函式會重新載入模組。請參閱 PyImport_ReloadModule() 以取得重新載入模組的預期方法。

如果 name 指向形式為 package.module 的點名稱,則任何尚未建立的套件結構仍不會被建立。

另請參閱 PyImport_ExecCodeModuleEx()PyImport_ExecCodeModuleWithPathnames()

在 3.12 版的變更: __cached____loader__ 的設定已被棄用。請參閱 ModuleSpec 以取得替代方案。

PyObject *PyImport_ExecCodeModuleEx(const char *name, PyObject *co, const char *pathname)
回傳值:新的參照。穩定 ABI 的一部分.

類似於 PyImport_ExecCodeModule(),但是如果 pathname 不是 NULL,模組物件的 __file__ 屬性會被設定為 pathname

另請參閱 PyImport_ExecCodeModuleWithPathnames()

PyObject *PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname, PyObject *cpathname)
回傳值:新的參照。穩定 ABI 的一部分 自 3.7 版本開始.

類似於 PyImport_ExecCodeModuleEx(),但是如果 cpathname 不是 NULL,模組物件的 __cached__ 屬性會被設定為 cpathname。在這三個函式中,這是首選的函式。

在 3.3 版被加入.

在 3.12 版的變更: 設定 __cached__ 已被棄用。請參閱 ModuleSpec 以取得替代方案。

PyObject *PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co, const char *pathname, const char *cpathname)
回傳值:新的參照。穩定 ABI 的一部分.

類似於 PyImport_ExecCodeModuleObject(),但是 namepathnamecpathname 是 UTF-8 編碼的字串。如果 pathname 被設定為 NULL,也會嘗試從 cpathname 中找出 pathname 的值應該是什麼。

在 3.2 版被加入.

在 3.3 版的變更: 如果只提供了位元組碼路徑,則在計算原始碼路徑時使用 imp.source_from_cache()

在 3.12 版的變更: 不再使用已被移除的 imp 模組。

long PyImport_GetMagicNumber()
穩定 ABI 的一部分.

回傳 Python 位元組碼檔案(也稱為 .pyc 檔案)的魔術數字(magic number)。魔術數字應該出現在位元組碼檔案的前四個位元組,以小端序(little-endian)位元組順序排列。錯誤時會回傳 -1

在 3.3 版的變更: 當失敗時回傳 -1

const char *PyImport_GetMagicTag()
穩定 ABI 的一部分.

回傳 PEP 3147 格式 Python 位元組碼檔名的魔術標籤字串。請記住,sys.implementation.cache_tag 的值是權威的,應該使用它來取代這個函式。

在 3.2 版被加入.

PyObject *PyImport_GetModuleDict()
回傳值:借用參照。穩定 ABI 的一部分.

回傳用於模組管理的字典(也稱為 sys.modules)。請注意,這是一個針對每個直譯器的變數 (per-interpreter variable)。

PyObject *PyImport_GetModule(PyObject *name)