__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
会非常臃肿