Python:从(当前已弃用的)位置导入模块时发出警告

时间:2012-05-31 00:34:30

标签: python python-module python-import

我们有一个应用程序,使其用户可以使用插件扩展它。我们提供了一些辅助模块,因此用户可以使用

访问它们的插件
import helpermodule

现在我们已经决定最好更改辅助模块的包装,以便所有这些都从主包加载:

from ourpackage import helpermodule

由于我们不想破坏用户插件中存在的代码,我们仍然提供旧方法。 (实际上我们刚刚在我们的源代码中的__init__.py目录中的ourpackage文件中导入了辅助模块。)我们非常希望发出警告(使用warnings标准库)当用户脚本以旧方式导入辅助模块时。

所以我的问题是:有没有办法判断用户是否以“错误”的方式导入了辅助模块?理想情况下,我们希望在不检查用户代码的情况下实现这一目标。

1 个答案:

答案 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中创建两个单独的副本。

如果您不是“仍然提供旧方式”,请编辑以澄清。

相关问题