Python3无法找到包模块

时间:2019-05-21 21:32:53

标签: python module package

我有一个名为dns_poison.py的文件,该文件需要调用一个名为netscanner的软件包。当我尝试从dns_poison.py加载icmpscan模块时,出现以下消息:

ModuleNotFoundError: No module named 'icmpscan'

我已经完成了sys.path并可以确认正确的路径。这些文件位于D:\ PythonProjects \ Networking \ tools,并且在执行sys.path时出现D:\ PythonProjects。

这是我的目录结构:

dns_poison.py
netscanner/
    __init__.py
    icmpscan.py

文件的代码段如下:

dns_poison.py

import netscanner

netscanner \ __ init __。py

from icmpscan import ICMPScan

netscanner \ icmpscan.py

class ICMPScan:
    def __init__(self, target, count=2, timeout=1):
        self.target = target
        self.count = count
        self.timeout = timeout
        self.active_hosts = []
       # further code below here....

我不明白为什么它找不到模块,因为我在其他python项目上使用了完全相同的方法,没有任何问题。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

运行python dns_poison.py时,导入程序先检查模块路径,然后检查本地目录,并最终找到具有以下可用选项的netscanner软件包:

netscanner
netscanner.icmpscan
netscanner.icmpscan.ICMPScan

现在我问你,icmpscan在哪里?进口商找不到,因为很好,它不存在。 PYTHONPATH存在于dns_poison.py所在的任何位置,并且不会附加自身以包括任何导入模块的绝对路径,因为这根本不起作用。因此可以找到netscanner,因为它与dns_poison.py处于同一级别,但是进口商不知道icmpscan.py的位置,因为您没有告诉过它。因此,您有两种选择来更改__init__.py

  1. from .icmpscan import ICMPScan,可与Python 3.x一起使用
  2. from netscanner.icmpscan import ICMPScan可与Python 2.x / 3.x一起使用

为您提供的参考资料:

答案 1 :(得分:0)

最简单的思考方式是导入应相对于程序入口点文件进行处理。我个人认为这是处理导入路径的最简单,最简单的方法。

在您的示例中,我将拥有:

from netscanner.icmpscan import ICMPScan

在主文件中,而不是将其添加到 init .py。