如果一个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文件或什么的。接下来我会给你一个旋风。
如果没有人提出替代方案,我会回答我自己的问题。
答
您可以。
在你的文件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'的错误。你是说如果我只是给模块添加一个函数调用,这个错误会消失,它会识别导入? –
你试过了吗? –
@ st.ph.n直到今天晚上,我都没有机会回家。如果在此之前没有人回答,我会回答我自己的问题。 –
我只是沿着PoC的路线走,你应该证明你尝试过了,失败了,现在你正在寻求帮助。理论上,它应该可以工作,但是会依赖于模块的其他依赖。 –