一、模块与包
module来源有3种:①Python内置的模块(标准库);②第三方模块;③自定义模块。module 可看作一个工具类,可共用或者隐藏代码细节,将相关代码放置在一个module以便让代码更好用、易懂,让coder重点放在高层逻辑上。
1、构建模块层级包
封装成包是很简单的。在文件系统上组织你的代码,并确保每个目录都定义了一个__init__.py文件。 例如:
graphics/
__init__.py
primitive/
__init__.py
line.py
fill.py
text.py
formats/
__init__.py
png.py
jpg.py
定义模块的层次结构就像在文件系统上建立目录结构一样容易。 文件__init__.py的目的是要包含不同运行级别的包的可选的初始化代码。 举个例子,如果你执行了语句import graphics, 文件graphics/__init__.py将被导入,建立graphics命名空间的内容。
2、自定义包的调用
自定义的包既不是python的内置模块,也不是python的第三方模块。若要import这个文件夹包常用有两种方法:1)如果有pycharmIDE,通过定义Source Root的方法;2)将文件夹包的路径加入到sys.path
1)设置pycharmIDE的Source Root(推荐)
例如在tests文件夹中需要调用另一个目录下的keras_ocr这个包,只需要将再上级目录设置为Source Root。
2)将文件夹的包加入到sys.path
你无法导入你的Python代码因为它所在的目录不在sys.path里。你想将添加新目录到Python路径,但是不想硬链接到你的代码。
# keras_ocr这个包位于上一级目录
import sys
sys.path.append('..') # 将上一级路径‘..’放于环境变量的尾部
sys.path.insert(0, '..') # 将上一级路径‘..’放于环境变量的顶部
import keras_ocr
这种方法的问题是,它将目录名硬编码到了你的源代码。如果你的代码被移到一个新的位置,这会导致维护问题。
【1】https://python3-cookbook.readthedocs.io/zh_CN/latest/chapters/p10_modules_and_packages.html
【2】https://blog.youkuaiyun.com/weixin_38256474/article/details/81228492