module'对象没有属性'PortScanner

14 投票
4 回答
38532 浏览
提问于 2025-04-17 16:06

我在使用Ubuntu 12.04,并安装了python-nmap来创建一个脚本。如果我在IDLE中输入以下内容,它可以正常运行:

import nmap
nm = nmap.PortScanner()
nm.scan('127.0.0.1', '22-443')

但是,如果我在Eclipse中执行这个,就会出现以下错误:

Traceback (most recent call last):
  File "/home/russ/workspace/ViPyNmap/MyFiles/nmaptest.py", line 2, in <module>
    nm = nmap.PortScanner()
AttributeError: 'module' object has no attribute 'PortScanner'

我已经把egg文件和文件夹添加到Eclipse项目的路径中,但还是不行。我在这样做之后也重启了Eclipse,还是没用。对于Eclipse和Python的经验不足,我感到很抱歉,感谢大家的帮助。

4 个回答

2

出现这个问题的原因是,你创建的模块叫做 nmap.py,这个名字和你想用的 requests 模块冲突了。

为了避免这种情况,你应该把你的模块改个名字。还有,可能你在创建 nmap.py 的时候,也生成了一个 nmap.pyc 的文件,这个文件和 nmap.py 在同一个地方。记得在改名后把这个 nmap.pyc 文件也删掉,因为解释器还是会查找这个文件,这样就会再次出现错误。

解决问题的例子:

把文件改名为 nmapscan.py,删除 nmap.pyc,然后再运行一次。

3

1 分析

如果你查看一下源代码 nmap.py,它在目录 /usr/local/lib/python2.7/dist-packages/nmap/ 下,你会发现里面没有 PortScanner 这个类。

2 解决方案

2.1 方法一

你应该删除目录 .../nmap/ 以及里面的所有文件,然后在新的包目录下安装新的 nmap 包,或者使用 python setup.py install 来安装。

2.2 方法二

你也可以把新的包里的 nmap.py 文件复制到你的目录 .../MyFiles/,和你的 Python 文件 nmaptest.py 一起,然后运行命令 python nmaptest.py

祝你好运!

36

你可能安装的是“nmap”这个包,而不是“python-nmap”:

这里输入图片描述

所以,先卸载“nmap”,然后再安装“python-nmap”:

pip uninstall nmap
pip install python-nmap

撰写回答