python基础:模块导入细节分析

(一)import导入方式:

在这里插入图片描述

(二)不同文件的sys.path分析
在这里插入图片描述

import 语句找python1224.demo01.demo01_test01,就先从path列表第一项路径开始找,找不到就报错
在这里插入图片描述

(三)from import 方式
在这里插入图片描述
import 后面只能跟模块或者模块中的函数,不能跟包,跟了包, 下面代码就会标红报错。
在这里插入图片描述

(四)from 包 import * 要注意
import * 要在__init__.py中配置允许使用的模块,用__all__配置,没在里面的,不管是简单变量还是啥,都不能导入成功

在这里插入图片描述
解决方法,在demo01下的__init__.py作如下操作:

在这里插入图片描述

在这里插入图片描述

其实还有一种方法,跟第九项的单独导入解决方法一样,在__init__.py中可以导入demon01_test.py和demon02_rest.py
如图:
在这里插入图片描述

(五)相对与绝对导入:

我们的最顶级包base是写给别人用的,然后在base包内部也会有彼此之间互相导入的需求,这时候就有绝对导入和相对导入两种方式:

绝对导入:以base作为起始

相对导入:用.或者…的方式最为起始(只能在一个包中使用,不能用于不同目录内)

1.绝对导入
在这里插入图片描述

2.相对导入

相对路径运行注意事项:
在没有明确指定包结构的情况下,Python 是根据 name 来决定一个模块在包中的结构的,如果是 main 则它本身是顶层模块,没有包结构,如果是base.demo01.demo02 结构,那么顶层模块是 base。
如果是相对导入,一个模块必须有包结构且只能导入它的顶层模块内部的模块
如果一个模块被直接运行,则它自己为顶层模块,不存在层次结构,所以找不到其他的相对路径。
在这里插入图片描述
若不在demo04_test01.py直接点击运行,而是在另一个文件(比如all_to_test)中调用demo04_test01.py且demo04_test01.py也有相当对导入“…”是可以的.

(六)import导入自定义包的子模块:
特别需要注意的是:可以用import导入内置或者第三方模块(已经在sys.path中),但是要绝对避免使用import来导入自定义包的子模块(没有在sys.path中),应该使用from… import …的绝对或者相对导入。

注意:all_to_test.py是与demo01, demo02, demo03,同级的在python1224包下的模块

在这里插入图片描述

上图能运行的原因:执行demo01.test01,到了import这句,解释器会搜索路径去查找demo01.test02,正好他俩是邻居,都在demo01下(看红圈),用本文件的路径也能找demo01.test02,所以能执行。如果我们在all_to_test中调用了demo01_test01.py,就会出错了,因为这时候的sys.path,就是all_to_test.py的了,找不到demo01.test02.py了,所以报错
注意:无论print(sys.path)在哪,打出的路径,一定是你执行的那个模块的路径,比如print(sys.path)是在demo01_test01.py中,
但all_to_test.py调用了demo01_test01.py,而all_to_test.py本身没有print(sys.path),执行all_to_test.py时,也会打印路径,而且打印出的是all_to_test.py的路径,并非demo01_test01.py的路径。

在这里插入图片描述

在这里插入图片描述

(七)导入自定义包用import demo01_test02报错 的 解决方法
报错的原因无非就是在上图打印出的路径中找不到demo01_test02,其实我们可以人为添上他的路径。

在这里插入图片描述

在这里插入图片描述

这种添加路径以后必用,在这里理解一下。但导包基本不这样用,from … import 这种相对导入,和绝对导入用的多。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值