[英]Import names from many submodules of a package efficiently
我有以下文件结构
| main.py
| Apis
|--| __init__.py
| submodule1
|--| __init__.py
|--| Main.py
| submodule2
|--| __init__.py
|--| Main.py
在每个Main.py文件中,我都有一个函数main(),它是子模块main函数。 如何正确导入这些功能?
我目前正在做的是
from APIs.submodule1.Main import main as submodule1
from APIs.submodule2.Main import main as submodule2
但是我已经有很多子模块列表了,看起来不对...
可以说,最可管理的方法是根本不使用from ... import
:
import APIs.submodule1
import APIs.submodule2
<...>
APIs.submodule1.main(<...>)
我会尽可能使用这种方式,因为稍后在浏览此代码时,它可以使我立即看到从何而来。
如果要导入的子模块很多,则包的__init__.py
( 在首次导入包或其任何子模块时运行)中的逻辑可以导入它们,以免在每个程序中重复该代码:
APIs\\__init__.py
:
import .submodule1 #or import just `main's instead if you don't need anything else
import .submodule2
<...>
如果仅导入包,则无论您将什么放置在包的名称空间中,都可以在其中看到:
your_program.py
:
import APIs
<...>
APIs.submodule1.main(<...>)
通过这种逻辑,您仍然可以通过from APIs import *
进行输入APIs
,将submodule1
, submodule2
等放入您的命名空间中,如果子模块名称足够唯一,则足以“立即查看来自何处的东西”。
最后,您可以减少代码重复:
import importlib
for module in ('submodule1','submodule2',<...>):
vars()[module] = importlib.import_module(module,'APIs')
del module, importlib
但这将使得在整个代码库中搜索引用变得更加困难。 因此,在包中进行所有导入看起来都是可取的,因为只需要执行一次即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.