乐趣区

python中的__init__.py文件和导包总结

python __init__.py 文件和导包总结
import 也是一门学问~

导入方式
import from xxx import yyy

__init__.py 的作用
把某一个目录变成一个包,使得其他模块使用 包. 包中的某一模块 / 函数 / 变量 / 类 这种方式时可用

__init__.py 什么时候有用?
如果某一个目录在后期导入使用时只是作为中间目录衔接使用,则可以不加__init__.py,如果某个目录后期会被直接或间接显示地作为一个包导入并被使用,那么必须必须必须要加__init__.py,并且__init__.py 中的内容会影响导入的内容

每一个目录都是可以被 import 的

如果一个目录下没有__init__.py,那么在 import 这个目录时,并不会报错,只会以这个目录名创建一个 namespace,里面什么都没有,没有使用价值 module ‘name’ (namespace) 然而当目录下创建__init__.py 后这个目录就可以成为一个包 module ‘name’ from ‘/Users/miechongdaxia/ 测试 /test/name/__init__.py’

在 pycharm 下都以绝对路径来引用包或者模块
不要用 . 操作符,尤其是用 from import 这种方式,import 一般直接导入外层目录作为包,而 from import 会导入内层目录中的包或者模块

python 查找模块 / 包的路径
sys.path 的值就是路径

哪些东西可以被直接 import?

模块文件(.py 文件)
C 或 C ++ 扩展(已编译为共享库或 DLL 文件)
目录 / 包(包含多个模块,不一定要有__init__.py,具体差别看第四点)
内建模块(使用 C 编写并已链接到 Python 解释器中)

两种导入方式的区别
from import 可以导入模块中的函数 / 变量 / 类等 import 则不行,导入的不是模块就是包目录,无法细化到函数 / 变量 / 类等

如果一个目录需要作为一个包使用,一定要在目录下创建__init__.py,并且在里面写好可以导入的模块,不然包目录可以导入,但是无法使用!!!!!

退出移动版