我试图使用importlib库来验证nmap库是否安装在执行Python 3.5.2脚本的计算机上
我试图使用importlib.util.find_spec("nmap")
,但收到以下错误。
>>> import importlib
>>> importlib.util.find_spec("nmap")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'importlib' has no attribute 'util'
有人能告诉我哪里出错了吗?
编辑
我可以使用下面的代码让函数工作。
#!/usr/bin/pythonw
import importlib
from importlib import util
#check to see if nmap module is installed
find_nmap = util.find_spec("nmap")
if find_nmap is None:
print("Error")
试试这个:
我打算调查,但老实说,我不知道为什么一个有效,另一个无效。同时,观察以下互动会话:
所以…是的。我相信这对某人来说是很有意义的,但对我来说不是。我一想清楚就更新。
更新:
将此与以下内容进行比较:
我认为区别在于,在这种情况下,第一个
datetime
是一个模块,第二个是一个类,而在importlib.util
情况下,两者都是模块。因此,可能module.module
不正常,除非已经加载了来自两个模块的代码,而module.class
正常,因为类代码是在导入模块时加载的。更新#2
不,似乎在很多情况下
module.module
是好的。例如:所以它可能是特定于
importlib
的。更新#3
正如评论中指出的,它似乎确实与} for ^{} 中的以下注释:
importlib
特别相关。请参阅^{importlib/util.py
确实导入了importlib._bootstrap
,所以我假设这是真实的。如果我的理解是正确的,那么当您执行import importlib
操作时,子模块将被初始化,但不会为您导入的importlib
模块对象初始化。此时,如果您执行dir(importlib)
,您将看不到util
。有趣的是,在尝试访问importlib.util
并获得AttributeError
之后,util
(以及其他子模块)被加载/初始化,现在您可以访问importlib.util
!相关问题 更多 >
编程相关推荐