module - python模块from import语句相对导入,加不加点号有什么区别?
巴扎黑
巴扎黑 2017-04-18 10:34:44
0
2
1094

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前面的点号去掉之后可以正常输出,为什么呢?

谢谢

巴扎黑
巴扎黑

répondre à tous(2)
小葫芦

L'importation relative ne peut être utilisée que dans le même package et les fichiers du package ne peuvent pas être exécutés indépendamment

巴扎黑

t.py est exécuté comme script principal. S'il contient une méthode from, une erreur sera signalée (seuls les modules du package utilisent cette méthode)
Même si _init_ est ajouté, vous exécutez toujours. directement. La méthode n’a pas changé. Vous devriez passer à python -m xxx.t

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal