Nhập mô-đun¶
-
PyObject *PyImport_ImportModule(const char *name)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.
Đây là một trình bao bọc xung quanh
PyImport_Import(), lấy const char* làm đối số thay vì PyObject*.
-
PyObject *PyImport_ImportModuleNoBlock(const char *name)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.
Hàm này là bí danh không được dùng nữa của
PyImport_ImportModule().Thay đổi trong phiên bản 3.3: Chức năng này từng bị lỗi ngay lập tức khi khóa nhập được giữ bởi một luồng khác. Tuy nhiên, trong Python 3.3, sơ đồ khóa đã chuyển sang khóa trên mỗi mô-đun cho hầu hết các mục đích, vì vậy hành vi đặc biệt của hàm này không còn cần thiết nữa.
Không được dùng nữa kể từ phiên bản 3.13, sẽ bị xóa trong phiên bản 3.15: Thay vào đó hãy sử dụng
PyImport_ImportModule().
-
PyObject *PyImport_ImportModuleEx(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist)¶
- Giá trị trả về: Tham chiếu mới.
Nhập một mô-đun. Điều này được mô tả tốt nhất bằng cách tham khảo hàm Python tích hợp
__import__().Giá trị trả về là tham chiếu mới cho mô-đun đã nhập hoặc gói cấp cao nhất hoặc
NULLvới ngoại lệ được đặt là lỗi. Giống như đối với__import__(), giá trị trả về khi mô-đun con của gói được yêu cầu thường là gói cấp cao nhất, trừ khi được cung cấp fromlist không trống.Việc nhập không thành công sẽ loại bỏ các đối tượng mô-đun không đầy đủ, như với
PyImport_ImportModule().
-
PyObject *PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định kể từ phiên bản 3.7.
Nhập một mô-đun. Điều này được mô tả tốt nhất bằng cách tham khảo hàm Python tích hợp
__import__(), vì hàm__import__()tiêu chuẩn gọi trực tiếp hàm này.Giá trị trả về là tham chiếu mới cho mô-đun đã nhập hoặc gói cấp cao nhất hoặc
NULLvới ngoại lệ được đặt là lỗi. Giống như đối với__import__(), giá trị trả về khi mô-đun con của gói được yêu cầu thường là gói cấp cao nhất, trừ khi được cung cấp fromlist không trống.Added in version 3.3.
-
PyObject *PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.
Tương tự như
PyImport_ImportModuleLevelObject(), nhưng tên là chuỗi được mã hóa UTF-8 thay vì đối tượng Unicode.Thay đổi trong phiên bản 3.3: Các giá trị âm cho level không còn được chấp nhận.
-
PyObject *PyImport_Import(PyObject *name)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.
Đây là giao diện cấp cao hơn gọi "hàm hook nhập" hiện tại (với level rõ ràng bằng 0, nghĩa là nhập tuyệt đối). Nó gọi hàm
__import__()từ__builtins__của toàn cầu hiện tại. Điều này có nghĩa là quá trình nhập được thực hiện bằng cách sử dụng bất kỳ móc nhập nào được cài đặt trong môi trường hiện tại.Hàm này luôn sử dụng nhập khẩu tuyệt đối.
-
PyObject *PyImport_ReloadModule(PyObject *m)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.
Tải lại một mô-đun. Trả về một tham chiếu mới cho mô-đun được tải lại hoặc
NULLvới ngoại lệ được đặt là lỗi (mô-đun vẫn tồn tại trong trường hợp này).
-
PyObject *PyImport_AddModuleRef(const char *name)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định kể từ phiên bản 3.13.
Trả về đối tượng mô-đun tương ứng với tên mô-đun.
Đối số name có thể có dạng
package.module. Trước tiên, hãy kiểm tra từ điển mô-đun nếu có từ điển mô-đun, nếu không, hãy tạo một từ điển mới và chèn nó vào từ điển mô-đun.Trả lại strong reference cho mô-đun thành công. Trả về
NULLvới ngoại lệ được đặt là lỗi.Tên mô-đun name được giải mã từ UTF-8.
Chức năng này không tải hoặc nhập mô-đun; nếu mô-đun chưa được tải, bạn sẽ nhận được một đối tượng mô-đun trống. Sử dụng
PyImport_ImportModule()hoặc một trong các biến thể của nó để nhập mô-đun. Cấu trúc gói được ngụ ý bằng tên chấm cho name sẽ không được tạo nếu chưa có.Added in version 3.13.
-
PyObject *PyImport_AddModuleObject(PyObject *name)¶
- Giá trị trả về: Tham chiếu mượn. Một phần của ABI ổn định kể từ phiên bản 3.7.
Tương tự như
PyImport_AddModuleRef(), nhưng trả về borrowed reference và name là đối tượngstrcủa Python.Added in version 3.3.
-
PyObject *PyImport_AddModule(const char *name)¶
- Giá trị trả về: Tham chiếu mượn. Một phần của ABI ổn định.
Tương tự như
PyImport_AddModuleRef()nhưng trả về borrowed reference.
-
PyObject *PyImport_ExecCodeModule(const char *name, PyObject *co)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.
Cho một tên mô-đun (có thể có dạng
package.module) và một đối tượng mã được đọc từ tệp mã byte Python hoặc thu được từ hàmcompile()tích hợp, hãy tải mô-đun. Trả về một tham chiếu mới cho đối tượng mô-đun hoặcNULLvới một ngoại lệ được đặt nếu xảy ra lỗi. name bị xóa khỏisys.modulestrong trường hợp lỗi, ngay cả khi name đã có trongsys.moduleskhi truy cậpPyImport_ExecCodeModule(). Việc để lại các mô-đun được khởi tạo không đầy đủ trongsys.moduleslà rất nguy hiểm, vì việc nhập các mô-đun như vậy không có cách nào để biết rằng đối tượng mô-đun là trạng thái không xác định (và có thể bị hỏng đối với ý định của tác giả mô-đun).__spec__và__loader__của mô-đun sẽ được đặt, nếu chưa được đặt, với các giá trị thích hợp. Trình tải của thông số kỹ thuật sẽ được đặt thành__loader__của mô-đun (nếu được đặt) và thành phiên bảnSourceFileLoadernếu không.Thuộc tính
__file__của mô-đun sẽ được đặt thànhco_filenamecủa đối tượng mã. Nếu có thể,__cached__cũng sẽ được đặt.Chức năng này sẽ tải lại mô-đun nếu nó đã được nhập. Xem
PyImport_ReloadModule()để biết cách tải lại mô-đun dự kiến.Nếu name trỏ đến tên có dấu chấm có dạng
package.module, mọi cấu trúc gói chưa được tạo sẽ vẫn không được tạo.Xem thêm
PyImport_ExecCodeModuleEx()vàPyImport_ExecCodeModuleWithPathnames().Thay đổi trong phiên bản 3.12: Cài đặt
__cached__và__loader__không được dùng nữa. XemModuleSpecđể biết các lựa chọn thay thế.
-
PyObject *PyImport_ExecCodeModuleEx(const char *name, PyObject *co, const char *pathname)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.
Giống như
PyImport_ExecCodeModule(), nhưng thuộc tính__file__của đối tượng mô-đun được đặt thành pathname nếu nó không phải làNULL.Xem thêm
PyImport_ExecCodeModuleWithPathnames().
-
PyObject *PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname, PyObject *cpathname)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định kể từ phiên bản 3.7.
Giống như
PyImport_ExecCodeModuleEx(), nhưng thuộc tính__cached__của đối tượng mô-đun được đặt thành cpathname nếu nó không phải làNULL. Trong ba chức năng, đây là chức năng được ưu tiên sử dụng nhất.Added in version 3.3.
Thay đổi trong phiên bản 3.12: Cài đặt
__cached__không được dùng nữa. XemModuleSpecđể biết các lựa chọn thay thế.
-
PyObject *PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co, const char *pathname, const char *cpathname)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.
Giống như
PyImport_ExecCodeModuleObject(), nhưng name, pathname và cpathname là các chuỗi được mã hóa UTF-8. Các nỗ lực cũng được thực hiện để tìm ra giá trị của pathname sẽ là bao nhiêu từ cpathname nếu giá trị trước được đặt thànhNULL.Added in version 3.2.
Thay đổi trong phiên bản 3.3: Sử dụng
imp.source_from_cache()để tính toán đường dẫn nguồn nếu chỉ cung cấp đường dẫn mã byte.Thay đổi trong phiên bản 3.12: Không còn sử dụng mô-đun
impđã bị loại bỏ.
-
long PyImport_GetMagicNumber()¶
- Một phần của ABI ổn định.
Trả về số ma thuật cho các tệp mã byte Python (còn gọi là tệp
.pyc). Số ma thuật phải xuất hiện trong bốn byte đầu tiên của tệp mã byte, theo thứ tự byte cuối nhỏ. Trả về-1do lỗi.Thay đổi trong phiên bản 3.3: Giá trị trả về của
-1khi thất bại.
-
const char *PyImport_GetMagicTag()¶
- Một phần của ABI ổn định.
Trả về chuỗi thẻ ma thuật cho tên tệp mã byte Python định dạng PEP 3147. Hãy nhớ rằng giá trị tại
sys.implementation.cache_taglà có thẩm quyền và nên được sử dụng thay cho hàm này.Added in version 3.2.
-
PyObject *PyImport_GetModuleDict()¶
- Giá trị trả về: Tham chiếu mượn. Một phần của ABI ổn định.
Trả về từ điển được sử dụng để quản trị mô-đun (còn gọi là
sys.modules). Lưu ý rằng đây là một biến cho mỗi phiên dịch viên.
-
PyObject *PyImport_GetModule(PyObject *name)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định kể từ phiên bản 3.8.
Trả lại mô-đun đã nhập với tên đã cho. Nếu mô-đun chưa được nhập thì trả về
NULLnhưng không đặt lỗi. Trả vềNULLvà đặt lỗi nếu tra cứu không thành công.Added in version 3.7.
-
PyObject *PyImport_GetImporter(PyObject *path)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.
Trả về đối tượng tìm kiếm cho mục
sys.path/pkg.__path__path, có thể bằng cách tìm nạp nó từ lệnhsys.path_importer_cache. Nếu nó chưa được lưu vào bộ nhớ đệm, hãy duyệt quasys.path_hookscho đến khi tìm thấy một hook có thể xử lý mục đường dẫn. Trả vềNonenếu không có hook nào có thể; điều này cho người gọi của chúng tôi biết rằng path based finder không thể tìm thấy công cụ tìm cho mục đường dẫn này. Lưu kết quả vàosys.path_importer_cache. Trả về một tham chiếu mới cho đối tượng Finder.
-
int PyImport_ImportFrozenModuleObject(PyObject *name)¶
- Một phần của ABI ổn định kể từ phiên bản 3.7.
Tải mô-đun đông lạnh có tên name. Trả về
1nếu thành công,0nếu không tìm thấy mô-đun và-1với một ngoại lệ được đặt nếu quá trình khởi tạo không thành công. Để truy cập mô-đun đã nhập khi tải thành công, hãy sử dụngPyImport_ImportModule(). (Lưu ý cách gọi sai --- chức năng này sẽ tải lại mô-đun nếu nó đã được nhập.)Added in version 3.3.
Thay đổi trong phiên bản 3.4: Thuộc tính
__file__không còn được đặt trên mô-đun.
-
int PyImport_ImportFrozenModule(const char *name)¶
- Một phần của ABI ổn định.
Tương tự như
PyImport_ImportFrozenModuleObject(), nhưng tên là chuỗi được mã hóa UTF-8 thay vì đối tượng Unicode.
-
struct _frozen¶
Đây là định nghĩa kiểu cấu trúc cho các bộ mô tả mô-đun cố định, được tạo bởi tiện ích freeze (xem
Tools/freeze/trong bản phân phối nguồn Python). Định nghĩa của nó, được tìm thấy trongInclude/import.h, là:cấu trúc _frozen { const char *tên; const mã char * không dấu; kích thước int; bool is_package; };
Thay đổi trong phiên bản 3.11: Trường
is_packagemới cho biết mô-đun có phải là gói hay không. Điều này thay thế việc đặt trườngsizethành giá trị âm.
-
const struct _frozen *PyImport_FrozenModules¶
Con trỏ này được khởi tạo để trỏ đến một mảng các bản ghi
_frozen, được kết thúc bởi một bản ghi có tất cả các thành viên làNULLhoặc 0. Khi một mô-đun bị đóng băng được nhập vào, nó sẽ được tìm kiếm trong bảng này. Mã của bên thứ ba có thể giở trò với điều này để cung cấp một bộ sưu tập các mô-đun cố định được tạo động.
-
int PyImport_AppendInittab(const char *name, PyObject *(*initfunc)(void))¶
- Một phần của ABI ổn định.
Thêm một mô-đun duy nhất vào bảng mô-đun tích hợp hiện có. Đây là một trình bao bọc tiện lợi xung quanh
PyImport_ExtendInittab(), trả về-1nếu bảng không thể mở rộng được. Mô-đun mới có thể được nhập theo tên name và sử dụng hàm initfunc làm hàm khởi tạo được gọi trong lần nhập đầu tiên. Điều này nên được gọi trướcPy_Initialize().
-
struct _inittab¶
Cấu trúc mô tả một mục duy nhất trong danh sách các mô-đun tích hợp. Các chương trình nhúng Python có thể sử dụng một loạt các cấu trúc này kết hợp với
PyImport_ExtendInittab()để cung cấp các mô-đun tích hợp bổ sung. Cơ cấu gồm 2 thành viên:-
const char *name¶
Tên mô-đun, dưới dạng chuỗi được mã hóa ASCII.
-
const char *name¶
-
int PyImport_ExtendInittab(struct _inittab *newtab)¶
Thêm tập hợp các mô-đun vào bảng mô-đun tích hợp. Mảng newtab phải kết thúc bằng mục nhập trọng điểm chứa
NULLcho trườngname; việc không cung cấp giá trị trọng điểm có thể dẫn đến lỗi bộ nhớ. Trả về0nếu thành công hoặc-1nếu không đủ bộ nhớ được phân bổ để mở rộng bảng nội bộ. Trong trường hợp thất bại, không có mô-đun nào được thêm vào bảng nội bộ. Điều này phải được gọi trướcPy_Initialize().Nếu Python được khởi tạo nhiều lần,
PyImport_AppendInittab()hoặcPyImport_ExtendInittab()phải được gọi trước mỗi lần khởi tạo Python.
-
struct _inittab *PyImport_Inittab¶
Bảng các mô-đun tích hợp được sử dụng khi khởi tạo Python. Không sử dụng trực tiếp; thay vào đó hãy sử dụng
PyImport_AppendInittab()vàPyImport_ExtendInittab().
-
PyObject *PyImport_ImportModuleAttr(PyObject *mod_name, PyObject *attr_name)¶
- Giá trị trả về: Tham chiếu mới.
Nhập mô-đun mod_name và lấy thuộc tính attr_name của nó.
Tên phải là đối tượng Python
str.Chức năng trợ giúp kết hợp
PyImport_Import()vàPyObject_GetAttr(). Ví dụ: nó có thể tăngImportErrornếu không tìm thấy mô-đun vàAttributeErrornếu thuộc tính không tồn tại.Added in version 3.14.
-
PyObject *PyImport_ImportModuleAttrString(const char *mod_name, const char *attr_name)¶
- Giá trị trả về: Tham chiếu mới.
Tương tự như
PyImport_ImportModuleAttr(), nhưng tên là các chuỗi được mã hóa UTF-8 thay vì các đối tượngstrcủa Python.Added in version 3.14.