如何在Python中单独导入子模块?

Nowox

我有这个结构:

.
└── module
    ├── __init__.py
    └── submodule
        ├── __init__.py
        ├── foo.py
        └── bar.py

module.submodule.__init__.py我有这个:

import foo
import bar

module.submodule.foo.py我有这个:

import very_heavy_third_party_module as vhtpm
...

我想进口bar而已,但我得到减缓foo(让我们想象有一个丑陋的time.sleep(3)两个foomodule/__init__.py)。

因此,我的目标是在不被模块其他部分拖慢的情况下将其写在下面:

from module.submodule.bar import saybar
saybar()

我怎么能只需要导入saybar位于我的子模块bar

诺亚

从做进口的唯一方法bar,而无需运行foo是删除import foomodule.submodule.__init__.py这是因为当你在Python,所有这些模块中的顶级代码(或导入封装/模块__init__.py,如果导入包)运行。当您运行from module.submodule.bar import saybar,所有的顶级代码:

  • module.__init__.py
  • module.submodule.__init__.py
  • module.submodule.bar.py

运行。由于module.submodule.__init__.py含有import foofoo是进口及其所有的顶级代码(包括import very_heavy_third_party_module as vhtpm)运行为好,导致增长放缓。

一些可能的解决方案是:

  • 将尽可能多的代码移出__init__.py这是一个常见的做法是假__init__.py空的-如果那里面有一些功能,你可能要考虑将其移动到其自身的模块。一旦import仅保留了这些行,您就可以删除它们,因为它们在命名空间方面没有区别。
  • 重新定位import vhtpmfoo.py从顶层向下(例如,进入多数民众赞成由别的东西叫做模块功能)。这不是很干净,但是如果您需要优化,可能对您有用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章