python中import方法浅析

import 用法
导入方式

import用来导入其他模块,从而达到代码复用的目的。但是import真的还是很多坑的,如果摸不到门道用起来还是很头疼的,首先我们来说一下它的用法

  • import module_name
  • from Packagename import module_name

这两种方法同曲异工,都是从两个地方去寻找包,第一个是sys.path[可import sys,print (sys.path)]查看,一般也就是python的安装路径下,我们平时pip install的第三方包都可使用import直接导入,第二个是文件的执行目录,也就是os.path路径下进行寻找。

案例分析
  • 目录结构

|---------parent

​ |-----m1.py

​ |-----m2.py

​ |-----son(文件夹)

​ |–m3.py

​ |–m4.py

首先,新建文件夹parent,在文件夹下新建m1.py,m2.py,文件夹下新建son文件夹,然后新建m3.py和m4.py

m1.py中添加内容

import m2
m2.print_m()

m2.py中添加内容

def print_m():
    print ("m2")

运行m1.py,运行我们知道肯定是没问题的,因为m1所在的目录下也有m2.py

那么问题来了,我们在m3.py中添加内容

import m4
m4.print_m4()

m4.py中添加内容:

def print_m4():
    print ("m4")

这时候我们修改m1.py为

import m2
from son import m3
m2.print_m()

这时候运行m1.py就会报错,提示无法导入m4,这是为什么呢,原因其实很简单,我们可以捋一下这个流程,m1中使用from son import m3,这是没有问题的,但是m3中import m4这就会报错,因为我们导入方式中两种方式(sys.path和os path)中m4既不在sys.path中也不在我们m1所在的目录,这就引入了我们非常重要的两个概念,相对路径和绝对路径,在python3中我们的路径读取都是绝对导入(对于sys.path和os path而言)所以报错,所以我们的m3.py需要进行修改为相对路径(这样就变相的把os path添加了)

from . import m4
#.的意思就是获取当前文件所在的目录,也算一种绝对导入了
m4.print_m4()

常用的相对路径有:

from . import module_name #导入和自己同目录的模块
from .package import module #导入和自己同目录的包的模块
from .. import module_name

其实我们在进行相对导入的时候也会碰到很多坑

比如我们把m2.py添加一个函数,然后在m3.py中引用

from .. import m3

这时候我们运行m1.py就会报错,因为这里的…所在的目录是parent比m1的层级更高,所以会报错

ValueError: attempted relative import beyond top-level package

PS:所以我们平时开发python代码的时候我们尽量都是使用path绝对路径这样层级也比较清楚,不会出现问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值