我们有一个应用程序,使其用户可以使用插件扩展它。我们提供了一些辅助模块,因此用户可以使用
访问它们的插件import helpermodule
现在我们已经决定最好更改辅助模块的包装,以便所有这些都从主包加载:
from ourpackage import helpermodule
由于我们不想破坏用户插件中存在的代码,我们仍然提供旧方法。 (实际上我们刚刚在我们的源代码中的__init__.py
目录中的ourpackage
文件中导入了辅助模块。)我们非常希望发出警告(使用warnings
标准库)当用户脚本以旧方式导入辅助模块时。
所以我的问题是:有没有办法判断用户是否以“错误”的方式导入了辅助模块?理想情况下,我们希望在不检查用户代码的情况下实现这一目标。
答案 0 :(得分:1)
这取决于你如何实现“仍然提供旧方式”。听起来你将旧模块直接留在搜索路径上,只是在我们的包中做import helpermodule
。 (也就是说,你自己仍然以“错误”的方式导入模块。)在这种情况下,这是一种可能性。
\dir_on_path
helper.py
\ourpackage
__init__.py
#### helper.py
import sys
if 'testpack' in sys.modules:
print "Imported the good way"
else:
print "Imported the bad way"
####
#### __init__.py
import teststuff
####
然而,请注意,这样做会留下一些尴尬的问题。您将无法执行import testpack.teststuff
。此外,该人仍有可能以好的和坏的方式导入teststuff,在sys.modules中创建两个单独的副本。
如果您不是“仍然提供旧方式”,请编辑以澄清。