ホームページ  >  に質問  >  本文

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.py
Traceback (most recent call last):
  File "t.py", line 3, in <module>
    from .util.db import var
ValueError: Attempted relative import in non-package

提示不能在non-package下导入。

在当前目录下新建__init__.py后依然是相同错误。

但是将util前面的点号去掉之后可以正常输出,为什么呢?

谢谢

巴扎黑巴扎黑2741日前1059

全員に返信(2)返信します

  • 高洛峰

    高洛峰2017-04-18 10:36:44

    相対インポートは同じパッケージ内でのみ使用でき、パッケージ内のファイルを独立して実行することはできません

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:36:44

    t.py はメインスクリプトとして実行されます。その中に from. メソッドがある場合、エラーが報告されます (パッケージ内のモジュールのみがこのメソッドを使用します)。
    _init_ が追加された場合でも、それを直接実行します。方法は変わっていません。 python -m xxx.t に変更する必要があります

    返事
    0
  • キャンセル返事