(2) Python中import的相对导入与绝对导入

1. module和package的定义

在python中,一个.py文件就是一个模块(moudule)。只有一个主运行文件,特征是__name__= '__main__',多个模块通过**包(package)**的形式组织起来,包的特征是目录下包含一个__init__.py的文件。在__init__py文件中,我们常用的方式有:1. 通过__all__ = [moudle_name]的方式自动导入。 2. 通过from . import module的方式导入。
注意:moudule_name 不含.py后缀。

2. 导入的写法

导入的写法主要有两种:

  1. import modlue_name 这种写法只能导入package或module,并且使用内部函数或者类的时侯也要加上package或module name的前缀。
  2. from ... import ... 这种写法比上面更强,还可以导入函数,类和变量,并且使用的时侯也不用加前缀。

3. 相对导入和绝对导入

  1. 绝对导入
    与相对路径和绝对路径的概念一样。在python标准库sys中有一个sys.path的变量,里面记录了绝对导入的搜索路径,当使用from A import B 的时侯就是从sys.path中搜索A.B。另外,sys.path中会包含当前主运行文件的路径作为sys.path列表中的第一个元素。详见链接.
  2. 相对导入
    在相对导入的时侯写法与绝对导入有所不同,如果是当前目录下的module就在前面使用.,如果是当前目录下子包中的模块就用包名前加.来,例如
from . import module_name
from .package_name import module_name

相当不会从sys.path中查找,而直接从当前路径下查找,python3中默认是绝对导入,详见链接.
注意:
1. 相对导入的写法只有前面讲的第二种形式,即from ... import ...形式。

2. 对于主 运行文件不要使用相对导入,这是由于主文件中的.由于主运行文件的__name__被替换成里__main__而不是文件名,因此会报找不到错误,如果非要使用相对导入,可以使用python -m dir.file,详解在上一个链接中也有说到。
**3. 要深入理解绝对导入,绝对导入就是要导入在sys.path中包含的模块,因此不能因为两个文件在同一目录下就是用绝对导入 **
4. 低层级的不能引用高层级的,即子目录不能import父目录的模块

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值