假设我有模块foo.py
,bar.py
并且它们的代码中都有import baz
语句。
我想编写一个导入钩子,我可以插入sys.meta_path
它知道baz
是从 导入foo
还是从bar
.
我想这样做的原因是因为我希望我的应用程序能够加载插件并保持它们的依赖项隔离,就像我可以通过ClassLoader
在 Java 中使用单独的实例一样。这样,插件foo
和插件bar
将能够捆绑不同版本的库baz
而不会发生冲突。我的意思是通过更改导入机制来为import baz
语句生成单独的模块,具体取决于该语句的来源。
如果有人有更好的方法,请随时在您的答案中提出建议。