python包中模块的相互依赖性



我创建了一个名为"pkg"的软件包,它看起来像这样:

pkg/
__init__.py
mod1.py
mod2.py

__init__.py为空。

mod1.py只包含一个函数,看起来是这样的。

# mod1.py
def my_sqrt(x):
s = 5 # initialize at 5
while abs(x - s**2) > 0.00001:
s = (s+x/s)/2
return s

mod2.py包含使用来自mod1.py的函数my_sqrt的函数,并且看起来如下。

# mod2.py
def fourth_root(x):
return my_sqrt(my_sqrt(x))

现在当我运行时

from pkg import *
my_sqrt(9)

我得到了3.000000001396984的输出,但如果我运行

fourth_root(81)

我得到一个错误ModuleNotFoundError: No module named 'mod1'。即使我在mod2.py中添加以下行,

from mod1 import my_sqrt

它仍然不起作用,并抛出以下错误:NameError: name 'my_sqrt' is not defined

由于某些逻辑结构,我想在单独的模块中定义函数my_sqrtfourth_root。我如何做到这一点而不出错。我很难理解如何安排我的包,以便处理模块之间的相互依存关系。

在pkg级别从mod1.py和mod2.py导入所有方法。

init.py应该如下所示来实现您想要的。

from mod1 import my_sqrt
from mod2 import fourth_root

init.py 中的mod1.py和mod2.py导入方法

init.py应该是这样的。

from .mod1 import my_sqrt
from .mod2 import fourth_root
__all__ = [my_sqrt, fourth_root]

代码应该在pkg目录中运行。但既然你想从外部运行它,你就必须提到它的本地路径。否则,当主代码(pkg外部)进入pkg/mod2.py时,它开始在其位置级别查找mod1模块,但找不到它。

"从.mod1导入my_sqrt";mod2内部应该可以工作。添加点是这里的关键。

最新更新