Python:包中的模块相互导入时出现问题

Python:包中的模块相互导入时出现问题,python,packages,python-import,Python,Packages,Python Import,路径结构: base.py my_module/ __init__.py mod1.py mod2.py base.py: from my_module.mod2 import * mod2_func2() # This call will work my_模块/mod1.py: from mod2 import * def mod1_func(): mod2_func1("Hello World") # This call will not work.

路径结构:

base.py
my_module/
    __init__.py
    mod1.py
    mod2.py
base.py:

from my_module.mod2 import *
mod2_func2() # This call will work
my_模块/mod1.py:

from mod2 import *

def mod1_func():
    mod2_func1("Hello World") # This call will not work.
my_模块/mod2.py:

from mod1 import *

def mod2_func1(input_text):
    print(input_text)

def mod2_func2():
    mod1_func() # This call will work
此代码将出错,因为未定义mod2_func1。如果我直接运行mod1.py(即将代码添加到
\uuuuu name\uuuuuu==“\uuuuuu main\uuuuu”
块中),它将正常工作


这是我真正问题的一个简化示例,它涉及一个包中的一组模块,所有模块都需要像这样相互通信。主要的事情是确保mod1和mod2可以访问本地名称空间中的其他内容,而不管从基调用哪个内容。我已经查看了大量关于python名称空间st的文档uff、导入和包,虽然我很欣慰地发现这似乎让每个人都感到沮丧,但我还没有找到解决方案。有什么建议吗?

有一些处理循环依赖关系的策略——但大多数情况下,最好的策略是重构代码,使依赖性循环消失……最终可能会更容易从长远来看,我对软件包中的mod1、mod2和其他文件都是同一个文件感兴趣——我将它们拆分为多个文件的原因是为了可读性,即使拆分的每个部分都依赖于其他部分。你是说正确的行为是将它们重新合并为一个巨大的文件吗?看起来像E应该有一个简单的方法把它们都放在同一个命名空间中。如果你真的需要把所有东西从<代码> MOD1<代码>导入到<代码> MOD2,反之亦然,这两个模块应该合并成一个。@亚伦——也许把它们放在一个巨大的文件中是最好的。很难给出具体的建议而不需要看到。代码和背景理解它…在我的经验中,你可以经常找到更合理的边界来分割事物,使得循环依赖性消失,代码感觉有条理。但是,如果这里不是这样的话,那么也许1个大模块就是正确的解决方案。m作为单个模块/名称空间——这是一个危险信号(当您需要查找代码时,您如何知道在何处查找?)“主要的事情是确保mod1和mod2可以访问本地名称空间中的其他内容”-我强烈建议放弃这一目标。这根本不值得。