将大型python文件拆分为具有公共依赖关系的模块

Ben*_*Ben 5 python module

在Flask中进行开发时,我想将所有模型,控制器......放在他们自己的独立文件中.这样,我就不必在大文件中查找任何控制器,模型; 它可以保持一切清洁.它看起来如下:

/controllers
    __init__.py
    login.py
    logout.py
    profile.py
Run Code Online (Sandbox Code Playgroud)

所有这些文件都具有(几乎)相同的依赖关系.我不想一遍又一遍地将所有依赖项放在每个文件中.我提出的一个解决方案是使用一个depencies.py文件,它导入所有依赖项,然后我将其包含在每个单独的文件中.

 /controllers
    __init__.py
    dependencies.py (all the imports)
    login.py (import dependencies.py)
    logout.py (import dependencies.py)
    profile.py (import dependencies.py)
Run Code Online (Sandbox Code Playgroud)

但是,这不是一个非常优雅的解决方案.我想知道是否可以做一些__init__.py具有依赖性的东西,然后"包含"单独的文件,并且所有内容都以这种方式运行,这样你实际上不需要在每个文件中包含公共依赖项.

我想做什么的例子(不起作用):

#common dependencies
from app import mail
from flask import session
...
#actual models (which depend on these dependencies)
from user import User
from code import Code
from role import Role
Run Code Online (Sandbox Code Playgroud)

tmt*_*prt 1

文件特定导入

仅导入每个文件或您的文件中必要的依赖项。如果profile仅需要flask,则仅导入文件中的内容。如果login.py需要flaskapp,请将两者都导入到该文件中。除非在 的代码中实际使用了第 3__init__.py模块,否则您不需要在那里导入它。根据您最终使用包的方式,您可以__all____init__.py.

参考:

  1. 导入仅加载模块一次。此后的任何导入只需将其添加到当前命名空间即可。
    -另一个答案

  2. 出于效率原因,每个解释器会话仅导入每个模块一次。
    - python 文档

  3. __all__解释