在Python中解决有冲突的软件包名称

问题描述 投票:0回答:1

假设我们有两个来自同一供应商的不同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 pythonpath python-packaging
1个回答
0
投票

我将从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)
© www.soinside.com 2019 - 2024. All rights reserved.