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、结果事情搞定脚本运行成功