2013-01-18 101 views
2

想象我有這樣的結構:如何使用此結構在Python中執行相對導入?

dir/ 
    __init__.py 
    dir1/ 
     __init__.py 
     x.py 
    dir2/ 
     __init__.py 
     y.py 

現在我想導入x.py到y.py。
我嘗試這個from ..dir1.x import *PEP 328 y.py但我得到這個錯誤Attempted relative import in non-package
我搜索了幾個小時,但找不到任何對此問題的答案。
有像我的很多類似的問題,但他們都不能幫我像this
請幫助。
非常感謝。因爲他們有__name__ == '__main__',而不是他們的全包名

python y.py 

:當文件被直接invocated

+0

在表面看起來像是你鏈接到的另一個問題的完全重複;你可能應該解釋爲什麼這個解決方案不適合你。 –

+0

你是對的,但如果我知道問題是什麼,我不要再問它。我再次問這個問題找到問題。 – user31587

回答

0
y.py

,加上這塊導入代碼

import sys 
sys.path.insert(0, '..') 

然後做

from dir1.x import * 
+0

非常感謝,但第一次導入是做什麼的?我認爲這是工作,但它不是乾淨的方式來做到這一點。 – user31587

+0

@XLichking首先導入以確保父目錄位於您的python的搜索路徑下,以便它可以將dir1識別爲導入的有效模塊。它看起來並不簡單,因爲你首先要求的並不是自然而然的事情。 – nye17

+0

非常感謝,但我怎麼能改變我的結構是正常的? – user31587

0

相對進口量將無法正常工作。

對於相對進口工作,你必須使用y作爲一攬子:

python -m dir.dir2.y 
+0

非常感謝。但我是新來的蟒蛇。我怎麼能運行最後的命令?我使用Windows。 – user31587

+0

好吧,你如何運行失敗的命令? –

+0

我在cmd中使用python文件夾:python -mc:\ Users \ my_user_name \ Desktop \ dir \ dir2 \ y但是我得到這個錯誤:沒有模塊命名爲c:\ Users \ my_user_name \ Desktop \ dir \ dir2 \ y – user31587