python包的结构就是文件夹结构,如要想让以下文件夹结构变成python包结构
只需在每个文件夹下添加一个__init__.py。
python __init__.py在包里起一个比较重要的作用
要弄明白这个问题,首先要知道,python在执行import语句时,到底进行了什么操作,按照python的文档,它执行了如下操作:
第1步,创建一个新的,空的module对象(它可能包含多个module);
第2步,把这个module对象插入sys.module中
第3步,装载module的代码(如果需要,首先必须编译)
第4步,执行新的module中对应的代码。
也就是说在导入一个包时,python首先去这个包下加载__init__.py.根据这个__init__.py里面规定的导入情况,再去导入其他模块。
比如你想加载exer1.py模块,你只需在__init__.py里面写入from root.exer1.py import * 就能导入exer1.py模块.
需要注意的是:
1,引入同级模块需要显示导入即用from ... import ... ,用import ... 会报错。且必须要用 ‘.’明确他们的层级关系
2,引入子包需要用import ...引入,且必须要用 ‘.’ 明确他们的层级关系
假如在exer1下有个addf 函数
在交互模式下,想调用exer1下的函数,首先
import root;然后
root.addf();就行了。
如果要在exer11模块下引入同级模块,只需在exer12中添加:
import root.pack1.exer12 或者 from root.pack1.exer12 import *
如果要在exer1模块下引入子包下的其他模块,只需在exer1中添加:
import root.pack1.exer11 或者 from root.pack1 import exer11
另外还有一个pythonPath 这个知识点:
pythonpath 就是python在装载模块时加载路径,自已可以设置。
当你想引入其他磁盘下的py文件,你就需要往pythonPath 中设置路径。
首先导入import sys,然后
sys.path.insert(0,路径);或者sys.path.append('路径');