首先咱們來了解一下,爲何會出現這樣的問題,以及python搜索包的機制是怎麼樣的python
1.爲何會出現這樣的問題?web
包是向下搜索機制.app
2.爲何ide中執行沒有報找不到包的問題?ide
python搜索機制,在ide中是以項目爲根路徑, 因此它的搜索機制是從項目根路徑開始向下搜索.spa
3.爲何命令行執行時會報找不到包的錯誤?命令行
這是由於命令行執行的時候,是以當前執行的py文件所在目錄級別的下一級開始搜索. code
這個可能有一點很差理解.blog
上個例子:cmd
rootit
.......web(一級目錄)
......sett(二級目錄)
.......views(二級目錄)
......service.py(二級目錄) (這個命令行執行文件. 命令行運行時,提示找不到views以及sett中的包.)
.......包搜索級別(三級目錄)
如今瞭解了問題的緣由,那麼怎麼解決呢?有這麼簡單的兩種辦法?
1.在service.py文件中,導入sett包和views包以前加入增長root路徑操做. root要增長到web父目錄.
######################################################### #將根目錄加入sys.path中,解決命令行找不到包的問題 import sys import os curPath = os.path.abspath(os.path.dirname(__file__)) rootPath = os.path.split(curPath)[0] sys.path.append(rootPath) #########################################################
以上增長到哪一個級別要,根據實際狀況,靈活運用. 其實目的就是指定一個頂級目錄.來克服向下搜索包的問題.
2.在web平級別新建一個py文件. 而後將要執行的py文件導入進去便可.(並不須要做其它操做,看實際狀況.)
from web import service
3.cmd命令行進行項目根目錄,採用相對路徑去執行該py文件。
例如:d盤下test_project項目下有個main.py文件
cmd cd d:\test_project ./main.py #相對執行