管理包内的导入
Managing imports within a package
我对如何最好地管理以下情况感到困惑,其中 python 包中的多个模块具有相同的依赖关系。
假设我有一个包foo
,其文件结构是
foo/
__init__.py
bar.py
baz.py
并且 bar.py
和 baz.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
问题:有没有办法重构包,这样我们就可以只在__init__.py
中包含import external_pkg
行,而不是重复写它在模块中?天真地从模块中删除 import external_pkg
并将其放入 __init__.py
会导致 NameError: name 'external_pkg' is not defined
错误。
这在上面的例子中显然不是一个大问题,但我正在尝试编写一个小包,其中包含更多模块和更多涉及的常见导入。我知道这也可能只是我的包装设计问题。我已经尝试 google 这个,但似乎无法找到正确的术语组合来获得有用的答案。
foo/__init__.py:
import numpy as np
foo/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.]
我对如何最好地管理以下情况感到困惑,其中 python 包中的多个模块具有相同的依赖关系。
假设我有一个包foo
,其文件结构是
foo/
__init__.py
bar.py
baz.py
并且 bar.py
和 baz.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
问题:有没有办法重构包,这样我们就可以只在__init__.py
中包含import external_pkg
行,而不是重复写它在模块中?天真地从模块中删除 import external_pkg
并将其放入 __init__.py
会导致 NameError: name 'external_pkg' is not defined
错误。
这在上面的例子中显然不是一个大问题,但我正在尝试编写一个小包,其中包含更多模块和更多涉及的常见导入。我知道这也可能只是我的包装设计问题。我已经尝试 google 这个,但似乎无法找到正确的术语组合来获得有用的答案。
foo/__init__.py:
import numpy as np
foo/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.]