首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python3找不到软件包模块

Python3找不到软件包模块
EN

Stack Overflow用户
提问于 2019-05-22 05:32:53
回答 2查看 49关注 0票数 0

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

代码语言:javascript
复制
ModuleNotFoundError: No module named 'icmpscan'

我做了一个sys.path,可以确认正确的路径已经就位。这些文件位于D:\PythonProjects\Networking\tools,当我执行sys.path时,D:\PythonProjects会出现。

下面是我的目录结构:

代码语言:javascript
复制
dns_poison.py
netscanner/
    __init__.py
    icmpscan.py

这些文件的代码片段如下:

dns_poison.py

代码语言:javascript
复制
import netscanner

netscanner\__init__.py

代码语言:javascript
复制
from icmpscan import ICMPScan

netscanner\icmpscan.py

代码语言:javascript
复制
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项目中使用了完全相同的方法,没有任何问题。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-22 06:17:25

当您运行python dns_poison.py时,导入器检查模块路径,然后检查本地目录,并最终找到包含以下内容的netscanner包:

代码语言:javascript
复制
netscanner
netscanner.icmpscan
netscanner.icmpscan.ICMPScan

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

适用于Python 3.x

  • from netscanner.icmpscan import ICMPScan
  1. from .icmpscan import ICMPScan,适用于Python2.x/3.x

以下是一些参考资料:

票数 1
EN

Stack Overflow用户

发布于 2019-05-22 06:31:21

考虑这一点最简单的方法是,导入应该相对于程序入口点文件进行处理。就我个人而言,我发现这是处理导入路径的最简单和最简单的方法。

在您的示例中,我会:

代码语言:javascript
复制
from netscanner.icmpscan import ICMPScan

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56246641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档