module - python模塊from import語句相對導入,加不加點號有什么區別?
問題描述
python版本為2.7
目錄結構
$ ls -R.:t.py util/./util:__init__.py __init__.pyc db.py db.pyc
內容
util/db.py
# coding=utf-8 var=100 def show(): print var
t.py
# coding=utf-8 from .util.db import var # util包前面加點print var if __name__==’__main__’: print var
運行報錯
$ python t.pyTraceback (most recent call last): File 't.py', line 3, in <module> from .util.db import varValueError: Attempted relative import in non-package
提示不能在non-package下導入。
在當前目錄下新建__init__.py后依然是相同錯誤。
但是將util前面的點號去掉之后可以正常輸出,為什么呢?
謝謝
問題解答
回答1:相對導入只能用于同一個package里,并且包內的文件不能單獨運行
回答2:t.py是作為主腳本執行的,如果里面有from .的方式就回報錯(只有包內模塊才用這中方式)即使加了_init_,但是你還是直接執行的,方式沒變。你應該改成python -m xxx.t
