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

About python package structure - elements per module

是否有任何 objective 强烈反对为每组相关模块创建一个文件而不是将它们大量打包在一个模块中?例如,假设我有一个名为 utils 的子包,它提供的实用程序之一是关于数据的输入和输出。我的意思是如果将大函数(及其重要的相关子函数)放在 "private" 模块中然后通过导入主模块调用它们是错误的 io.

utils/
  io.py
  _pprint.py
  _ptable.py

假设 _pprint 是一个大方法,需要一些其他小的子方法,那么这些方法也会在 _pprint.py 模块中,因为它们高度相关。

基本上,问题是我有一个 io.py 模块(和其他一些模块)有 20 个函数,read/scroll 很难找到我想要更改的特定函数。我想要(作为示例)一个可以通过 import package.io 调用的 io 模块,然后在 io.py 中,它导入与 I/O 相关的其他模块],或类似的东西(也许我需要用子包来做这个,以使用更多 __init__.py)。

不,只要还能导航,一堆独立的文件也没什么问题。

关于您关于拥有 "io module that can be called via import package.io" 的问题,轻松做到这一点的方法是构建目录:

packages -> io -> __init__.py 

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

__init__.py:

from packages.io import submodule
  • import packages.io被调用时,子模块将是属性 共 packages.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')")