如果一个Python包只是一个模块,那么这个模块能否从姐妹模块导入并公开他们的功能?

如果一个Python包只是一个模块,那么这个模块能否从姐妹模块导入并公开他们的功能?

问题描述:

假设我有一个包结构类似:如果一个Python包只是一个模块,那么这个模块能否从姐妹模块导入并公开他们的功能?

root 
+-- package_as_a_module.py 
+-- setup.py 
+-- requirements.py 

在我的情况,package_as_a_module.py的增长远远大于最初预计,和它变得难以管理。是否有可能以一个新的模块添加到根目录下,说utils.py

# utils.py 
def func_a() 
    return "Hi!" 

,然后通过一个import语句暴露的utils.py功能为package_as_a_module.py,如:

# package_as_a_module.py 
from utils import func_a 

所以在安装后,我可以使用from package_as_a_module import func_a

我试过没有成功,here。主模块导入的模块无法识别,导入失败。我怀疑这可能是一个真正的包结构,可能在初始化 .py文件或什么的。接下来我会给你一个旋风。

如果没有人提出替代方案,我会回答我自己的问题。

+1

你试过了吗? –

+0

@ st.ph.n直到今天晚上,我都没有机会回家。如果在此之前没有人回答,我会回答我自己的问题。 –

+1

我只是沿着PoC的路线走,你应该证明你尝试过了,失败了,现在你正在寻求帮助。理论上,它应该可以工作,但是会依赖于模块的其他依赖。 –

您可以。

在你的文件main_module.py你没有调用print_all()函数,这就是为什么没有发生。

from module_a import print_hello_world as phw_a 
from module_a import print_hello as ph 
from module_b import print_hello_world as phw_b 


def print_all(): 
    ph() 
    phw_a() 
    phw_b() 

print_all() # You need to call a function for it to do something 
+0

这不是它没有做的任何东西,进口都失败了。我使用'pip install THIS_REPO'来获取包,然后尝试导入'print_all'函数。当我这样做时,出现'module_a not found'的错误。你是说如果我只是给模块添加一个函数调用,这个错误会消失,它会识别导入? –