栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python中import方法浅析

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python中import方法浅析

文章目录
          • 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绝对路径这样层级也比较清楚,不会出现问题

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/926246.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号