2017-03-17 86 views
0

假設我有一個包結構類似:如果一個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的路線走,你應該證明你嘗試過了,失敗了,現在你正在尋求幫助。理論上,它應該可以工作,但是會依賴於模塊的其他依賴。 –

回答

0

您可以。

在你的文件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'的錯誤。你是說如果我只是給模塊添加一個函數調用,這個錯誤會消失,它會識別導入? –