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درون پرونده ZIPfoo/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را پرتاب میکند.
- 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'