我有几个不同的存储库,我需要以编程方式导入一个具有通用名称的包,例如my_package
,e..g /foo/bar/my_package
和/foo/baz/my_package
。我需要能够从这些不同的存储库中检索my_package
并将它们保存在单独的变量中。
我尝试使用importlib.import_module
执行此操作,但它不起作用 - 我最终使用相同的包变量。
os.chdir('/foo/bar')
foobar_my_package = importlib.import_module('my_package')
os.chdir('/foo/baz')
foobaz_my_package = importlib.import_module('my_package')
> foobar_my_package == foobaz_my_package
> True
我不明白为什么会这样。
答案 0 :(得分:0)
您可以尝试这样的事情:
import imp
def myImporter(num, p):
tup = imp.find_module('__init__', [p])
module = imp.load_module('package%s' % i, *tup)
tup[0].close()
return module
if __name__ == '__main__':
packages = {}
for i, p in enumerate(['/tmp/bar/my_package', '/tmp/foo/my_package']):
_name = 'package%d' % i
_module = myImporter(i, p)
packages[_name] = _module
for k,v in packages.items():
print (v.__name__, v.main())
对于以下目录结构:
.
├── bar
│ └── my_package
│ └── __init__.py
├── foo
│ └── my_package
│ └── __init__.py
每个__init__.py
都有一个main()函数:
def main():
return "<name>/my_package/main"
它返回:
('package0', 'bar/my_package/main')
('package1', 'foo/my_package/main')