我的API [port.py]具有两个不同硬件平台的相同接口:mips和powerpc。通过相同的接口我的意思是类是相同的,他们的方法是相同的,但实现不同。
mips/port.py
powerpc/port.py
使用这些API的程序应该与特定平台分离,除了导入包之外,代码看起来完全相同。如何动态选择平台,如下面的代码,其中platform
是全局设置(mips
或powerpc
)或类似的内容:
from [platform].port import PortCli
我尝试使用if
进行导入,但由于我可能需要添加其他平台,因此看起来很糟糕并且扩展性不佳。
谢谢
与Eduard讨论后更新:
以下代码实际上是import mips.port
:
import importlib
platform = 'mips'
myModule = importlib.import_module(platform + '.port')
myModule.Port().PrintMe()
没关系,但我需要在任何地方添加myModule。是否可以使用类似替代from mips.port import Port
?
答案 0 :(得分:1)
基于Python核心开发人员Andrey Svetlov的post。
我建议您在不同的目录中添加特定于平台/硬件的Python模块,并在运行时将此模块附加到sys.path
。
例如: 我们有一个包
__init__.py
将包含以下内容:
import sys
import platform
from os.path import join, dirname
__path__.append(join(dirname(__file__), platform.machine()))
使用这种方法,公共代码位于包中,而平台特定的分布在子目录中。
请注意x86_64
和i368
没有__init__.py
模块。
导入所需的模块b
from package import b