Python 导包技巧
起因
起初学 Go 语言的时候,对它的导包规则感到痛苦,——“那么麻烦干嘛呢!”。但最近接到一些新功能开发任务,于是 “啪嗒啪嗒” 写代码,结果更痛苦了。公司项目目录规划打一开始就不合理,以此为基础的 “繁荣发展” 导致更多混乱与麻烦。于是马上翻开《Python cookbook》解惑,有些心得,这里记之。
场景1
场景1:如何模块化代码,同时保证导入方式统一?
公司项目是老项目,因此代码祖传,常常一个 .py 文件里有上千行代码。恰巧现在重构(虽然并不是严格意义上的重构),同事们有意识地将代码拆分成多个文件。然后就有了这样的现象:
from onedir.twodir.file1 import func1
from onedir.twodir.three.file2 imort func2
from onedir.file3 import func3
目录结构如下:
Guan@Orchard:~/python/08/demo$ tree onedir/
onedir/
├── file3.py
├── __init__.py
└── twodir
├── file1.py
├── __init__.py
└── three
├── file2.py
└── __init__.py
2 directories, 6 files
很显然,要我记住哪个函数在哪个模块中这是很困难、又没意义的事。况且 onedir 里边的代码只有一个模块在使用,所以为什么不让调用方式统一一下呢?这里需要用到 Python 包中的 __init__.py 文件。
现在,修改 onedir 目录下的 init 文件,修改后变成下面这样:
# onedir/__i