绝对与相对导入与软件开发目录规范

     今日内容

  • 绝对导入与相对导入
  • 包的概念
  • 编程思想的改变
  • 软件开发的目录规范
  • 常见的内置模块

绝对导入与相对导入

1.绝对导入

不管是绝对导入还是相对导入只要涉及到导入都是要看执行文件在哪

绝对导入就是以执行文件所在的sys.path为起始路径,往下一层一层的找

1 # 现在这个是执行文件    文件夹名字为xxx 模块名是 a.py
2 '''
3 如果导入的模块文件路径于执行文件的路径不在一个文件夹下
4 我们想要导入这个文件有两种方法
5 可以把导入的模块路径加入sys.path中
6 也可以使用from import
7 '''
8 from xxx import a  # 这个就是绝对导入

如果是多个文件夹下也可以使用from import语句

1 # 现在有个文件夹里面还有还套着两个文件夹最后一个文件夹中有模块名为a.py
2 
3 # 我们也可以使用from import语句
4 
5 from aaa.bbb.ccc import a
6 
7 # 我们就可以使用a中的所有的功能了

如果一个文件夹下有两个模块文件 执行文件不在这个文件夹下

# a模块
print('from a')
from xxx import b

##############################

# b模块
print('from b')

##############################

# 执行文件
import a

# 绝对导入要看执行文件所在的路径在哪 我们要把绝对路径给找到才行

由于pycharm会把我们把项目的根目录自动添加到sys.path中

所以查找模块肯定不会报错的方法就是永远从根目录开始往下一层一层的找

但是如果其他人不是用pycharm运行代码的话那么我们就需要自己手动把

项目的根目录添加到sys.path中(会有一个模块会帮我们自动获取根目录>>>os模块)

相对导入

关于了解相对导入之前我们要知道一个小知识

  . 在路径中的意思是当前路径

  .. 在路径中的意思是上一层路径

  ../.. 在路径中的意思是上上层路径

相对导入其实是在模块与模块之间导入的,

因为一个执行文件可以有多个模块文件而如果模块中导入其他模块的话

也可以相对导入

当文件夹下有两个模块名并且其中一个模块要导入b模块

# a模块
print('from a')
from . import b
# 按照 . 的形式找到a的当前文件路径就可以找到b文件前提是(b和a是在同一个文件夹下) 

##############################

# b模块
print('from b')

##############################

# 执行文件
import a

# 这样是可以让b导入到a中的而且还不报错
相对导入可以不用参考执行文件所在路径 直接以当前模块文件路径为准
  1.相对导入只能在模块文件中使用, 执行文件不能使用相对导入
  2.相对导入如果实在项目比较复杂的情况下 可能会出错
所以相对导入尽量少用 推荐使用绝对导入

 

 

包的概念

1.如何理解包

  1.专业的角度:

    就是一个文件夹中有__init__.py文件夹

  2.直观的角度:

    就是一个文件夹里面有许多个py文件

2.包的作用

  包的作用我们可以理解为一个文件夹中存放了多个py文件(模块文件)

  仅仅是为了方便管理模块文件

3.具体使用

包名也是需要用英文这样才能被import使用

可以直接:

  import 包名

导入一个包名其实导入的是__init__文件夹,里面有什么功能你才能使用什么

但是我们也可以跳过__init__文件夹,直接使用包里的其他模块 

  from 包名 import 模块名

其实现再在python3解释器中文件夹中有没有__init__文件夹其实已经不重要了

一个文件夹都可以是一个包 但是为什么还需要在包中写上__init__文件夹名称呢?

那是因为在python2中 包中必须有__init__文件夹 没有的话我们是用不了里面的模块的

所以为了兼容python2我们在创建包时还是需要在包中写上__init__文件夹(pycharm会帮我们自动创建)

编程思想的转变

现在我们在编写代码的时候其实已经经历了三个阶段:

1.小白阶段

  就是在叠堆代码一行一行代码的写下来          单个文件夹

2.函数阶段

  将代码按照需求的不同封装成不同的函数       单个文件夹

3.模块阶段

  根据功能的不同拆分为不同的模块文件           多个文件夹

小白阶段就像把一堆文件都放到c盘中也不分类

函数阶段就像把一推文件都放到c盘中并且分类

而模块阶段就是按照文件的不同功能放到不同的盘

就是为了我们可以方便快捷高效的管理文件

软件开发目录的规范

根据上面的三个阶段  分模块文件多了之后还需要有文件夹

我们所使用的所有程序目录都是有一定的规范的(就是用多个文件夹存放多个不同功能的py文件)

python项目目录中有:

  1.bin文件夹

    里面是存储程序的启动文件         eg:  start.py

  2.conf文件夹

    里面是存储程序的配置文件         eg: settings.py

  3.core文件夹

    里面是存储程序的核心逻辑         eg: src.py

  4.lib文件夹

    里面是存储程序的共同功能文件    eg: common.py

  5.db文件夹

    里面是存储程序的数据文件           eg: userinfo.txt

  6.interface文件夹

    里面式存储程序的接口文件            eg: user.py

  7.log文件夹

    里面是存储程序的日志文件    eg:log.log

  8.readme文件(文本文件)

    里面是存储一些程序的说明、介绍、广告 类似于产品的说明书

  9.requirements.txt文件

    里面是存储程序所需要的第三方模块名称与版本

我们编写软件项目的时候 可以不完全遵守上面的规范

  启动文件可以不用放在bin文件夹中   直接放在项目根目录下

  db文件夹可以被以后的数据库替代

  log文件夹可以被以后专门日志服务替代

 

posted @ 2022-07-14 18:26  stephen_hao  阅读(91)  评论(0编辑  收藏  举报