我不确定如何描述这个,但是有没有办法创建一个处理内部包的多个版本的façade包?
考虑:
Foo/
__init__.py
A/
Bar/
__init__.py
etc.
B/
Bar/
__init__.py
etc.
C/
Bar/
__init__.py
etc.
Inside Package的__init__.py
我有python逻辑来附加sys.path以指向其中一个Bar包,具体取决于运行时配置。这让我使用了两个python import语句。
import Foo
import Bar
我可以将其减少为一个导入语句,并将Foo视为正确版本的Bar的外观。我发现的唯一基于此post。在foo.py的__init__.py
:
for attr in dir(bar):
globals()[attr] = getattr(bar, attr)
答案 0 :(得分:0)
我建议不要修改system.path
,因为这会对不相关的代码产生影响。
您可以使用sys.modules
来解决此问题。导入模块时,它将在sys.modules
字典中注册。您只需在导入时为代理模块设置条目即可完成此操作。
implementation.py:
def method():
print "implemented method"
proxy.py:
if __name__ != '__main__':
import sys
import implementation
sys.modules[__name__] = implementation
main.py:
if __name__ == '__main__':
import proxy
proxy.method()
输出:
$ python main.py
implemented method