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

2. 包的使用
- 当我们使用包的时候,会产生一个名称空间,
- 运行包下的__init__.py文件,将运行过程中产生的名字都丢到1的名称空间中
- 在当前执行文件的名称空间中拿到一个名字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
针对包内部模块之间的相互导入推荐使用相对导入,需要特别强调:
- 相对导入只能在包内部使用,用相对导入不同目录下的模块是非法的
- 无论是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

浙公网安备 33010602011771号