python 明明安装模块,却导入不了 no module name all


本人碰到一个实例:
test_123的脚本如下(通过traceroute来生成路由跟踪图表):

#!/usr/bin/python
import os,sys,time,subprocess
import warnings,logging

warnings.filterwarnings("ignore",category=DeprecationWarning)
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import traceroute

domains = raw_input('Please input on or more IP/domains:')
target = domain.split(' ')
dport = [80]
if len(target) >= 1 and target[0]!='':
res,unans = traceroute(target,dport=dport,retry=2)
res.graph(target="> test.svg")
time.sleep(1)
subprocess.Popen("/usr/bin/convert test.svg test.png",shell=True)
else:
print "IP/domain number of errors,exit"


但是运行报错:no module name all

但是直接import scapy是没问题的。因此,判断可能是找不到all.py这个文件

查一些网上的资料,发现如下这种方法:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>通过sys.path.append这样来增加
对于模块和自己写的程序不在同一个目录下,可以把模块的路径通过sys.path.append(路径)添加到程序中。

对于仍然不能用,解释器报错说找不到你要的模块 
No Module Named '自己的模块'
在程序开头加上:

import sys
sys.path.append(’引用模块的地址')

例子如下 : 
在 /usr/local/sp_system/sp_os中有一个os_sp.py 
需要使用 os_sp.py 中的 def foo

则应该 
import sys
sys.path.append(’/usr/local/sp_system/sp_os')
from sp_os import os_sp
os_sp.foo()

也可以
import sys
sys.path.append(’/usr/local/sp_system/sp_os/os_sp')
import os_sp
os_sp.foo()
特别注意如果 os_sp 模块调用了sp_system的别的包 则要用上一种方式 并注意级层

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>道理相通后,我的直接做法是
1、[root@redhat174 scapy]# pwd
/project/scapy/scapy-2.2.0/scapy
找到scapy模块的python安装包 

ls 一下发现果然里面有all.py

2、ls /usr/lib64/python2.6/site-packages 下面没有找到scapy的相关信息

3、那事情就简单了,cp -rf /project/scapy/scapy-2.2.0/scapy /usr/lib64/python2.6/site-packages 直接复制过去,或者直接软链接过去

4、结果事情搞定脚本运行成功


posted @ 2017-07-31 10:05    阅读(26938)  评论(0编辑  收藏  举报