Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用importlib.util检查库时出错_Python_Python 3.x_Python Importlib - Fatal编程技术网

Python 使用importlib.util检查库时出错

Python 使用importlib.util检查库时出错,python,python-3.x,python-importlib,Python,Python 3.x,Python Importlib,我试图使用importlib库来验证是否在执行Python 3.5.2中脚本的计算机上安装了nmap库 我试图使用importlib.util.find_spec(“nmap”)但收到以下错误 >>> import importlib >>> importlib.util.find_spec("nmap") Traceback (most recent call last): File "<stdin>", line 1, in <mod

我试图使用importlib库来验证是否在执行Python 3.5.2中脚本的计算机上安装了nmap库

我试图使用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'
试试这个:

from importlib import util
util.find_spec("nmap")
我打算调查,但老实说,我不知道为什么一个有效,另一个无效。此外,请观看以下互动课程:

>>> import importlib
>>> importlib.util
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'importlib' has no attribute 'util'
>>> from importlib import util
>>> util
<module 'importlib.util' from '/usr/lib/python3.5/importlib/util.py'>
>>> importlib.util
<module 'importlib.util' from '/usr/lib/python3.5/importlib/util.py'>
因此,它可能是
importlib
所特有的

更新#3 正如@kfb在评论中指出的,它似乎确实与
importlib
有关。请参阅下面的评论:

importlib/util.py
确实导入了
importlib.\u bootstrap
,因此我假设这是真实的。如果我的理解是正确的,当您执行导入导入导入lib时,子模块将被初始化,但不会为您导入的导入导入导入lib模块对象初始化。此时,如果执行
dir(importlib)
操作,将不会看到
util
。有趣的是,在您尝试访问
importlib.util
并获得
AttributeError
后,
util
(以及其他子模块)将被加载/初始化,现在您可以访问
importlib.util

>>> import importlib
>>> dir(importlib)
['_RELOADING', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__import__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '_bootstrap', '_bootstrap_external', '_imp', '_r_long', '_w_long', 'find_loader', 'import_module', 'invalidate_caches', 'reload', 'sys', 'types', 'warnings']
>>> importlib.util
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'importlib' has no attribute 'util'
>>> importlib.util
<module 'importlib.util' from '/usr/lib/python3.5/importlib/util.py'>
>>> dir(importlib)
['_RELOADING', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__import__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '_bootstrap', '_bootstrap_external', '_imp', '_r_long', '_w_long', 'abc', 'find_loader', 'import_module', 'invalidate_caches', 'machinery', 'reload', 'sys', 'types', 'util', 'warnings']
导入导入库 >>>处长(进口管制) “UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU_模块“,”使_缓存无效“,”重新加载“,”系统“,”类型“,”警告“] >>>importlib.util 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 AttributeError:模块“importlib”没有属性“util” >>>importlib.util >>>处长(进口管制) “UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU“,”导入模块“,”使缓存无效“,”机械“,”重新加载“,”系统“,”类型“,”util“,”警告“]
可能是在说明显而易见的问题,但您在尝试使用
importlib
之前是否执行了
importlib
?@ldjaw是的,很抱歉在问题中没有说明这一点。为清晰起见,编辑了问题。@idjaw刚刚尝试,没有爱情:(相同的错误消息。我尝试了这个,它说util不存在,很漂亮-看起来像是这样!这个没有返回任何东西,我理解这意味着它工作正常。谢谢!@DKNUCKLES,太好了!不确定为什么它不以其他方式工作…在我更新的答案中看到奇怪的交互会话。谢谢为此。我希望我能不止一次地为你的帮助投票。我已经能够拼凑出一些对我有用的东西,我将在我的问题中发布。看起来是这样。@DKNUCKLES没问题!当像你这样有趣的问题出现时,我很高兴。这对提问者和提问者来说都是一个学习的好机会回答者!
>>> import datetime
>>> datetime
<module 'datetime' from '/usr/lib/python3.5/datetime.py'>
>>> datetime.datetime
<class 'datetime.datetime'>
>>> import urllib
>>> urllib
<module 'urllib' from '/usr/lib/python3.5/urllib/__init__.py'>
>>> urllib.error
<module 'urllib.error' from '/usr/lib/python3.5/urllib/error.py'>
# Until bootstrapping is complete, DO NOT import any modules that attempt
# to import importlib._bootstrap (directly or indirectly). Since this
# partially initialised package would be present in sys.modules, those
# modules would get an uninitialised copy of the source version, instead
# of a fully initialised version (either the frozen one or the one
# initialised below if the frozen one is not available).
>>> import importlib
>>> dir(importlib)
['_RELOADING', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__import__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '_bootstrap', '_bootstrap_external', '_imp', '_r_long', '_w_long', 'find_loader', 'import_module', 'invalidate_caches', 'reload', 'sys', 'types', 'warnings']
>>> importlib.util
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'importlib' has no attribute 'util'
>>> importlib.util
<module 'importlib.util' from '/usr/lib/python3.5/importlib/util.py'>
>>> dir(importlib)
['_RELOADING', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__import__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '_bootstrap', '_bootstrap_external', '_imp', '_r_long', '_w_long', 'abc', 'find_loader', 'import_module', 'invalidate_caches', 'machinery', 'reload', 'sys', 'types', 'util', 'warnings']