关于python包结构-每个模块的元素

时间:2019-02-13 15:03:26

标签: python package structure

是否有客观,强烈的理由反对为每组相关模块都拥有一个文件,而不是将它们大量地包装在一个模块中?例如,假设我有一个名为utils的子包,它提供的实用程序之一是关于数据的输入和输出。我的意思是,将大功能(及其重要的相关子功能)放入“专用”模块,然后通过导入主模块io来调用它们是错误的。

utils/
  io.py
  _pprint.py
  _ptable.py

_pprint是一个大方法,它需要一些其他小的子方法,由于它们之间的相关性很高,所以这些子方法也将在_pprint.py模块中。

基本上,问题是我有一个io.py模块(以及其他一些模块),其中包含20个函数,要阅读/滚动查找某些我想更改的特定函数很麻烦。我想有一个io模块,可以通过import package.io进行调用,然后在io.py内导入与I / O相关的其他模块,或类似的东西(也许我需要对子包进行此操作,以使用更多的__init__.py)。

1 个答案:

答案 0 :(得分:1)

不,只要它仍然可以导航,那么拥有一堆独立文件就没有错。

关于您有一个“可以通过import package.io调用的io模块”的问题,轻松实现此目的的方法是将目录结构化:

packages -> io -> __init__.py 

在__init__.py中,具有子模块的导入:

__ init __。py:

from packages.io import submodule
  • 调用import packages.io时,子模块将成为属性 package.io。

  • 请记住__init__.py导入需要来自主脚本的 视角。

运行此命令应该为您提供目录和文件的布局,以供播放:

import os

os.makedirs("./packages/io")
with open("./main.py", 'w') as f:
    f.write("import packages.io as io\n")
    f.write("io.module1.call()\n")
    f.write("io.module2.call()\n")

with open("./packages/io/__init__.py", 'w') as f:
    f.write("from packages.io import module1\n")
    f.write("from packages.io import module2\n")

with open("./packages/io/module1.py", 'w') as f:
    f.write("def call():\n")
    f.write("\tprint('Module 1 called')")

with open("./packages/io/module2.py", 'w') as f:
    f.write("def call():\n")
    f.write("\tprint('Module 2 called')")