zipimport — Εισαγωγή ενοτήτων από αρχεία Zip¶
Πηγαίος κώδικας: Lib/zipimport.py
This module adds the ability to import Python modules (*.py,
*.pyc) and packages from ZIP-format archives. It is usually not
needed to use the zipimport module explicitly; it is automatically used
by the built-in import mechanism for sys.path items that are paths
to ZIP archives.
Συνήθως, το sys.path είναι μια λίστα με ονόματα καταλόγων υπό μορφή συμβολοσειρών. Αυτή η ενότητα επιτρέπει επίσης ένα στοιχείο του sys.path να είναι μια συμβολοσειρά που ονομάζει ένα αρχείο ZIP. Το αρχείο ZIP μπορεί να περιέχει μια δομή υποκαταλόγων για την υποστήριξη εισαγωγών πακέτων, και μπορεί να καθοριστεί μια διαδρομή εντός του αρχείου ώστε να γίνεται εισαγωγή μόνο από έναν υποκατάλογο. Για παράδειγμα, η διαδρομή example.zip/lib/ θα εισήγαγε μόνο από τον υποκατάλογο lib/ εντός του αρχείου.
Σε αρχείο ZIP μπορεί να υπάρχουν οποιαδήποτε αρχεία, αλλά οι εισαγωγείς(importers) καλούνται μόνο για αρχεία .py και .pyc. Η εισαγωγή δυναμικών modules(.pyd, .so) μέσω ZIP δεν επιτρέπεται. Σημειώστε ότι αν ένα αρχείο περιέχει μόνο αρχεία .py, η Python δεν θα προσπαθήσει να τροποποιήσει το αρχείο προσθέτοντας το αντίστοιχο αρχείο .pyc, πράγμα που σημαίνει ότι αν ένα αρχείο ZIP δεν περιέχει αρχεία .pyc, η εισαγωγή μπορεί να είναι αρκετά αργή.
Άλλαξε στην έκδοση 3.13: Το ZIP64 υποστηρίζεται
Άλλαξε στην έκδοση 3.8: Παλαιότερα, τα αρχεία ZIP με σχόλιο αρχείου δεν υποστηρίζονταν.
Δείτε επίσης
- PKZIP Application Note
Τεκμηρίωση σχετικά με τη μορφή αρχείου ZIP από τον Phil Katz, τον δημιουργό της μορφής και των αλγορίθμων που χρησιμοποιούνται.
- PEP 273 - Εισαγωγή ενοτήτων από αρχεία Zip
Συντάχθηκε από τον James C. Ahlstrom, ο οποίος παρείχε επίσης μια υλοποίηση. Η Python 2.3 ακολουθεί τις προδιαγραφές του PEP 273, αλλά χρησιμοποιεί μια υλοποίηση που συντάχθηκε από τον Just van Rossum και η οποία χρησιμοποιεί τους μηχανισμούς εισαγωγής που περιγράφονται στο PEP 302.
importlib- Η υλοποίηση του μηχανισμού εισαγωγήςΠακέτο που παρέχει τα σχετικά πρωτόκολλα προς εφαρμογή από όλους τους importers.
Αυτή η ενότητα ορίζει μια εξαίρεση:
- 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(εφόσον υπάρχει).Η
ZipImportErrorγίνεται raise αν η archivepath δεν παραπέμπει σε ένα έγκυρο αρχείο ZIP.Άλλαξε στην έκδοση 3.12: Οι μέθοδοι
find_loader()καιfind_module(), οι οποίες είχαν καταργηθεί από την έκδοση 3.10, έχουν πλέον αφαιρεθεί. Χρησιμοποιήστε αντ” αυτού τη μέθοδοfind_spec().- create_module(spec)¶
Υλοποίηση της
importlib.abc.Loader.create_module(), η οποία επιστρέφειNoneγια να ζητήσει ρητά την προεπιλεγμένη σημασιολογία.Added in version 3.10.
- exec_module(module)¶
Εφαρμογή της συνάρτησης
importlib.abc.Loader.exec_module().Added in version 3.10.
- find_spec(fullname, target=None)¶
Μια υλοποίηση της μεθόδου
importlib.abc.PathEntryFinder.find_spec().Added in version 3.10.
- get_code(fullname)¶
Επιστρέφει το αντικείμενο κώδικα για το καθορισμένο module. Κάνει raise την
ZipImportErrorαν δεν ήταν δυνατή η εισαγωγή του module.
- get_data(pathname)¶
Επιστρέφει τα δεδομένα που σχετίζονται με το pathname. Κάνει raise τη
OSErrorαν το αρχείο δεν βρέθηκε.
- get_filename(fullname)¶
Επιστρέφει την τιμή στην οποία θα οριζόταν η μεταβλητή
__file__εάν είχε εισαχθεί το συγκεκριμένο module. Κάνει raise τηνZipImportErrorεάν δεν ήταν δυνατή η εισαγωγή του module.Added in version 3.1.
- get_source(fullname)¶
Επιστρέφει τον πηγαίο κώδικα για το καθορισμένο module. Κάνει raise την
ZipImportErrorαν το module δεν βρέθηκε, και επιστρέφειNoneαν το αρχείο περιέχει το module, αλλά δεν περιλαμβάνεται σε πηγαίο κώδικα.
- is_package(fullname)¶
Επιστρέφει «True» αν το module που καθορίζεται από το fullname είναι ένα πακέτο. Κάνει raise την
ZipImportErrorαν το module δεν βρέθηκε.
- load_module(fullname)¶
Φόρτωση του module που καθορίζεται από το fullname. Το fullname πρέπει να είναι το πλήρως προσδιορισμένο (με τελείες) όνομα του module. Επιστρέφει το εισαγόμενο module σε περίπτωση επιτυχίας, ενώ σε περίπτωση αποτυχίας προκαλεί το σφάλμα
ZipImportError.Καταργήθηκε από την έκδοση 3.10, θα αφαιρεθεί στην έκδοση 3.15: Χρησιμοποιήστε αντ” αυτού τη συνάρτηση
exec_module().
- invalidate_caches()¶
Εκκαθάριση της εσωτερικής προσωρινής μνήμης που περιέχει πληροφορίες σχετικά με τα αρχεία που βρίσκονται στο αρχείο ZIP.
Added in version 3.10.
- archive¶
Το όνομα του αρχείου ZIP που αντιστοιχεί στον importer, χωρίς τυχόν υποδιαδρομή.
- prefix¶
Η υποδιαδρομή μέσα στο αρχείο ZIP όπου πραγματοποιείται η αναζήτηση των module. Πρόκειται για την κενή συμβολοσειρά για αντικείμενα τύπου zipimporter που παραπέμπουν στην αρχική ρίζα του αρχείου ZIP.
Τα χαρακτηριστικά
archiveκαιprefix, όταν συνδυάζονται με μια κάθετο, ισοδυναμούν με το αρχικό όρισμα archivepath που δόθηκε στον κατασκευαστήzipimporter.
Παραδείγματα¶
Here is an example that imports a module from a ZIP archive - note that the
zipimport module is not explicitly used.
$ 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
>>># Προσθήκη του αρχείου στην αρχή της διαδρομής αναζήτησης του module
>>> sys.path.insert(0, 'example_archive.zip')
>>> import example