您的位置:首页技术文章
文章详情页

module - python模块from import语句相对导入,加不加点号有什么区别?

【字号: 日期:2022-07-28 13:58:53浏览:42作者:猪猪

问题描述

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

标签: Python 编程