python模块组织

时间:2014-06-18 09:41:02

标签: python python-import

我正在编写一个备份和组织科学数据的python库。我们称之为dataapp

我想按如下方式布置我的目录:

core/
operations/
cli_interface.py

core包含数据存储库的所有数据类和类,所有代码都是独立的,没有依赖项。操作包含所有操作,如保存,更新,备份数据,但操作确实取决于核心。核心不是运营的孩子,应该有能力独立使用。

然而,将代码从核心导入到操作中似乎很难看,因为我必须从相对路径和父项导入。

导入的另一个选项是全局安装dataapp,在这种情况下,操作可以轻松地从核心导入。

我的问题是:是上面推荐的,还是有更好的方法来列出我的代码?

4 个答案:

答案 0 :(得分:1)

试试这个布局:

core/
    __init__.py
    functions.py

operations/
    __init__.py
    actions.py

test.py

注意: __init__.py文件,它们只是空文件,用于定义名称与目录名称一致的包。

具有核心功能定义的functions.py

def core_function():
    print "core function"

模块actions.py将与core

建立此类关联
from core import functions

def simple_action():
    functions.core_function()

在您的应用test.py中,您可以按如下方式使用它:

from core import functions
from operations import actions

functions.core_function()
actions.simple_action()

另请注意: coreoperations包被整个路径引用 - 而不是相对的,即如果您有lab.sci.core结构,那么在from lab.sci.core应用程序和from lab.sci.operations模块中使用test.pyactions.py导入命令。

答案 1 :(得分:0)

你画的设置非常好。如果只允许每个模块从其自己的子模块(严格的树结构)导入,则永远不能在模块之间共享代码。整洁的模块结构是有向无环图(没有相互导入),不一定是树。

答案 2 :(得分:0)

怎么样:

cli_interface.py
operations/
core

所以核心是操作的子项,因为核心是仅由操作模块使用的数据。

答案 3 :(得分:0)

你的结构没有问题。但是如果你想在进口中更加冗长,那么这也适用:

cli_interface.py
dataapp/
    core/
    operations/

然后你做

from dataapp import core