如何在python中提供某些功能,如果安装了特定模块?

问题描述:

以下情况:我编写了一个提供某些功能的模块。这样做可以调用一些命令并解析它们的输出。在某个时候,我现在扩展了这个模块,使它能够解析XML输出。当然,从那时起,这个模块现在依赖于lxml。我没有给出这么多的想法,因为lxml不是一个很大的交易。如何在python中提供某些功能,如果安装了特定模块?

直到我 - 只是偶然 - 碰巧在Raspbian安装上使用我的python模块。由于此安装非常新,我尝试使用pip安装lxml。该平台未能编译。 (我猜是因为500 MB的内存不足以在这样的平台上构建lxml)。

现在我想知道:我的模块能否以这样的方式实现,它提供了一种方法来处理XML数据if只有在lxml已经安装?此功能不是必需的,很少使用。如果一些其他模块可用,那么提供具有基本功能的模块但获得更多功能的最佳pythonic方法是什么?我的想法是对某个特定模块的存在进行某种测试,如果这样做不能引发异常。这怎么可能以一种好的方式在python中完成?我正在使用Linux上提供的默认实现。这种功能是否可以通过不会在其他python解释器/编译器平台上使用此python源代码的方式来实现?

尝试导入。根据成功设置标志。

try: 
    import foo 
    fooavailable = True 
except ImportError: 
    fooavailable = False 
+0

这是否适用于jpython或cpython?我曾经试图编译一个Python程序(出于某些非常具体的原因)。我想这个编译器可能会抱怨这样的代码,但这不是我想要的用例。问题:如果一个解释器多次运行'import foo',是否有问题? –