假设我们有两个来自同一供应商的不同Python软件包,它们的名称相同-foo
。第一个安装在pip
中,可以在/usr/lib/python/site-packages/foo
目录中找到,第二个安装在系统范围内,例如,使用apt-get
,Python包以/usr/lib/some-vendor-sdk/foo
结尾。本地和全局foo
做不同的事情,我都需要它们都可以在源代码中导入,但是我只能导入一个:
$ python
>>> import foo
>>> foo.__path__
/usr/lib/python2.7/site-packages/foo
是否有办法使两个软件包都可在我的代码中导入?以某种方式别名其中之一会很好,我只是不知道一种技术方法。有什么建议吗?
我将从Python documentation "Importing a source file directly"中的示例开始,可以将其转换为如下所示:
import importlib.util
import sys
file_path = '/usr/lib/some-vendor-sdk/foo'
module_name = 'vendorfoo'
spec = importlib.util.spec_from_file_location(module_name, file_path)
module = importlib.util.module_from_spec(spec)
sys.modules[module_name] = module
spec.loader.exec_module(module)