zipimport — 从ZIP归档中国年加载Python代码
优质
小牛编辑
130浏览
2023-12-01
Example
# zipimport_make_example.py
import sys
import zipfile
if __name__ == '__main__':
zf = zipfile.PyZipFile('zipimport_example.zip', mode='w')
try:
zf.writepy('.')
zf.write('zipimport_get_source.py')
zf.write('example_package/README.txt')
finally:
zf.close()
for name in zf.namelist():
print(name)
Finding a Module
# zipimport_find_module.py
import zipimport
importer = zipimport.zipimporter('zipimport_example.zip')
for module_name in ['zipimport_find_module', 'not_there']:
print(module_name, ':', importer.find_module(module_name))
Accessing Code
# zipimport_get_code.py
import zipimport
importer = zipimport.zipimporter('zipimport_example.zip')
code = importer.get_code('zipimport_get_code')
print(code)
# zipimport_load_module.py
import zipimport
importer = zipimport.zipimporter('zipimport_example.zip')
module = importer.load_module('zipimport_get_code')
print('Name :', module.__name__)
print('Loader :', module.__loader__)
print('Code :', module.code)
Source
# zipimport_get_source.py
import zipimport
modules = [
'zipimport_get_code',
'zipimport_get_source',
]
importer = zipimport.zipimporter('zipimport_example.zip')
for module_name in modules:
source = importer.get_source(module_name)
print('=' * 80)
print(module_name)
print('=' * 80)
print(source)
print()
Packages
# zipimport_is_package.py
import zipimport
importer = zipimport.zipimporter('zipimport_example.zip')
for name in ['zipimport_is_package', 'example_package']:
print(name, importer.is_package(name))
Data
# zipimport_get_data_nozip.py
import os
import example_package
# Find the directory containing the imported
# package and build the data filename from it.
pkg_dir = os.path.dirname(example_package.__file__)
data_filename = os.path.join(pkg_dir, 'README.txt')
# Read the file and show its contents.
print(data_filename, ':')
print(open(data_filename, 'r').read())
# zipimport_get_data_zip.py
import sys
sys.path.insert(0, 'zipimport_example.zip')
import os
import example_package
print(example_package.__file__)
data_filename = os.path.join(
os.path.dirname(example_package.__file__),
'README.txt',
)
print(data_filename, ':')
print(open(data_filename, 'rt').read())
# zipimport_get_data.py
import sys
sys.path.insert(0, 'zipimport_example.zip')
import os
import example_package
print(example_package.__file__)
data = example_package.__loader__.get_data(
'example_package/README.txt')
print(data.decode('utf-8'))