मैं ज़िप पैकेज से उप-मॉड्यूल लोड करने का प्रयास कर रहा हूं लेकिन यह काम नहीं करेगा। यह सही कैसे करें?zipimporter उप-मॉड्यूल नहीं ढूंढ सकता/लोड नहीं कर सकता
foo.zip
foo/
__init__.py
bar.py
test.py
import os
import zipimport
dirname = os.path.dirname(__file__)
importer = zipimport.zipimporter(os.path.join(dirname, 'foo.zip'))
print importer.is_package('foo')
print importer.load_module('foo')
print importer.load_module('foo.bar')
आउटपुट
$ python test.py
True
<module 'foo' from 'foo.zip/foo/__init__.py'>
Traceback (most recent call last):
File "test.py", line 8, in <module>
print importer.load_module('foo.bar')
zipimport.ZipImportError: can't find module 'foo.bar'
अद्यतन 2015/04/11 06:30 बजे PT
निम्नलिखित काम करेगा, लेकिन इस समस्या का वास्तविक समाधान है? zipimport.zipimporter
दस्तावेज़ीकरण स्पष्ट रूप से बताता है "पूर्ण नाम पूरी तरह से योग्य (बिंदीदार) मॉड्यूल नाम होना चाहिए।" और इसमें is_package()
विधि है जो ठीक से काम करता है।
import os
import zipimport
dirname = os.path.dirname(__file__)
importer = zipimport.zipimporter(os.path.join(dirname, 'foo.zip'))
def load_module(name):
parts = name.split('.')
module = importer.load_module(parts[0])
full_name = parts[0]
for part in parts[1:]:
full_name += '.' + part
if not hasattr(module, '__path__'):
raise ImportError('%s' % full_name)
path = module.__path__[0]
module = zipimport.zipimporter(path).load_module(part)
return module
print load_module('foo.bar')
मुझे लगता है कि आप इसे जानते हैं, लेकिन यदि आप मॉड्यूल ऑब्जेक्ट प्राप्त करने के बजाय ज़िप से आयात करना चाहते हैं, तो पाइथन आपके लिए यह करेगा यदि आप ज़िप फ़ाइल को 'पायथनपथ' में जोड़ते हैं और केवल 'import foo' .bar'। – wrgrs