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

use*_*514 44 python testing import module

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

例如,我需要基础知识:

if not has_imported("sys"):
   import sys
Run Code Online (Sandbox Code Playgroud)

if not has_imported("sys.path"): 
   from sys import path
Run Code Online (Sandbox Code Playgroud)

谢谢!

RGS.

感谢您的所有评论:代码已粘贴在此处. 自动导入文件夹中的所有子模块然后调用相同的名称函数 - python runtime inspect相关

小智 50

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

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

如果你有充分的理由:sys.modules是一个包含已经导入的所有模块的字典.但它仅包含模块,而且由于方式的from <module> import <variable>作品(导入整个模块像往常一样,提取你从它导入的东西),from sys import path只会增加syssys.modules(如果它是不是已经进口在启动时).像你预期的那样from pkg import module增加pkg.module.


Joh*_*ohn 14

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

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

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

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


小智 8

from sys import modules
try:
    module = modules[module_name]
except KeyError:
    __import__('m')   
Run Code Online (Sandbox Code Playgroud)

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