2013-08-31 26 views
1

我似乎間歇性地遇到了此問題。無法使用頂級模塊(源文件夾)啓動我的導入語句

有時我有一個PyDev項目,如果我嘗試使用頂級文件夾的名稱開始我的導入,那麼我會收到編譯錯誤。因此,假設我的項目是這樣的:

+ myproject 
    - __init__.py 
    - a.py 
    - b.py 
    + package1 
     - c.py 
     - __init__.py 
    + package2 
     - d.py 
     - e.py 
     - __init__.py 

如果我在文件a.py是,它不會讓我做進口是這樣,例如:

from myproject.b import foo 
import myproject.b 

也是一樣爲任何文件。他們都編譯就好了,如果我離開過像這樣從進口聲明「的myproject」:

from b import foo 
import b 

就像圖中,我肯定有一個頂級__init__.py,並且兩個myproject的文件夾及其父母在Python路徑上。 myproject文件夾也是該項目的源文件夾。

我需要完整的導入語句,因爲我部署此代碼的位置將不會在其路徑上具有myproject文件夾。一些似乎配置相同的其他項目沒有這個問題,我已經嘗試了通常的清理/重新啓動。

關於這裏發生了什麼的任何想法?

謝謝!

+1

如果地方你deply代碼沒有自己的路徑上的myproject文件夾,'導入myproject.b'將失敗。 – BrenBarn

+0

你真的得到一個編譯錯誤? Python不關心你所引用的模塊在編譯時是否存在,甚至在你運行它之前甚至不會編譯你的代碼。如果它是'ImportError',那不是編譯錯誤。 – user2357112

+0

是的,我錯了。這是一個'ImportError'。 – piyo

回答

1

您是否嘗試過相對進口(from .b import foo,from . import b)?我不明白爲什麼絕對進口(包括「我的項目」)在你的情況下不起作用,但同時相對進口應該仍然有效。

+0

不允許相對進口。 – piyo

+0

爲什麼?自2.5以來,它們一直存在,PEP8也認爲它們可以接受。 – antony

+0

我辦公室的人不喜歡他們。 – piyo