【问题标题】:Interdependence of modules in python packagespython包中模块的相互依赖关系
【发布时间】:2021-10-17 00:43:02
【问题描述】:

我创建了一个名为“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。我该怎么做并且不会出错。我很难理解如何安排我的包,以便处理模块之间的这些相互依赖关系。

【问题讨论】:

    标签: python import module package modulenotfounderror


    【解决方案1】:

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

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

    from mod1 import my_sqrt
    from mod2 import fourth_root
    

    【讨论】:

      【解决方案2】:

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

      init.py 应如下所示。

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

      【讨论】:

      • 没有。我仍然得到同样的错误NameError: name 'my_sqrt' is not defined
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-28
      • 2013-04-06
      • 2021-02-21
      • 2018-01-09
      • 2015-05-07
      相关资源
      最近更新 更多