2012-04-07 70 views
1

我正在研究一個Python應用程序,它由一個核心和多個使用核心的獨立模塊組成。我在設置包的相對導入時遇到困難。Python包:相對導入

app 
    |- __init__.py 
    |- core 
     |- __init__.py 
     |- corefile.py 

    |- module1 
     |- __init__.py 
     |- main.py 

__init__.py文件是空的。我正在運行Python 2.7.1。

main.py 
from .core import * 

運行python main.py結果ValueError: Attempted relative import in non-package

類似的問題:Ultimate answer to relative python importsHow to do relative imports in Python?Relative imports in Python

感謝您的幫助。

回答

1

總之,您只能使用自己導入的包的相對導入。

例如,如果您有:

$ cat run.py 
from app.module1 import main 
main.main() 
$ python run.py 

然後,你可以在app/module1/main.py使用相對導入(儘管它需要是from ..core import foo,因爲core/高於main.py一個級別)。

+0

這取得了一些進展,但現在我得到'ValueError:試圖相對導入超出頂層包'。打印'__name__'會產生'module.main'而不是'app.module.main'。爲什麼它沒有看到它上面的目錄作爲包的一部分? – mgold 2012-04-07 23:42:54

+0

你究竟如何導入它?你是從'app'內的東西導入它作爲'module.main'嗎? – 2012-04-08 02:24:49

+0

我設法想出了一個稍微俗氣的解決方案,涉及嘗試不同的路徑。按照您的建議,我也從頂層調用'module.main',所以我會繼續並關閉它。 – mgold 2012-04-09 00:47:40