如何提供模块的特定于平台的实现?

Tob*_*ias 5 python

我需要通过提供多种实现来使模块中的一个函数独立于平台,而不更改导入它的任何文件。以下作品:

do_it = getattr(__import__(__name__), "do_on_" + sys.platform)

...但是如果将模块放入包中则会中断。

另一种选择是使用 if/elif 来硬编码调用 do_it() 中的其他函数。

还有更好的吗?

Ben*_*son 5

将平台支持的代码放在包中的不同文件中。然后将其添加到人们应该从中导入的文件中:

if sys.platform.startswith("win"):
    from ._windows_support import *
elif sys.platform.startswith("linux"):
    from ._unix_support import *
else:
    raise ImportError("my module doesn't support this system")
Run Code Online (Sandbox Code Playgroud)


Ale*_*lli 2

使用globals()['do_on_' + platform]而不是getattr调用,无论它是否在包内,您最初的想法都应该有效。