1 .什么是包

包就是相当于一个模块,然后去使用
1、包就是一个包含有__init__.py文件的文件夹,
2、为何要有包
包的本质是模块的模块的一种形式,包是用来被当做模块导入

2. 包的使用

  1. 当我们使用包的时候,会产生一个名称空间,
  2. 运行包下的__init__.py文件,将运行过程中产生的名字都丢到1的名称空间中
  3. 在当前执行文件的名称空间中拿到一个名字mmm,mmm指向1的名称空间
import mmm
print(mmm.x)
print(mmm.y)
mmm.say()

from mmm import x

3. 绝对导入与相对导入

绝对导入:以顶级包为起始

from pool import versions

相对导入:.代表当前文件所在的目录,..代表当前目录的上一级目录,依此类推

from . import versions

针对包内部模块之间的相互导入推荐使用相对导入,需要特别强调:

  1. 相对导入只能在包内部使用,用相对导入不同目录下的模块是非法的
  2. 无论是import还是from-import,但凡是在导入时带点的,点的左边必须是包,否则语法错误

4. 环境变量

是以执行文件为准备的,所有的被导入的模块或者说后续的其他文件引用的sys.path都是参照执行文件的sys.path

import sys
sys.path.append('/aa')
print(sys.path)
sys.path.append(r'/Users/linhaifeng/PycharmProjects/s14/day21/aa')

但是我们使用的时候是绝对路径是静态的,当我们给别人使用的时候呢,我们要把它设置成动态的,方便别人使用

# 绝对导入======>sys.path====>执行文件

import sys
sys.path.append(r'/Users/linhaifeng/PycharmProjects/s14/day21/ATM')

from conf import settings
from core import src

print(settings)
print(src)
from core import src
src.run()
from core.src import run
run()


# 优化方案
import os
import sys

# print(__file__) # 当前文件的绝对路径
BASE_DIR=os.path.dirname(os.path.dirname(__file__))
sys.path.append(BASE_DIR)

from core import src
posted @ 2020-03-28 15:22  小子,你摊上事了  阅读(143)  评论(0)    收藏  举报