scrapy專案命令列執行報錯:No module named:***解決辦法
阿新 • • 發佈:2019-02-07
一般scrapy專案結構是這樣的:
要執行的檔案路徑:D:\py_workspace\my_scrapy_prjs\jianshu_spider\jianshu\spiders\jianshu_sp.py,在此目錄下開啟命令列執行
python jianshu_sp.py
報錯:No module named 'jianshu'。報錯原因:import語句如下:
from jianshu.items import ArticleItem
分析:cmd下執行python檔案時,當前sys的path變數
並沒有包含到該scrapy專案的根目錄,所以我們要把該scrapy專案的路徑加到sys.path中去。在import語句之前加入如下程式碼:
import sys
import os
fpath = os.path.abspath(os.path.join(os.path.dirname(__file__),".."))
ffpath = os.path.abspath(os.path.join(fpath,".."))
print(ffpath)
sys.path.append(ffpath)
from jianshu.items import ArticleItem
程式碼分析:cmd下執行該檔案時,先獲得該檔案的上級目錄fpath,再獲得上上級目錄ffpath,由於scrapy專案的目錄深度有2層,所以這裡取得上兩級的目錄路徑。
當然也可以把import語句改成這樣:
from jianshu.items import ArticleItem
相對的,上面一長串新增系統變數的的程式碼就可以精簡很多:
import sys
sys.path.append('..')
推薦這種方法,畢竟程式碼看起來簡介很多。接下來再執行這個'jianshu'這個py檔案,就不會報錯了。