【问题标题】:How do I check if a python module has been imported?如何检查是否已导入 python 模块?
【发布时间】:2017-08-31 14:11:08
【问题描述】:

例如,我像 import json 这样导入 json,现在我想检查代码中的某个位置是否已导入。它应该类似于:has_imported(module_name)

我之所以问这个问题是因为我想了解pkgutil.walk_packages() 的工作原理。它必须导入它列出的模块,但由于某种原因,某些模块没有被导入。似乎我必须使用单独的函数导入它们,但首先该函数需要“知道”它作为参数获取的模块是否已导入。

有一些类似的问题,但我对答案远非满意。

【问题讨论】:

  • 如果您在文件顶部写import json,那么您可以确定它已导入该文件。这并不意味着它将被导入 everywhere (在其他文件中)。这可能是造成混乱的原因吗?或者您是否想弄清楚是否有任何一个包通常已被任何其他模块导入到某个地方? (如果有,有什么用?)
  • 如果您想知道pkgutil.walk_packages() 的工作原理,为什么不知道just look at its source code
  • @deceze 不,不是。我使用walk_packages 导入模块(据我所知,它会即时导入模块),但列表中的某些模块似乎没有被导入。我只是想弄清楚为什么,
  • 那你可能更想问一个具体的问题……?
  • @deceze 在问这个之前我已经这样做了,但没有人回答......

标签: python


【解决方案1】:

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

import sys

print("sys" in sys.modules) #True
print("datetime" in sys.modules) #False
print("json" in sys.modules) #False

【讨论】:

  • 在交互模式下全部返回True。怎么样?
  • @Foobard,尝试打开另一个命令行实例(或您正在使用的其他实例)。我刚刚在我的终端(版本 Python 3)中检查了它 - 日期时间和 json 检查返回 False
  • 我也刚刚在我的终端中检查了它,是的,现在它可以按预期工作了。我想知道为什么它不在那个终端。我 100% 确定我没有导入我检查过的模块。
猜你喜欢
  • 2015-08-09
  • 1970-01-01
  • 2020-01-14
  • 2020-04-03
  • 1970-01-01
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多