我正在编写一个备份和组织科学数据的python库。我们称之为dataapp
我想按如下方式布置我的目录:
core/
operations/
cli_interface.py
core包含数据存储库的所有数据类和类,所有代码都是独立的,没有依赖项。操作包含所有操作,如保存,更新,备份数据,但操作确实取决于核心。核心不是运营的孩子,应该有能力独立使用。
然而,将代码从核心导入到操作中似乎很难看,因为我必须从相对路径和父项导入。
导入的另一个选项是全局安装dataapp
,在这种情况下,操作可以轻松地从核心导入。
我的问题是:是上面推荐的,还是有更好的方法来列出我的代码?
答案 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()
另请注意: core
和operations
包被整个路径引用 - 而不是相对的,即如果您有lab.sci.core
结构,那么在from lab.sci.core
应用程序和from lab.sci.operations
模块中使用test.py
和actions.py
导入命令。
答案 1 :(得分:0)
你画的设置非常好。如果只允许每个模块从其自己的子模块(严格的树结构)导入,则永远不能在模块之间共享代码。整洁的模块结构是有向无环图(没有相互导入),不一定是树。
答案 2 :(得分:0)
怎么样:
cli_interface.py
operations/
core
所以核心是操作的子项,因为核心是仅由操作模块使用的数据。
答案 3 :(得分:0)
你的结构没有问题。但是如果你想在进口中更加冗长,那么这也适用:
cli_interface.py
dataapp/
core/
operations/
然后你做
from dataapp import core