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

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

谢谢

巴扎黑
巴扎黑

모든 응답(2)
小葫芦

상대 가져오기는 동일한 패키지 내에서만 사용할 수 있으며, 패키지 내 파일은 독립적으로 실행할 수 없습니다

巴扎黑

t.py가 메인 스크립트로 실행됩니다. from.메소드가 있으면 오류가 발생합니다. (패키지의 모듈만 이 메소드를 사용합니다.)
_init_를 추가해도 계속 실행됩니다. 직접적으로 방법은 변경되지 않았습니다. python -m xxx.t

로 변경해야 합니다.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿