Python模块导入
项目目录结构
PythonProject --父目录
__init__.py
main.py
| --pac1 --子目录:pac1
__
init__.py
f1.py
| --pac2 --子目录:pac2
__
init__.py
f2.py
注:Python新建一个包时,该目录下回自动生成一个 __init__.py 文件。
--f1.py
# -*- coding:utf-8 -*- def func1(): print('Hello World!')
--f2.py
# -*- coding:utf-8 -* def func2(): x = 9 + 9 print(x)
场景:要在 f2 中导入 f1 并调用 f1 中的方法 func1()
①、f1 和 f2 在同级目录的不同的子目录中,所以不能直接调用,并且也不能直接调用父目录的模块
②、父目录调用子目录的模块、子目录之间调用模块,使用如下相同方法
1)方式一:import PythonProject.pac1.f1 --导入模块PythonProject.pac1.f1
注:导入后,只能全名访问模块属性 --例如:PythonProject.pac1.f1.func1()
# -*- coding:utf-8 -* import PythonProject.pac1.f1 # 导入模块 f1 def func2(): x = 9 + 9 print(x) PythonProject.pac1.f1.func1() # 调用模块 f1 中的func1()方法,只能全名访问模块属性 ---PythonProject.pac1.f1.func1()
2)方式二:from PythonProject.pac1 import f1 --导入模块PythonProject.pac1.f1
注:导入后,只能以 f1.属性名访问模块属性
# -*- coding:utf-8 -* from PythonProject.pac1 import f1 # 导入模块 f1 def func2(): x = 9 + 9 print(x) f1.func1() # 导入后,只能以 f1.属性名 访问模块属性
3)方式三:from PythonProject.pac1.f1 import func1() --导入模块PythonProject.pac1.f1
注:导入后,直接把 func1() 放入当前名称空间,可直接访问
# -*- coding:utf-8 -* from PythonProject.pac1.f1 import func1 # 导入模块fill def func2(): x = 9 + 9 print(x) func1() # 导入后,直接把 func1() 放入当前名称空间,可直接访问
4)方式4:from PythonProject.pac1 import *
注:这个语句的原意图是想将PythonProject.pac1包下的所有模块导入到当前的名称空间.然而,由于不同平台间文件名规则不同(比如大小写敏感问题), Python不能正确判定哪些模块要被导入.这个语句只会顺序运行PythonProject和pac1 文件夹下的__init__.py文件. 要解决这个问题,应该在 pac1 文件夹下面的 __init__.py 中定义一个名字all的列表,例如:
# -*- coding:utf-8 -*- __all__ = ["f1"] ---如果还有其他属性,直接用逗号“,”分隔,一次添加在后面即可
# -*- coding:utf-8 -* from PythonProject.pac1 import * # 导入模块fill def func2(): x = 9 + 9 print(x) f1.func1() # 导入后,通过 f1.属性名 访问模块属性