首页 > 解决方案 > 管理包中的导入

问题描述

我对如何最好地管理以下情况感到困惑,即 python 包中的多个模块具有相同的依赖关系。

假设我有一个foo文件结构为的包

foo/
    __init__.py
    bar.py
    baz.py

并且两者bar.pybaz.py需要一些其他包,例如external_pkg,以便他们阅读

# foo/bar.py
import external_pkg
def bar_fn(x):
   # do something with external_pkg

# foo/baz.py
import external_pkg
def baz_fn(x):
   # do something with external_pkg

问题:有没有办法重构包,以便我们可以只在 中包含该import external_pkg__init__.py,而不是在模块中重复编写它?天真import external_pkg地从模块中删除并将其放入__init__.py会导致NameError: name 'external_pkg' is not defined错误。

在上面的示例中,这显然不是一个大问题,但我正在尝试编写一个包含更多模块和更多常见导入的小包。我知道这也可能只是我的包装设计问题。我试图用谷歌搜索这个,但似乎无法找到正确的术语组合来获得有用的答案。

标签: pythonpython-importpython-modulepython-packaging

解决方案


foo/__init__.py:

import numpy as np

富/bar.py:

from . import * # or from foo import *

print(np.zeros(10))

运行(需要在 foo 目录之外才能工作):

$ python -m foo.bar

输出:

[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]


推荐阅读