相信初心們不少都會遇到這樣的問題。python
自建模塊放在項目中的公用模塊包中,開發工具(pycharm或vscode等等)裏面完美運行,上線或者在shell命令中卻運行報錯,找不到模塊:shell
ModuleNotFoundError: No module named 'xxxx'
遇到這個錯誤的時候,我也曾很是苦惱 ...app
各類度娘 .....ide
多數方法基本無效...(也可能我太笨,或太背...)工具
在經歷了2個半小時的挫折以後,決定本身解決...開發工具
在此分享一下我的解決方案。code
個人項目結構是這樣的:圖片
spider02:爲項目根目錄路徑開發
spiders:爲爬蟲項目包,其下分N種爬蟲。pycharm
_tools包:就是咱們全部爬蟲公用的工具包了
那麼問題來了。咱們該如何倒這個自建的工具包呢?
咱們都知道,倒包經常使用方式分兩種:
以當前路徑爲準,輸入目標模塊 或 包的路徑: from .._tools import xxx
以項目根目錄爲準,輸入目標模塊 或 包的路徑: from spiders._tools import xxx
我的建議使用第二種方法。因此,咱們的導包須要這樣倒:
from spider._tools import *
這樣的好處就是,一切都以項目根目錄爲開始,比較統一,不容易出錯。
說完了導包,咱們最後就來講該怎麼設置這個自建的模塊包呢。
若是光有__init__.py文件的話,也只能說明他是一個可導的文件包。
若是你直接導入它的話,就會報錯。由於,import須要搜索系統環境變量,來肯定所導包的位置。若是找不到,固然會報錯 ...
直奔主題....
Mac系統的環境變量:
在下列文件中,添加你的項目絕對路徑:
/etc/profile
/etc/paths
我的建議添加到第二個裏面。
若是說你不想改變系統的,那麼把項目絕對路徑添加到私人環境變量中也ok:
/private/etc/paths
這是用戶私人的全局,只要打開電腦,登錄後,就會加載。
有人會說,你直接append不就好了麼。
爲想說的是;;;;
若是直接append的話,你就須要把
【每一個用到tools模塊包,或是自建包下面的文件導其餘自建包模塊的時候,要在全部py文件中,都去寫一遍append...】
好了,就寫這麼多....上班時候寫的...見諒。
補充一句,任何項目中導包地方,都是以項目根目錄爲準的。