保持 Python 模块井井有条的最佳方式

Best way to keep Python modules organised

我正在使用 Python 在 Maya 中工作,几个月来我已经开始构建许多不同的模块来塑造各种工具。

最初,我只是将所有内容堆叠在一个根包中,由包含一些函数的巨大模块组成,类 等,视情况而定,单独的 "core" 模块包含所有通用的东西。

root (package)
    animation.py  (module)
    audio.py      (module)
    modelling.py  (module)
    rigging.py    (module)
    library.py    (module)
    core.py       (module)

最近我看到了一些不同方法的示例,这些方法包括为每个宏区域构建包并将其中的代码拆分为各种较小的模块。类似于此。

root (package)
    animation (package)
        __init__.py  (module)
        core.py      (module)
        utils.py     (module)
        ui.py        (module
        bar.py       (module)

    audio (package)
        __init__.py  (module)
        core.py      (module)
        utils.py     (module)
        ui.py        (module
        foo.py       (module)

   rigging (package)
        __init__.py  (module)
        core.py      (module)
        utils.py     (module)
        ui.py        (module
        foo.py       (module)

   etc

__init__.py 模块中,其他模块以这种方式导入。

from core import *
from utils import *
from ui import Window
from foo import Foo

因此,当导入整个包时,结果非常类似于将所有内容都放在一个包含所有内容的巨大模块中。最后,要访问每个 module/package 的功能,此代码应该适用于两种结构。

import animation
animation.Foo()

我的问题是:

这些方法中哪种更符合组织代码的逻辑?一方面,"package" 结构看起来组织得更好,但它给了我更多的循环导入和重新加载问题(这可能只是我不良导入习惯的标志)。另一方面,由于我放入的内容太多,经典模块开始变得很难导航。

首先,欢迎来到 Whosebug!其次,这绝对是一个偏好问题,但是你应该避免语法 from package import * 因为它会严重污染命名空间,特别是如果你有很多函数。

关于你的问题,如果你看一下 Python 中的许多标准库包,它们包含一个包含大约 5-6 个 py 文件的根文件夹。现在,这可能不是最漂亮的事情,但它并没有杂乱无章,而且可以轻松导入。

对于你的情况,因为你有很多文件要考虑,你应该首先考虑,"Are my Python files too small?" 来自 Java 的背景,我理解制作大量文件的驱动器,每个文件包含一个小少量。尝试以有意义的方式将相似的东西放在一起,不要有太多文件。

如果所有这些模块都由某种主应用程序连接,您应该尝试做的是尽可能地分离模块,因此您需要从每个模块导入尽可能少的东西。如果你正在编写一个库,你应该 100% 尝试使模块尽可能独立,除非你计划将它作为一个大库发布。当作为一个库发布时,您基本上可以根据需要组织它,只要它有意义且有效即可。

基本上:

  • 为每个创建一个子模块,你会得到漂亮和组织,但导入地狱
  • 有 5-6 个大文件并且导入很容易,但文件需要时间来导航和找到您需要的内容use/modify