zipimport
— Zip 저장소에서 모듈 임포트¶
소스 코드: Lib/zipimport.py
이 모듈은 파이썬 모듈(*.py
, *.pyc
)과 패키지를 ZIP-형식 저장소에서 임포트하는 기능을 추가합니다. 일반적으로 zipimport
모듈을 명시적으로 사용할 필요는 없습니다; ZIP 저장소 경로가 sys.path
항목에 있으면 내장 import
메커니즘에 의해 자동으로 사용됩니다.
일반적으로, sys.path
는 문자열 디렉터리 이름의 리스트입니다. 이 모듈은 또한 sys.path
항목이 ZIP 파일 저장소를 명명하는 문자열이 될 수 있도록 합니다. ZIP 저장소에는 패키지 임포트를 지원하는 하위 디렉터리 구조가 포함될 수 있으며, 저장소 내의 경로를 지정하여 하위 디렉터리에서만 임포트 되도록 할 수 있습니다. 예를 들어, 경로 example.zip/lib/
는 저장소 내의 lib/
서브 디렉터리에서만 임포트하도록 합니다.
Any files may be present in the ZIP archive, but importers are only invoked for
.py
and .pyc
files. ZIP import of dynamic modules
(.pyd
, .so
) is disallowed. Note that if an archive only contains
.py
files, Python will not attempt to modify the archive by adding the
corresponding .pyc
file, meaning that if a ZIP archive
doesn’t contain .pyc
files, importing may be rather slow.
버전 3.8에서 변경: 전에는, 저장소 주석이 포함된 ZIP 저장소는 지원되지 않았습니다.
더 보기
- PKZIP Application Note
사용된 형식과 알고리즘 저자인 Phil Katz의 ZIP 파일 형식에 관한 설명서.
- PEP 273 - Zip 저장소에서 모듈 임포트
구현도 제공한 James C. Ahlstrom이 작성했습니다. 파이썬 2.3은 PEP 273의 명세를 따르지만, Just van Rossum이 작성한 구현을 사용하는데 PEP 302에 설명된 임포트 훅을 사용합니다.
importlib
- The implementation of the import machineryPackage providing the relevant protocols for all importers to implement.
이 모듈은 예외를 정의합니다:
-
exception
zipimport.
ZipImportError
¶ zipimporter 객체가 발생시키는 예외.
ImportError
의 서브 클래스이므로,ImportError
로도 잡힐 수 있습니다.
zipimporter 객체¶
zipimporter
는 ZIP 파일을 임포트하는 클래스입니다.
-
class
zipimport.
zipimporter
(archivepath)¶ 새로운 zipimporter 인스턴스를 만듭니다. archivepath는 ZIP 파일의 경로이거나, ZIP 파일 내의 특정 경로여야 합니다. 예를 들어, archivepath
foo/bar.zip/lib
는 ZIP 파일foo/bar.zip
내의lib
디렉터리에 있는 모듈을 찾습니다 (존재한다면).archivepath가 유효한 ZIP 저장소를 가리키지 않으면
ZipImportError
가 발생합니다.-
create_module
(spec)¶ Implementation of
importlib.abc.Loader.create_module()
that returnsNone
to explicitly request the default semantics.버전 3.10에 추가.
-
exec_module
(module)¶ Implementation of
importlib.abc.Loader.exec_module()
.버전 3.10에 추가.
-
find_loader
(fullname, path=None)¶ An implementation of
importlib.abc.PathEntryFinder.find_loader()
.버전 3.10부터 폐지: Use
find_spec()
instead.
-
find_module
(fullname, path=None)¶ fullname로 지정된 모듈을 검색합니다. fullname은 완전히 정규화된 (점으로 구분된) 모듈 이름이어야 합니다. 모듈이 발견되면 zipimporter 인스턴스 자체를 반환하고, 그렇지 않으면
None
을 반환합니다. 선택적 path 인자는 무시됩니다—임포터 프로토콜과의 호환성을 위해 있습니다.버전 3.10부터 폐지: Use
find_spec()
instead.
-
find_spec
(fullname, target=None)¶ An implementation of
importlib.abc.PathEntryFinder.find_spec()
.버전 3.10에 추가.
-
get_code
(fullname)¶ Return the code object for the specified module. Raise
ZipImportError
if the module couldn’t be imported.
-
get_filename
(fullname)¶ Return the value
__file__
would be set to if the specified module was imported. RaiseZipImportError
if the module couldn’t be imported.버전 3.1에 추가.
-
get_source
(fullname)¶ 지정된 모듈의 소스 코드를 반환합니다. 모듈을 찾을 수 없으면
ZipImportError
를 발생시키고, 저장소에 모듈이 있지만, 소스가 없으면None
을 반환합니다.
-
is_package
(fullname)¶ fullname으로 지정된 모듈이 패키지면
True
를 반환합니다. 모듈을 찾을 수 없으면ZipImportError
를 발생시킵니다.
-
load_module
(fullname)¶ Load the module specified by fullname. fullname must be the fully qualified (dotted) module name. Returns the imported module on success, raises
ZipImportError
on failure.버전 3.10부터 폐지: Use
exec_module()
instead.
-
invalidate_caches
()¶ Clear out the internal cache of information about files found within the ZIP archive.
버전 3.10에 추가.
-
archive
¶ 있을 수도 있는 하위 경로를 제외한, 임포터와 연결된 ZIP 파일의 파일 이름.
-
prefix
¶ 모듈이 검색되는 ZIP 파일 내의 하위 경로. ZIP 파일의 루트를 가리키는 zipimporter 객체에서는 빈 문자열입니다.
archive
와prefix
어트리뷰트는, 슬래시로 결합 될 때,zipimporter
생성자에 지정된 원래 archivepath 인자와 같습니다.-
예제¶
다음은 ZIP 저장소에서 모듈을 임포트하는 예제입니다 - zipimport
모듈이 명시적으로 사용되지 않음에 유의하십시오.
$ unzip -l example.zip
Archive: example.zip
Length Date Time Name
-------- ---- ---- ----
8467 11-26-02 22:30 jwzthreading.py
-------- -------
8467 1 file
$ ./python
Python 2.3 (#1, Aug 1 2003, 19:54:32)
>>> import sys
>>> sys.path.insert(0, 'example.zip') # Add .zip file to front of path
>>> import jwzthreading
>>> jwzthreading.__file__
'example.zip/jwzthreading.py'