zipimport --- Nhập mô-đun từ kho lưu trữ Zip

Source code: Lib/zipimport.py


Mô-đun này bổ sung khả năng nhập các mô-đun Python (*.py, *.pyc) và các gói từ kho lưu trữ có định dạng ZIP. Thông thường không cần thiết phải sử dụng mô-đun zipimport một cách rõ ràng; nó được cơ chế import tích hợp tự động sử dụng cho các mục sys.path là đường dẫn đến kho lưu trữ ZIP.

Thông thường, sys.path là danh sách tên thư mục dưới dạng chuỗi. Mô-đun này cũng cho phép một mục của sys.path trở thành một chuỗi đặt tên cho kho lưu trữ tệp ZIP. Kho lưu trữ ZIP có thể chứa cấu trúc thư mục con để hỗ trợ nhập gói và có thể chỉ định đường dẫn trong kho lưu trữ để chỉ nhập từ thư mục con. Ví dụ: đường dẫn example.zip/lib/ sẽ chỉ nhập từ thư mục con lib/ trong kho lưu trữ.

Bất kỳ tệp nào cũng có thể có trong kho lưu trữ ZIP, nhưng trình nhập chỉ được gọi đối với các tệp .py.pyc. ZIP nhập mô-đun động (.pyd, .so) không được phép. Lưu ý rằng nếu kho lưu trữ chỉ chứa các tệp .py, Python sẽ không cố gắng sửa đổi kho lưu trữ bằng cách thêm tệp .pyc tương ứng, nghĩa là nếu kho lưu trữ ZIP không chứa các tệp .pyc thì quá trình nhập có thể khá chậm.

Thay đổi trong phiên bản 3.13: ZIP64 được hỗ trợ

Thay đổi trong phiên bản 3.8: Trước đây, kho lưu trữ ZIP có nhận xét lưu trữ không được hỗ trợ.

Xem thêm

PKZIP Application Note

Tài liệu về định dạng tệp ZIP của Phil Katz, người tạo ra định dạng và thuật toán được sử dụng.

PEP 273 - Nhập mô-đun từ kho lưu trữ Zip

Được viết bởi James C. Ahlstrom, người cũng cung cấp cách triển khai. Python 2.3 tuân theo đặc tả trong PEP 273, nhưng sử dụng cách triển khai được viết bởi Just van Rossum và sử dụng các móc nhập được mô tả trong PEP 302.

importlib - Thi công nhập khẩu máy móc

Gói cung cấp các giao thức liên quan để tất cả các nhà nhập khẩu thực hiện.

Mô-đun này xác định một ngoại lệ:

exception zipimport.ZipImportError

Ngoại lệ được đưa ra bởi các đối tượng zipimporter. Nó là một lớp con của ImportError, vì vậy nó cũng có thể được gọi là ImportError.

Đối tượng zipimporter

zipimporter là lớp để nhập tệp ZIP.

class zipimport.zipimporter(archivepath)

Tạo một phiên bản zipimporter mới. archivepath phải là đường dẫn đến tệp ZIP hoặc đến một đường dẫn cụ thể trong tệp ZIP. Ví dụ: một archivepath của foo/bar.zip/lib sẽ tìm kiếm các mô-đun trong thư mục lib bên trong tệp ZIP foo/bar.zip (với điều kiện là nó tồn tại).

ZipImportError được nâng lên nếu archivepath không trỏ đến kho lưu trữ ZIP hợp lệ.

Thay đổi trong phiên bản 3.12: Các phương thức find_loader()find_module(), không được dùng nữa trong 3.10 hiện đã bị xóa. Thay vào đó hãy sử dụng find_spec().

create_module(spec)

Triển khai importlib.abc.Loader.create_module() trả về None để yêu cầu rõ ràng ngữ nghĩa mặc định.

Added in version 3.10.

exec_module(module)

Triển khai importlib.abc.Loader.exec_module().

Added in version 3.10.

find_spec(fullname, target=None)

Triển khai importlib.abc.PathEntryFinder.find_spec().

Added in version 3.10.

get_code(fullname)

Trả về đối tượng mã cho mô-đun đã chỉ định. Tăng ZipImportError nếu không thể nhập mô-đun.

get_data(pathname)

Trả về dữ liệu liên quan đến pathname. Tăng OSError nếu không tìm thấy tệp.

Thay đổi trong phiên bản 3.3: IOError trước đây được nâng lên, bây giờ nó là bí danh của OSError.

get_filename(fullname)

Trả về giá trị __file__ sẽ được đặt thành nếu mô-đun chỉ định đã được nhập. Tăng ZipImportError nếu không thể nhập mô-đun.

Added in version 3.1.

get_source(fullname)

Trả về mã nguồn cho mô-đun được chỉ định. Tăng ZipImportError nếu không tìm thấy mô-đun, trả về None nếu kho lưu trữ có chứa mô-đun nhưng không có nguồn cho mô-đun đó.

is_package(fullname)

Trả về True nếu mô-đun được chỉ định bởi fullname là một gói. Tăng ZipImportError nếu không tìm thấy mô-đun.

load_module(fullname)

Tải mô-đun được chỉ định bởi fullname. fullname phải là tên mô-đun đủ điều kiện (có dấu chấm). Trả về mô-đun đã nhập nếu thành công, tăng ZipImportError nếu thất bại.

Không được dùng nữa kể từ phiên bản 3.10, sẽ bị xóa trong phiên bản 3.15: Thay vào đó hãy sử dụng exec_module().

invalidate_caches()

Xóa bộ nhớ đệm nội bộ chứa thông tin về các tệp được tìm thấy trong kho lưu trữ ZIP.

Added in version 3.10.

archive

Tên tệp của tệp ZIP được liên kết của nhà nhập khẩu, không có đường dẫn phụ.

prefix

Đường dẫn phụ trong tệp ZIP nơi các mô-đun được tìm kiếm. Đây là chuỗi trống cho các đối tượng zipimporter trỏ đến thư mục gốc của tệp ZIP.

Các thuộc tính archiveprefix, khi được kết hợp với dấu gạch chéo, sẽ bằng đối số archivepath ban đầu được cấp cho hàm tạo zipimporter.

Ví dụ

Dưới đây là ví dụ nhập mô-đun từ kho lưu trữ ZIP - lưu ý rằng mô-đun zipimport không được sử dụng rõ ràng.

$ giải nén -l example_archive.zip
Lưu trữ: example_archive.zip
  Độ dài Ngày Giờ Tên
 -------- ---- ---- ----
     8467 01-01-00 12:30 example.py
 -------- -------
     8467 1 tập tin
>>> nhập hệ thống
>>> # Add kho lưu trữ ở phía trước đường dẫn tìm kiếm mô-đun
>>> sys.path.insert(0, 'example_archive.zip')
>>>  dụ nhập khẩu
>>>  dụ.__file__
'example_archive.zip/example.py'