python中import是什么意思_深入理解Python中import机制

module_X.py

from . import module_Yprint "X __name__", __name__

module_Y.py

print "Y __name__", __name__

当我们直接运行python sub_pkg1/module_X.py的时候,会报错

ValueError: Attempted relative import in non-package

当我们这样运行的时候python -m sub_pkg1.module_X, 才能正常运行

Y __name__ sub_pkg1.moduleYX __name__ __main__

为什么会这样?简单地说,直接运行 .py 文件和 import 这个文件有很大区别。Python 解释器判断一个 py 文件属于哪个 package 时并不完全由该文件所在的文件夹决定。它还取决于这个文件是如何 load 进来的(直接运行 or import)。

有两种方式加载一个 py 文件:

作为 top-level 脚本 作为 top-level 脚本指的是直接运行脚本,比如 python xx.py。有且只能有一个 top-level 脚本,就是最开始执行的那个(比如 python xx.py 中的 xx.py)。作为 module 作为 module 是指,执行 python -m xx,或者在其它 py 文件中用 import 语句来加载,那么它就会被当作一个 module。

当一个 py 文件被加载之后,它会被赋予一个名字,保存在__name__属性中。如果是 top-level 脚本,那么名字就是__main__。如果是作为 module,名字就是把它所在的 packages/subpackages 和文件名用 . 连接起来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值