首先我們來了解一下,為什么會出現這樣的問題,以及python搜索包的機制是怎么樣的
1.為什么會出現這樣的問題?
包是向下搜索機制.
2.為什么ide中執行沒有報找不到包的問題?
python搜索機制,在ide中是以項目為根路徑, 所以它的搜索機制是從項目根路徑開始向下搜索.
3.為什么命令行執行時會報找不到包的錯誤?
這是因為命令行執行的時候,是以當前執行的py文件所在目錄級別的下一級開始搜索.
這個可能有一點不好理解.
上個例子:
root
.......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 #相對執行