引入模組

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

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

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

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

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

Deprecated since version 3.13, will be removed in version 3.15:請改用PyImport_ImportModule()

PyObject*PyImport_ImportModuleEx(constchar*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,intlevel)
回傳值:新的參照。穩定 ABI 的一部分 自 3.7 版本開始.

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

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

在 3.3 版被加入.

PyObject*PyImport_ImportModuleLevel(constchar*name,PyObject*globals,PyObject*locals,PyObject*fromlist,intlevel)
回傳值:新的參照。穩定 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(constchar*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(constchar*name)
回傳值:借用參照。穩定 ABI 的一部分.

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

PyObject*PyImport_ExecCodeModule(constchar*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(constchar*name,PyObject*co,constchar*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(constchar*name,PyObject*co,constchar*pathname,constchar*cpathname)
回傳值:新的參照。穩定 ABI 的一部分.

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

在 3.2 版被加入.

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

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

longPyImport_GetMagicNumber()
穩定 ABI 的一部分.

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

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

constchar*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)
回傳值:新的參照。穩定 ABI 的一部分 自 3.8 版本開始.

回傳已以給定名稱引入的模組。如果模組尚未引入,則會回傳NULL 但不會設定錯誤。如果查找失敗,則回傳NULL 並設定錯誤。

在 3.7 版被加入.

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

回傳sys.path/pkg.__path__path 的查找器物件 (finder object),可能的方式是從sys.path_importer_cache 字典取得。如果它還沒有被快取,就遍歷sys.path_hooks 直到找到可以處理路徑項的掛勾。如果沒有掛勾可以處理,則回傳None;這會告訴我們的呼叫者path based finder 找不到這個路徑項的查找器。將結果快取到sys.path_importer_cache。回傳查找器物件的新參照。

intPyImport_ImportFrozenModuleObject(PyObject*name)
穩定 ABI 的一部分 自 3.7 版本開始.

載入一個名為name 的凍結模組。成功則回傳1,找不到模組則回傳0,初始化失敗則回傳-1 並設定例外。要在成功載入時存取引入的模組,請使用PyImport_ImportModule()。(請注意這個名稱並不恰當 --- 如果模組已經被引入,這個函式會重新載入模組)。

在 3.3 版被加入.

在 3.4 版的變更:不會再於模組設定__file__ 屬性。

intPyImport_ImportFrozenModule(constchar*name)
穩定 ABI 的一部分.

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

struct_frozen

這是由freeze 工具程式產生的凍結模組描述器的結構型別定義(請參閱 Python 原始碼發行版中的Tools/freeze/)。它的定義在Include/import.h 中,為:

struct_frozen{constchar*name;constunsignedchar*code;intsize;boolis_package;};

在 3.11 版的變更:新的is_package 欄位指出模組是否為套件。這取代了將size 欄位設定為負值的方式。

conststruct_frozen*PyImport_FrozenModules

這個指標會被初始化為指向一個_frozen 記錄的陣列,以一個其成員都是NULL 或 0 的記錄為結尾。當一個凍結的模組被引入時,它會在這個表格中被搜尋。第三方程式碼可以利用這一點來提供一個動態建立的凍結模組集合。

intPyImport_AppendInittab(constchar*name,PyObject*(*initfunc)(void))
穩定 ABI 的一部分.

新增單一模組到現有的內建模組表格。這是PyImport_ExtendInittab() 的便利包裝器,如果表格無法擴充會回傳-1。新的模組可以用name 的名稱引入,並使用函式initfunc 作為第一次嘗試引入時呼叫的初始化函式。這應該在Py_Initialize() 之前呼叫。

struct_inittab

描述內建模組列表中單一項目的結構。嵌入 Python 的程式可以使用這些結構的陣列與PyImport_ExtendInittab() 結合來提供額外的內建模組。這個結構包含兩個成員:

constchar*name

模組名稱,為 ASCII 編碼的字串。

PyObject*(*initfunc)(void)

內建於直譯器中的模組的初始化函式。

intPyImport_ExtendInittab(struct_inittab*newtab)

新增一個模組集合到內建模組表格。newtab 陣列必須以包含NULLname 欄位的哨兵項目(sentinel entry)結尾;如果沒有提供哨兵值,可能會導致記憶體錯誤。成功時會回傳0,如果沒有足夠的記憶體可以分配來擴充內部表格則回傳-1。在失敗的情況下,沒有模組會被加入內部表格。這個函式必須在Py_Initialize() 之前呼叫。

如果 Python 被多次初始化,PyImport_AppendInittab()PyImport_ExtendInittab() 必須在每次 Python 初始化之前被呼叫。

PyObject*PyImport_ImportModuleAttr(PyObject*mod_name,PyObject*attr_name)
回傳值:新的參照。

引入模組mod_name 並取得其屬性attr_name

名稱必須是 Pythonstr 物件。

結合PyImport_Import()PyObject_GetAttr() 的輔助函式。例如,如果找不到模組,它會引發ImportError,如果屬性不存在,則會引發AttributeError

在 3.14 版被加入.

PyObject*PyImport_ImportModuleAttrString(constchar*mod_name,constchar*attr_name)
回傳值:新的參照。

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

在 3.14 版被加入.