gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:22:55 27 4
gpt4 key购买 nike

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

 if not has_imported("somemodule"):
print('you have not imported somemodule')

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

最佳答案

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

import sys

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

来自文档:

This is a dictionary that maps module names to modules which have already been loaded.

请注意, import statement做两件事:

  1. 如果该模块之前从未被导入过(== 不存在于 sys.modules 中),则将其加载并添加到 sys.modules .
  2. 在当前命名空间中绑定(bind) 1 个或多个引用模块对象或作为模块命名空间成员的对象的名称。

表达式 modulename not in sys.modules测试步骤 1 是否发生。测试步骤 2 的结果需要知道确切的 import声明被使用,因为它们设置了不同的名称来引用不同的对象:

  • import modulenamemodulename = sys.modules['modulename']
  • import packagename.nestedmodulepackagename = sys.modules['packagename'] (无论您添加多少额外关卡)
  • import modulename as altnamealtname = sys.module['modulename']
  • import packagename.nestedmodule as altnamealtname = sys.modules['packagename.nestedmodule']
  • from somemodule import objectnameobjectname = sys.modules['somemodule'].objectname
  • from packagename import nestedmodulenamenestedmodulename = sys.modules['packagename.nestedmodulename'] (仅当在此导入之前 nestedmodulename 命名空间中没有名为 packagename 的对象时,此时会将嵌套模块的附加名称添加到父包命名空间中)
  • from somemodule import objectname as altnamealtname = sys.modules['somemodule'].objectname
  • from packagename import nestedmodulename as altnamealtname = sys.modules['packagename.nestedmodulename'] (仅当在此导入之前 nestedmodulename 命名空间中没有名为 packagename 的对象时,此时会将嵌套模块的附加名称添加到父包命名空间中)

您可以测试导入对象绑定(bind)的名称是否存在于给定的命名空间中:

# is this name visible in the current scope:
'importedname' in dir()

# or, is this a name in the globals of the current module:
'importedname' in globals()

# or, does the name exist in the namespace of another module:
'importedname' in globals(sys.modules['somemodule'])

这仅告诉您名称存在(已绑定(bind)),而不是它是否引用特定模块或来自该模块的对象。您可以进一步检查该对象或测试它是否与 sys.modules 中可用的对象相同。 ,如果您需要排除从那时起该名称已完全设置为其他名称。

关于python - 如何检查模块是否已导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30483246/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com