如何检查是否已导入python模块?

yuv*_*val 63 python python-import

如何检查代码中某处是否导入了模块?

 if not has_imported("sys"):
     print 'you have not imported sys'
Run Code Online (Sandbox Code Playgroud)

我想检查我是否已经导入模块的原因是因为我有一个我不想导入的模块,因为有时它会弄乱我的程序.

Mar*_*ers 88

测试sys.modules字典中的模块名称:

import sys

modulename = 'datetime'
if modulename not in sys.modules:
    print 'You have not imported the {} module'.format(modulename)
Run Code Online (Sandbox Code Playgroud)

从文件:

这是一个将模块名称映射到已加载的模块的字典.

  • @VigneshKalai:那句话不解析,对不起.`sys.modules`包含在解释器*的当前​​实例中的任何位置使用的所有模块.如果在任何其他Python模块*中使用`datetime`*它将显示在那里. (4认同)
  • @ user15964:globals()中的'np'就足够了。 (2认同)

Har*_*ara 16

使用sys.modules来测试是否已导入模块(我使用unicodedata作为示例):

>>> import sys
>>> 'unicodedata' in sys.modules
False
>>> import unicodedata
>>> 'unicodedata' in sys.modules
True
Run Code Online (Sandbox Code Playgroud)


mor*_*n68 15

对于接受的sys.modules答案,我要添加一个警告,要注意在导入时重命名模块:

>>> import sys
>>> import datetime as dt
>>> 'dt' in sys.modules
False
>>> 'datetime' in sys.modules
True
Run Code Online (Sandbox Code Playgroud)


run*_*gel 8

使用:

if "sys" not in dir():
  print("sys not imported!")
Run Code Online (Sandbox Code Playgroud)

这在代码的开头(顶部)效果很好,但应该谨慎使用,以防创建另一个名为sys的对象。


小智 5

sys.modules 包含在解释器当前实例中任何地方使用的所有模块,因此如果在任何其他 Python 模块中导入就会显示。

dir() 检查名称是否在当前命名空间中定义。

2 的组合比每个​​单独的组合更安全,只要您没有定义copy自己就可以工作。

if ('copy' in sys.modules) and ('copy' in dir()):
Run Code Online (Sandbox Code Playgroud)