如何测试模块是否已在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
答案 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')
这是我在运行时更改代码的解决方案!