gpt4 book ai didi

Python 3 - 模块和包困惑 - 架构

转载 作者:太空宇宙 更新时间:2023-11-03 15:38:03 26 4
gpt4 key购买 nike

几个月前,你开始从事一个小项目,随着时间的推移,这个项目变得很大。它从一些 python 文件开始:

project
│ program_1.py
│ program_2.py

我们继续添加更多程序,因此为了避免代码重复,我开始将常用函数提取到单独的文件中。

project
│ program_1.py
│ program_2.py
│ program_3.py
│ shared_module_1.py
│ shared_module_2.py

我们不断添加更多程序,它们的大小相当大,所以我将它们放入自己的文件夹中,就像这样。另外,为了避免在项目文件夹中删除更多文件(这只是一个简化的示例,文件夹有 15 个以上文件):

project
│ program_1.py
│ program_2.py
│ program_3.py
│ shared_module_1.py
│ shared_module_2.py
└───program_4
│ program_4.py
│ program_4_aux.py

为了让program_4.py使用共享模块,我必须使用以下语句:

sys.path.append('../')

我无法跟上这样的步伐。代码变得困惑且难以维护。我不知道如何清理这个烂摊子。

PD:我尝试使用 from .. import shared_module_1 但它告诉我父模块''未加载无法执行相对导入

非常感谢您抽出时间。

最佳答案

去看看路吧django已布置。

重要说明:

  • 存储库的根不是主要的可导入Python模块(即顶层没有init.py文件)。它位于子目录 ./django 中。
  • 不应该有脚本,即可以在模块内运行的独立 python 文件。 manage_translations.py 脚本通过导入使用一些 django 功能,但它位于 ./scripts 中。另外,脚本应该永远使用相对导入(因为脚本不在模块中!)
  • 测试也不位于主模块内。
  • 如果您认为需要修改sys.path,您可能做错了。
  • django 包中的功能根据其功能进行逻辑划分。例如。有一个子模块 ./django/db 用于处理数据库相关功能。如果做得好,那么如果有帮助的话,可以轻松地将通用子模块(如果有的话)完全移动到一个单独的项目中。

因此,建议将所有模块代码移动到与程序代码分开的子目录中,例如:

project
module
__init__.py
module_1.py
module_2
__init__.py
submodule_a.py
scripts
program1.py

然后你只需要确保 project 在你的 PYTHONPATH 中,你就可以执行例如:

from module.module_1 import Module1Class

等等

关于Python 3 - 模块和包困惑 - 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42369531/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com