使用 importlib.util 检查库时出错

2024-01-09

我正在尝试使用 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'

有人能告诉我哪里出错了吗?

EDIT

我能够使用以下代码使该函数正常工作。

#!/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")

尝试这个:

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'>

嗯是的。我确信这对某人来说是完全有道理的,但对我来说却不是。一旦我弄清楚了,我就会更新。

Update:

将此与以下内容进行比较:

>>> import datetime
>>> datetime
<module 'datetime' from '/usr/lib/python3.5/datetime.py'>
>>> datetime.datetime
<class 'datetime.datetime'>

我认为区别在于,在这种情况下,第一个datetime是一个模块,第二个是一个类,而在importlib.util情况都是模块。所以也许module.module除非两个模块的代码都已加载,否则是不行的,而module.class可以,因为类代码是在导入模块时加载的。

更新#2

不,似乎在很多情况下module.module很好。例如:

>>> 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'>

所以也许这是特定的东西importlib.

更新#3

As @kfb评论中指出,它似乎确实与importlib具体来说。请参阅以下评论__init__.py for importlib https://hg.python.org/cpython/file/tip/Lib/importlib/__init__.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).

importlib/util.py does import importlib._bootstrap所以我假设这是真实的。如果我的理解是正确的,当你这样做时import importlib子模块将被初始化,但不会为importlib您导入的模块对象。此时,如果您这样做dir(importlib)你不会看到util。有趣的是,after您已尝试访问importlib.util并得到了AttributeError, util(以及其他子模块)被加载/初始化,现在你can access 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']
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 importlib.util 检查库时出错 的相关文章

随机推荐

  • 在程序中替换 if..else if..else 树的最佳方法是什么?

    这个问题是由我最近开始经常看到的事情引起的 if else if else结构 虽然它很简单并且有它的用途 但它的一些东西一遍又一遍地告诉我 它可以被更细粒度 更优雅并且通常更容易保持最新的东西所取代 尽可能具体 这就是我的意思 if i
  • 下拉android时SwipeRefreshLayout加载程序不会上升

    我已经将 SwipeRefreshLayout 与 recyclerview 一起使用 它在所有 android 版本中工作正常 但在 Kitkat 中 当我下拉时 SwipeRefreshLayout 加载程序不会上升 也不会刷新 rec
  • ggplot2 中的圆形直方图,条形间距均匀且没有多余的线条

    我正在努力在 ggplot2 中制作一个圆形直方图 以显示 24 小时内呼叫数量的变化情况 我的数据集从 0 开始到 23 每小时的调用次数 df data frame xvar 0 23 y c 468 520 459 256 397 2
  • 实体框架:重新查找最近添加到上下文中的对象

    我正在使用实体框架 并且在 重新查找 我刚刚创建的对象时遇到问题 基本上是这样的 string theId someId private void Test using MyEntities entities new MyEntities
  • 表达 res.download()

    我不知道为什么会这样 但这真的很烦人 我预计该文件将根据快速文档 https expressjs com en api html res download 我有下一个代码 in react App js download gt const
  • 在 PowerShell 中打开所选应用程序中的文件

    我想使用 PowerShell 中的 cmdln 和特定应用程序打开一个文件 就我而言 我有一个文件scripts js我想打开它Notepad 但通常会定期开放notepad exe如果我这样做 Invoke Item scripts j
  • 基类不包含无参数构造函数?

    我通过删除一些空的构造函数来使我的构造函数更加严格 我对继承还很陌生 并且对我得到的错误感到困惑 基类不包含无参数构造函数 如何让 A2 继承 A 而 A 中没有空构造函数 另外 根据我个人的理解 为什么 A2 需要 A 的空构造函数 Cl
  • 在 jspdf.debug.js 中哪里可以更改默认的 pdf 页面宽度和字体大小?

    我需要更改默认 pdf 页面宽度和字体大小在 jspdf debug js 中 在哪里以及如何更改 jspdf debug js 中的默认值 除了使用默认格式之一之外 您还可以以指定的单位指定任何大小 例如 Document of 210m
  • “!!”有什么用? (否定两次)? [复制]

    这个问题在这里已经有答案了 可能的重复 C 代码中的双重否定 https stackoverflow com questions 248693 double negation in c code 比方说 bool var true 它将为变
  • 什么是http多部分请求?

    我编写iPhone应用程序已经有一段时间了 向服务器发送数据 接收数据 通过HTTP协议 没有考虑太多 大多数情况下 我理论上熟悉流程 但我不太熟悉的部分是 HTTP 多部分请求 我知道它的基本结构 但我不知道它的核心 似乎每当我发送非纯文
  • Android Bitmap保存没有透明区域

    我想保存没有透明区域的位图 位图具有大的透明像素 所以我想删除它 我怎样才能做到这一点 我无法添加图片 所以用符号解释 我不想裁剪功能 我希望使用过滤器 透明区域 裁剪这个 要查找位图的非透明区域 请在 x 和 y 中迭代位图并查找非透明区
  • 游戏开发中处理战斗效果

    我正在尝试为我正在修改的个人项目的游戏制定高级技术规范 这是一款可能最接近的回合制冒险游戏Archon http en wikipedia org wiki Archon computer game 就我想做的事情而言 我遇到的麻烦是概念化
  • webkit 浏览器获取 elements.width() 错误

    我正在尝试获得容器的正确计算宽度 所有浏览器都能正确计算出宽度 甚至 IE 但令人惊讶的是 Chrome 和 webKit 浏览器也获得了有线号码 我正在尝试获取总宽度 li 包括它的边框和填充 它的右边距 然后乘以长度 li li 以获得
  • 使用 UIDocumentPickerViewController 在 Swift 中导入文本

    我目前正在学习 iOS 开发课程 作为我项目的一部分 我的任务是使用UIDocumentPickerViewController导入文本 我发现的每个例子要么 a 用 Objective C 编写 要么 b 用于导入UIImage file
  • 在 Clojure 中将“map”与不同大小的集合一起使用

    我想了解在 clojure 中操作不同大小的集合的惯用方式 有没有办法告诉函数 map 用一些默认值填充集合的其余部分 举个例子 假设我有 3 个向量 def x 1 2 3 4 def y 1 2 3 4 5 def z 1 2 3 4
  • 根据选择器中选择的应用程序为 ACTION_SEND 意图设置不同的文本[重复]

    这个问题在这里已经有答案了 如何设置不同的内容 不同的文本 图像 无图像 ACTION SEND意图 基本上我想要电子邮件的长文本和图像 Facebook 的长文本和 Twitter 的短文本 我知道这个问题 https stackover
  • Excel:如果满足条件,则从范围内进行 TEXTJOIN

    我在 Excel 中遇到了一个问题 但我不知道如何解决 上图中有两个表 表 1 列出了个人之间交换的礼物 并标明了赠送者和接受者 我使用 礼物 和 人 是为了更容易在这里讨论 实际上 这些是交换控制信号的设备 这张表可能有数百行长 表 2
  • 正则表达式查找仅包含一个斜杠的 URL

    我正在测试一个网站 需要使用正则表达式来定位我想要包含在测试中的页面 我将仅定位 URL 中都有一个斜杠的产品页面 URL 不显示http 在他们中 以下是我需要匹配的 URL 我想要的看起来像这样 www example com just
  • 如何获取 NSRunningApplication 的参数?

    如何获取启动期间使用的参数列表NSRunningApplication 类似于我跑步时看到的ps aux let workspace NSWorkspace shared let applications workspace running
  • 使用 importlib.util 检查库时出错

    我正在尝试使用 importlib 库来验证 nmap 库是否安装在执行 Python 3 5 2 中的脚本的计算机上 我正在尝试使用importlib util find spec nmap 但收到以下错误 gt gt gt import