zipimport --- ایمپورت ماژول‌ها از آرشیوهای Zip

کد منبع: Lib/zipimport.py


این ماژول امکان ایمپورت ماژول‌های پایتون (*.py، *.pyc) و بسته‌ها از بایگانی‌های با قالب ZIP را اضافه می‌کند. معمولاً نیازی به استفاده صریح از ماژول zipimport نیست؛ این ماژول به‌طور خودکار توسط سازوکار توکار import برای آیتم‌های sys.path که مسیرهایی به بایگانی‌های ZIP هستند، استفاده می‌شود.

معمولاً، sys.path فهرستی از نام پوشه‌ها به‌صورت رشته‌ها است. این ماژول همچنین اجازه می‌دهد یک آیتم از sys.path رشته‌ای باشد که نام یک بایگانی پرونده ZIP را مشخص می‌کند. بایگانی ZIP می‌تواند شامل ساختار زیرپوشه باشد تا از ایمپورت بسته‌ها پشتیبانی کند، و می‌توان مسیری را درون بایگانی مشخص کرد تا فقط از یک زیرپوشه ایمپورت انجام شود. برای مثال، مسیر example.zip/lib/ فقط از زیرپوشه‌ی lib/ درون بایگانی ایمپورت می‌کند.

هر پرونده‌ای ممکن است در بایگانی ZIP وجود داشته باشد، اما ایمپورت‌کننده‌ها فقط برای پرونده‌های .py و .pyc فراخوانی می‌شوند. ایمپورت ماژول‌های پویا از ZIP (.pyd، .so) مجاز نیست. توجه داشته باشید که اگر یک بایگانی فقط شامل پرونده‌های .py باشد، پایتون تلاش نمی‌کند بایگانی را با افزودن پرونده .pyc متناظر تغییر دهد، به این معنا که اگر یک بایگانی ZIP شامل پرونده‌های .pyc نباشد، ایمپورت ممکن است نسبتاً کند باشد.

تغییر یافته در نسخه‌ی 3.13: از ZIP64 پشتیبانی می‌شود

تغییر یافته در نسخه‌ی 3.8: پیش‌تر، از آرشیوهای ZIP دارای کامنت آرشیو پشتیبانی نمی‌شد.

همچنین ملاحظه نمائید

یادداشت کاربردی PKZIP

مستنداتی درباره‌ی قالب پرونده ZIP از فیل کاتز، خالق قالب و الگوریتم‌های استفاده‌شده.

PEP 273 - ایمپورت ماژول‌ها از بایگانی‌های Zip

نوشته‌شده توسط James C. Ahlstrom، که پیاده‌سازی‌ای نیز ارائه کرده است. پایتون 2.3 از مشخصات موجود در PEP 273 پیروی می‌کند، اما از پیاده‌سازی نوشته‌شده توسط Just van Rossum استفاده می‌کند که از قلاب‌های ایمپورت (import hooks) توصیف‌شده در PEP 302 استفاده می‌کند.

importlib - پیاده‌سازی سازوکار ایمپورت

بسته‌ای که پروتکل‌های مرتبط را برای پیاده‌سازی توسط همه‌ی ایمپورت‌کننده‌ها فراهم می‌کند.

این ماژول یک استثنا تعریف می‌کند:

exception zipimport.ZipImportError

استثنایی که توسط اشیای zipimporter پرتاب می‌شود. این استثنا یک زیرکلاس از ImportError است، بنابراین می‌توان آن را به‌عنوان ImportError نیز گرفت.

اشیاء zipimporter

zipimporter کلاسی برای ایمپورت کردن پرونده‌های ZIP است.

class zipimport.zipimporter(archivepath)

یک نمونه‌ی جدید از zipimporter ایجاد کنید. archivepath باید یک مسیر به یک پرونده ZIP، یا یک مسیر مشخص درون یک پرونده ZIP باشد. برای مثال، یک archivepath به شکل foo/bar.zip/lib ماژول‌ها را در پوشه‌ی lib درون پرونده ZIP foo/bar.zip جستجو می‌کند (به شرط آنکه وجود داشته باشد).

اگر archivepath به یک آرشیو ZIP معتبر اشاره نکند، ZipImportError پرتاب می‌شود.

تغییر یافته در نسخه‌ی 3.12: متدهای find_loader() و find_module() که در 3.10 منسوخ شده بودند، اکنون حذف شده‌اند. به‌جای آن‌ها از find_spec() استفاده کنید.

create_module(spec)

پیاده‌سازی importlib.abc.Loader.create_module() که None را برمی‌گرداند تا به‌صراحت معناهای پیش‌فرض را درخواست کند.

اضافه شده در نسخه‌ی 3.10.

exec_module(module)

پیاده‌سازی importlib.abc.Loader.exec_module().

اضافه شده در نسخه‌ی 3.10.

find_spec(fullname, target=None)

پیاده‌سازی‌ای از importlib.abc.PathEntryFinder.find_spec().

اضافه شده در نسخه‌ی 3.10.

get_code(fullname)

شیء کد را برای ماژول مشخص‌شده برمی‌گرداند. اگر ماژول نتواند ایمپورت شود، ZipImportError را پرتاب می‌کند.

get_data(pathname)

داده‌ی مرتبط با pathname را برمی‌گرداند. اگر پرونده یافت نشد، OSError را پرتاب می‌کند.

تغییر یافته در نسخه‌ی 3.3: IOError پیش‌تر پرتاب می‌شد، اکنون نام مستعاری از OSError است.

get_filename(fullname)

مقداری را برمی‌گرداند که __file__ در صورت ایمپورت شدن ماژول مشخص‌شده، به آن تنظیم می‌شد. اگر ماژول نتواند ایمپورت شود، ZipImportError را پرتاب می‌کند.

اضافه شده در نسخه‌ی 3.1.

get_source(fullname)

کد منبع ماژول مشخص‌شده را برمی‌گرداند. اگر ماژول یافت نشد، ZipImportError را پرتاب می‌کند و اگر بایگانی حاوی ماژول باشد اما کد منبعی برای آن نداشته باشد، None را برمی‌گرداند.

is_package(fullname)

اگر ماژول مشخص‌شده با fullname یک بسته باشد، True را برمی‌گرداند. اگر ماژول یافت نشد، ZipImportError را پرتاب می‌کند.

load_module(fullname)

ماژول مشخص‌شده با fullname را بارگذاری می‌کند. fullname باید نام کاملاً کامل (نقطه‌دار) ماژول باشد. در صورت موفقیت، ماژول ایمپورت‌شده را برمی‌گرداند و در صورت شکست، ZipImportError را پرتاب می‌کند.

منسوخ شده از نسخه‌ی 3.10, در نسخه‌ی 3.15 حذف خواهد شد: به‌جای آن از exec_module() استفاده کنید.

invalidate_caches()

نهانگاه داخلی اطلاعات مربوط به پرونده‌های یافت‌شده در بایگانی ZIP را پاک می‌کند.

اضافه شده در نسخه‌ی 3.10.

archive

نام پرونده ZIP مرتبط با ایمپورت‌کننده، بدون زیرمسیر احتمالی.

prefix

زیرمسیر درون پرونده ZIP که ماژول‌ها در آن جستجو می‌شوند. این مقدار برای اشیاء zipimporter که به ریشه‌ی پرونده ZIP اشاره می‌کنند، رشته‌ی خالی است.

ویژگی‌های archive و prefix، هنگامی که با یک اسلش ترکیب شوند، برابر با آرگومان اصلی archivepath داده‌شده به سازنده‌ی zipimporter هستند.

مثال‌ها

در اینجا مثالی آمده است که یک ماژول را از یک بایگانی ZIP ایمپورت می‌کند - توجه داشته باشید که ماژول zipimport به‌صراحت استفاده نمی‌شود.

$ unzip -l example_archive.zip
Archive:  example_archive.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
     8467  01-01-00 12:30   example.py
 --------                   -------
     8467                   1 file
>>> import sys
>>> # Add the archive to the front of the module search path
>>> sys.path.insert(0, 'example_archive.zip')
>>> import example
>>> example.__file__
'example_archive.zip/example.py'