标签:相对路径 才有 产生 min append 执行文件 分享 不能 end
具体的:包就是一个包含有__init__.py文件的文件夹,所以其实我们创建包的目的就是为了用文件夹将文件/模块组织起来
创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包的本质就是一种模块
import时导入者不关心是文件夹还是.py;他只知道这是模块。
import aaa 此处导入的是__init__.py,产生名称空间也是__init__.py的,而且执行的是__init__.py的源代码
__init__.py增加变量代码:
执行文件test:
import aaa print(aaa.x) print(aaa.y) 结果是打印init里变量的值
也就是说:导入包实际上就是在导入包下面的__init__.py文件
另,import a.b.c.d 导入包才有的语法,点的左边都是包才行
环境变量就是执行文件的环境变量,固定不变的。
# test.py(执行文件)中 import sys print(sys.path) import aaa # __init__.py中 import sys print(sys.path) # 得到的结果两个环境变量值都是一样的,都是执行文件的环境变量
所以在__init__.py中导入m1报错,因为m1没有在执行文件的环境变量里
如果要在执行文件里拿到m1,所以就要在__init__.py中添加:from aaa import m1 才能让test文件找到m1
# __init__.py中添加 from aaa.m1 import f1
from aaa.m2 import f2 # m1左边一定是个包,而且from...import后面是一个明确的名字,不能再加.
test.py中aaa.f1() aaa.f2()执行结果:
from f1 from f2 #因为m1/m2里面函数f1/f2的代码就是print(‘from f1‘)/print(‘from f2‘)
aaa下面有加一层bbb,test.py中加入如下代码
import aaa aaa.bbb # 报错
要在aaa里的init中添加from aaa import bbb才行
所以bbb下面的__init__.py就代表了bbb这个包
所以在test.py中可以执行aaa.bbb.x 结果,就是bbb下面的__init__.py里x变量的值;
再来:
bbb下面init添加
from aaa.bbb import m3 # 在test就可以用到m3 aaa.bbb.m3 # 在test也就可以直接操作m3里的f3函数 aaa.bbb.m3.f3 直接打印f3内容
那可以直接aaa.f1()吗?
# 需要去aaa下面的init中添加: from aaa.bbb.m3 import f3
也就是说
# test中 import aaa aaa.f1() aaa.f2() aaa.f3() # 与test在同一目录的aaa下的init中 from aaa.m1 import f1 from aaa.m2 import f2 from aaa.bbb.m3 import f3 test执行没问题
#相对目录表示法: from .m1 import f1 from .m2 import f2 from .bbb.m3 import f3 # .代表当前目录,下面也有讲。
新场景,模块的开发者在一个模块中使用自己的另一个模块
# m3.py中 from aaa.ccc.m4 import f4 def f3(): print(‘f3‘) f4()
以上是绝对路径,相对路径如下:
from ..ccc.m4 import f4 def f3(): print(‘f3‘) f4() # .本目录bbb,..上级目录aaa
# 一个.就代表从当前目录找,两个.就是从上一级目录找
# .bbb.m3 两个点意义不一样。后面的是“子”的意思
如果aaa被放进了一个xxx/yyy的目录下,test该怎么找到它呢?
# test中添加新的环境变量 import sys sys.path.append(r‘C:\Users\Administrator\PycharmProjects\python19期\day5\7 包的使用\xxx\yyy‘) import aaa aaa.f1() aaa.f2() aaa.f3() # 即可!
也可以在test文件添加,除非你对包内部很熟悉
from aaa.ccc.m4 import f4 f4() import aaa.ccc.m4 aaa.ccc.m4.f4() # 这个找的过程会触发每个文件下面的init,但这里没有依赖它 不能继续.f4了,import aaa.ccc.m4.f4 因为f4左边不是包啦
标签:相对路径 才有 产生 min append 执行文件 分享 不能 end
原文地址:http://www.cnblogs.com/guoxiangqian/p/7697727.html