包的导入
包的导入
-
导入一个文件夹相当于执行了这个包下的
__init__
方法,并不相当于把这个包下的所有文件都导进来了 -
数据准备
import os os.makedirs('glance/api') os.makedirs('glance/cmd') os.makedirs('glance/db') l = [] l.append(open('glance/__init__.py','w')) l.append(open('glance/api/__init__.py','w')) l.append(open('glance/api/policy.py','w')) l.append(open('glance/api/versions.py','w')) l.append(open('glance/cmd/__init__.py','w')) l.append(open('glance/cmd/manage.py','w')) l.append(open('glance/db/__init__.py','w')) l.append(open('glance/db/models.py','w')) map(lambda f:f.close() ,l)
-
在demo.py导入glance文件夹下的policy文件
-
方式一 (from ** import** 这种格式下,import的后面必须是明确的文件夹或文件,不能带点)
from bao.glance.api import policy policy.get()
-
方式二
import glance.api.policy as f # glance.api.policy.get() f.get()
-
方式三 (肢解导入函数名、变量名)
from bao.glance.api.policy import get get()
-
-
绝对导入
-
demo
import glance
-
glance\init
from glance import api
-
api\init
from glance.api import policy
-
policy
def get(): print('from policy.py') get()
-
-
相对导入
-
. 当前目录 .. 父目录
-
相对路径不能在执行文件中使用
-
相对导入只能在被导入的模块中使用,使用相对导入,就不需要考虑执行文件是谁了,只需要模块之间路径的关系
-
demo
import glance
-
glance\init
from . import api
-
api\init
from . import policy
-
policy
def get(): print('from policy.py') get()
-
-
相对导入和绝对导入的使用场景
- 相对导入:当你需要写一个功能,这个功能不是直接运行的,而是被别人导入后使用的这种情况如果你的这个独立功能形成文件,文件内的所有文件都需要使用相对导入 如:json
- 绝对导入:如果我们自己开发一个项目,这些项目有一些文件是需要直接运行的,这种情况使用绝对导入