如何在python中导入部分模块?

如何在python中导入部分模块?,python,module,import,Python,Module,Import,我需要使用python模块(在某些库中提供)。该模块如下所示: class A: def f1(): ... print "Done" ... 我只需要类A的功能。然而,当我导入模块时,底部的代码(print和其他)就会被执行。有没有办法避免这种情况?基本上,我需要导入模块的一部分:“从模块1导入a”,它应该只导入a。可能吗?是的,当然: from module1 import A 是一般语法。例如: from datetime import timedelta 底部的代码应该像

我需要使用python模块(在某些库中提供)。该模块如下所示:

class A:
  def f1():
  ...

print "Done"
...
我只需要类A的功能。然而,当我导入模块时,底部的代码(print和其他)就会被执行。有没有办法避免这种情况?基本上,我需要导入模块的一部分:“从模块1导入a”,它应该只导入a。可能吗?

是的,当然:

from module1 import A
是一般语法。例如:

from datetime import timedelta
底部的代码应该像这样包装,以防止在导入时运行:

if __name__ == "__main__":
  # Put code that should only run when the module
  # is used as a stand-alone program, here.
  # It will not run when the module is imported.
除此之外,通常的做法是保护模块中的代码,该代码仅在模块直接用于以下用途时才应运行:

if __name__ == "__main__":
    <code to only execute if module called directly>
如果名称=“\uuuuu main\uuuuuuuu”:
<仅在直接调用模块时执行的代码>

通过这种方式,您可以正常导入模块。

如果您只对print语句感到厌烦,您可以将代码的输出重定向到不可见的地方,如本文的一条注释所述:

文件:


但是,如果您想停用文件修改或耗时的代码,我想到的唯一一件事就是一些肮脏的把戏:将您需要的对象复制到另一个文件中,然后导入它(但我不推荐!)。

如果您无法控制模块,因此无法使其看起来像这样,那么您就是SOL。始终这样做。问题是它是一个现有模块,并且底部的代码没有像您提到的那样受到保护。这当然是在后台导入整个模块,但只是将部分模块放在名称空间中。例如,如果
module1.A
仅依赖
module1.B
依赖
werkzeug
,则仍需要安装
werkzeug
。或者,要在导入时重命名某个对象:
从module1导入A作为B
sys.stdout = open(os.devnull, 'w')
# now doing the stuff you need
...

# but do not forget to come back!
sys.stdout = sys.__stdout__