0%

库索引与编写__init__.py

__init__.py,这个文件很不起眼,而且经常会被人忽略,但是实际在软件开发的过程中非常重要,在这里,我将简单介绍一下__init__.py的编写以及相关可能会遇到的坑.

引入:多文件夹运行模式

就以之前的三维移动平台中遇到的例子,由于测量设备三天两头更换,因此需要设计一个方便的切换模块的方式

我个人感觉这有点像C里面的#ifdef命令,但是这里是脚本语言

于是就有了这样一个文件结构

当我在外面调用import Measuredevices这个命令的时候,我希望能够通过调用Measuredevices.MeasureControl来直接得到

基本的概念

当你import一个文件夹时,解释器会首先运行__init__.py,执行其中的内容,那么你可以在这一步中进行一些初始化的操作(比如检查系统版本,依赖库之类)
因此,我可以这么做,在__init__.py中写入
from mps import *
这样的写法使得我们无需关注内部的库结构,实现遍历的调用

这在为不同系统提供环境支持的时候尤为重要,可能用户看起来调用的同一个库,因为环境不同而实现完全不同

当然,也可以使用__all__来实现更加精准的调用,可以参考这篇文章

遇到的问题与库调用逻辑

但是我们在这么做之前需要注意到:python库的查找需要修改sys.path,这样文件夹中的__init__.py无法找到一个文件夹中的文件,因此,需要在sys.path中添加上当前文件所在位置
sys.path.append(os.path.dirname(__file__))

当然,用完之后(在退出__init__.py的时候)记得恢复,否则你的path会非常臃肿