python学习——搞懂import

首先区分两个概念,mudule(模块)和package(包),通俗一点来说:【参考】

  • 一个 .py 文件就是个 module
  • package(包)是一个包含__init__.py 文件的目录,该目录下一定得有这个__init__.py文件和其它模块或子包。

如果想要import module,方法是:

import xxx  # 直接导入
import xxx as xx  # 重命名
from xxx import y1, y2 # 部分导入

如果想要import 某一个指定路径下的指定module(模块),这里分几种情况讨论:

  1. 如果想要import的module在当前系统路径的子路径中,可以直接索引进去import
  2. 如果想要import的module在父目录中,是不可以直接被import的,会报错 can’t import top level module之类的错误。这时候需要将父目录加到sys.path中去。

举个栗子,假设目录结构为:

main.py
model
	__init__.py
	backbone.py
	utils
		__init__.py
		model_a.py
		model_b.py
  • 如果我们当前的执行路径处于main.py层级,想要import backbone模块,而backbone.py里面又import了model_a和model_b模块,这时候main.py应该写成:
import model.backbone
from model.backbone import xxx

backbone.py应该写成:(在python3.6中,utils前不加点会报错)

from .utils.model_a import *
from .utils.model_b import *

上面的例子中,两级目录下的__init__.py文件都是空的,当然也可以好好利用这个__init__.py文件,因为package被导入时,init.py有且仅有一次执行机会,所以可以在这里对该目录下的module进行一下统一的管理和重命名等操作,方便后续的调用。

  • 如果我们当前的执行路径处于model_a.py层级,想要调用父目录下的backbone模块,直接import backbone会报错,需要将父目录加入sys.path才可以,在model_a.py中写:
import sys
sys.path.insert(0, '..')
import backbone

这样就不会报错了。

参考1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值