2010-08-16 72 views
0

我試圖保留一個有點有組織的目錄結構,因爲我打算添加越來越多的腳本。因此,可以說我有一個結構是這樣的:根據需要包含文件的正確方法

/src/main.py 
/src/db/<all my DB conn & table manipulation scripts> 
/src/api/<all my scripts that call different APIs> 

我main.py腳本將包括從數據庫& API文件夾中的某些類。我在每個文件夾中都有空白的_init_____.py文件,因此它們都包含在內。但是,說我想要在api文件夾的腳本中包含db文件夾中的類?就像我需要以某種方式備份一個目錄?

from db.Conn import QADB 

我在V2.6:當我在他們這樣一行的API腳本失敗。

更新:我試過一個相對導入,但得到這個?

from ..db.Conn import QADB 
    ^SyntaxError: 
invalid syntax 
+1

你有一個/src/__init__.py文件? – 2010-08-16 21:31:55

回答

3

你設置它的方式是創建三個不同的模塊 - 這可能是也可能不是你想要做的。如果你想它可以管理不同任務的通用模塊,如下所示,你可以安排一下:

mymodule 
|- __init__.py 
|--database 
| |- __init__.py 
| |- dbclasses.py 
| 
|--api 
| |- __init__.py 
| |- apiclasses.py 
| 
|--other 

[etc] 

如果你有像這樣,想使用API​​和數據庫的功能,你可以這樣開始

from mymodule.database.dbclasses import MyDBClass 
from mymodule.api.apiclasses import MyAPIClass 

注意你的方式:你的頂部「模塊」的名稱是src(它不是一個模塊,因爲它沒有__init__.py文件)。

如果您在頂級模塊中使用許多常用功能(來自任何子模塊),則可以將它們包括在頂部__init__.py中,並簡單地調用from mymodule import MyDBClass, MyAPIClass

內容的頂部__init__.py

from mymodule.database.dbclasses import MyDBClass 
from mymodule.api.apiclasses import MyAPIClass 
__all__ = ['MyDBClass', 'MyAPIClass'] 
+0

完美!這是我需要做的。謝謝! – Nathan 2010-08-16 21:38:32

1

使用相對進口:

from ..db.Conn import QADB 
+0

哈。我甚至懶得去嘗試。認爲它會完全失敗。這就是我想得到的結果。但是,我得到這個錯誤: 從..db.Conn進口QADB ^ 語法錯誤:無效的語法 – Nathan 2010-08-16 21:33:20

+0

與他們插手了幾次後,相對於進口仍然是一個謎給我。 – delnan 2010-08-16 21:33:46

+0

如果src文件夾是一個包,那麼您可以從那裏導入:從src.db導入QADB – pmalmsten 2010-08-16 21:34:57

1

FWIW,我不喜歡這樣的結構。根據腳本的功能構建您的結構。如果您想編寫調用外部數據庫API的腳本,該怎麼辦?這是在API目錄還是在db目錄?

是的,使用awesomo建議的相關輸入。

1

下一個共同的一攬子移動的一切:

mypkg/main.py 
mypkg/db/... 
mypkg/api/.. 

然後使用絕對導入

from mypkg.db.stuff import somestuff 

這種方式,您也可以分發MYPKG一個雞蛋。

相關問題