如何测试是否导入了一个python模块?

时间:2011-02-17 09:54:40

标签: python testing module import

如何测试模块是否已在python中导入?

例如我需要基础知识:

if not has_imported("sys"):
   import sys

if not has_imported("sys.path"): 
   from sys import path

谢谢!

RGS。

感谢您的所有评论: 代码粘贴在这里。 auto import all sub modules in a folder then invoke same name functions - python runtime inspect related

3 个答案:

答案 0 :(得分:50)

如果你想通过不导入两次来优化,那就省去麻烦了,因为Python已经解决了这个问题。

如果您需要这可以避免NameErrors或其他:修复您的草率编码 - 确保您不需要它,即在您使用它之前定义(导入)所有内容(如果是导入:一次,在启动时,在模块级别。)

如果你有充分的理由:sys.modules是一个字典,其中包含已在某处导入的所有模块。但它只包含模块,并且由于from <module> import <variable>的工作方式(像往常一样导入整个模块,提取从中导入的内容),from sys import path只会将sys添加到{{} 1}}(如果它在启动时尚未导入)。 sys.modules正如您预期的那样添加from pkg import module

答案 1 :(得分:14)

我觉得已经接受的答案并不完全正确。

多次导入同一模块时,Python 仍有开销。 Python 处理它而不会给你一个错误,当然,但这并不意味着它不会减慢你的脚本速度。正如您将从以下URL中看到的那样,多次导入模块时会有重大开销。

例如,在某种情况下,除非在特定条件下,您可能不需要某个模块,如果该模块很大或开销很高,则有理由仅在条件下导入。这并没有明确表示你是一个草率的编码器。

https://wiki.python.org/moin/PythonSpeed/PerformanceTips#Import_Statement_Overhead

答案 2 :(得分:8)

from sys import modules
try:
    module = modules[module_name]
except KeyError:
    __import__('m')   

这是我在运行时更改代码的解决方案!