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 NULL vớ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 NULL vớ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 NULL vớ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ề NULL vớ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 referencename là đối tượng str củ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àm compile() 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ặc NULL với một ngoại lệ được đặt nếu xảy ra lỗi. name bị xóa khỏi sys.modules trong trường hợp lỗi, ngay cả khi name đã có trong sys.modules khi truy cập PyImport_ExecCodeModule(). Việc để lại các mô-đun được khởi tạo không đầy đủ trong sys.modules là 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____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ản SourceFileLoader nếu không.

Thuộc tính __file__ của mô-đun sẽ được đặt thành co_filename củ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()PyImport_ExecCodeModuleWithPathnames().

Thay đổi trong phiên bản 3.12: Cài đặt __cached____loader__ không được dùng nữa. Xem ModuleSpec để 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. Xem ModuleSpec để 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, pathnamecpathname 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ành NULL.

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ề -1 do lỗi.

Thay đổi trong phiên bản 3.3: Giá trị trả về của -1 khi 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_tag là 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ề NULL nhưng không đặt lỗi. Trả về NULL và đặ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ệnh sys.path_importer_cache. Nếu nó chưa được lưu vào bộ nhớ đệm, hãy duyệt qua sys.path_hooks cho đến khi tìm thấy một hook có thể xử lý mục đường dẫn. Trả về None nế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ào sys.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ề 1 nếu thành công, 0 nếu không tìm thấy mô-đun và -1 vớ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ụng PyImport_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 trong Include/import.h, là:

cấu trúc _frozen {
    const char *tên;
    const  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_package mớ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ường size thà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à NULL hoặ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ề -1 nế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ước Py_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.

PyObject *(*initfunc)(void)

Chức năng khởi tạo cho mô-đun được tích hợp trong trình thông dịch.

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 NULL cho trường name; việc không cung cấp giá trị trọng điểm có thể dẫn đến lỗi bộ nhớ. Trả về 0 nếu thành công hoặc -1 nế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ước Py_Initialize().

Nếu Python được khởi tạo nhiều lần, PyImport_AppendInittab() hoặc PyImport_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()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()PyObject_GetAttr(). Ví dụ: nó có thể tăng ImportError nếu không tìm thấy mô-đun và AttributeError nế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ượng str của Python.

Added in version 3.14.