Python基础知识之包的绝对导入和相对导入!

21 篇文章 0 订阅
20 篇文章 0 订阅

Python import 的搜索路径
1. 在当前目录下搜索该模块
2. 在环境变量 PYTHONPATH 中指定的路径列表中依次搜索
3. 在 Python 安装路径的 lib 库中搜索

包:

为避免模块名冲突,Python引入了按目录组织模块的方法,称之为包(package)

当一个文件夹下有__init__.py时,意为该文件夹是一个包(package),其下的多个模块(module)构成一个整体,而这些模块(module)都可通过同一个包(package)导入其他代码中。
Python3 中:包可以通过__init__.py 指定模块;有没有__init__.py没有太大区别,文件夹会自动当作包
Python2 中:包可以通过__init__.py 指定模块;包必须有__init__.py,否则导入时会报错
__init__.py文件用于组织包,方便管理各个模块之间的引用、控制着包的导入行为。 
from pacakge_1 import * 这种形式的写法,需在__init__.py中加上:

 __all__ = ['file_a', 'file_b']

package_1下有file_a.py和file_b.py,在导入时__init__.py文件将被执行。 

绝对导入和相对导入

绝对导入:

 import A.B 或 from A import B

相对导入:

from . import B 或 from ..A import B,

.代表当前模块,..代表上层模块,...代表上上层模块,依次类推。

优点:
相对导入可以避免硬编码带来的维护问题,例如我们改了某一顶层包的名,那么其子包所有的导入就都不能用了。
缺点:
存在相对导入语句的模块,不能直接运行,否则会有异常:
ValueError: Attempted relative import in non-package

顶层模块:

在没有明确指定包结构的情况下,Python 是根据 __name__ 来决定一个模块在包中的结构的,如果是__main__ 则它本身是顶层模块,没有包结构。
如果是A.B.C 结构,那么顶层模块是A。
基本上遵循这样的原则: 如果是相对导入,一个模块必须有包结构且只能导入它的顶层模块内部的模块

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值