本人碰到一個實例:
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、結果事情搞定腳本運行成功
