2012-09-18 95 views
4

我在寫一個遊戲框架。這裏是我當前的文件結構:在python中組織源代碼

src/ 
    framework/ 
    __init__.py 
    util.py 
    render.py 
    game.py 
    pong.py 

我希望能簡單地做import game或從pong.py文件import render直接。什麼是實現這一目標的最佳方式?最初,util.py, render.py, game.py模塊位於src文件夾中,但爲了組織起見,我決定將它們放入其單獨的文件夾中。我在包裝公約方面頗有新意,所以我不知道這是否是推薦的做事方式。

回答

7

做到這一點的最好方法就是不要這樣做。正是因爲你把他們放在第一位的原因 - 爲了組織 - 你會希望他們在一個單獨的模塊中。如果你想參考模塊game在你的代碼,你可以這樣做:一般

from framework import game 

game.foo() 

,當你做import game,您提供的預期game是一個系統庫或文件夾中的腳本正在運行。如果情況並非如此,它會拋棄人們。如果你想讓你的框架成爲一個系統庫,你不會把它作爲三個單獨的庫util,gamerender,不是嗎?你會將它打包在一個庫中 - framework - 並通過子模塊進行分發。因此,你真的不想這樣做。

但是,因爲我知道非答案可以令人沮喪,如果你真的想繼續前進,你可以在framework文件夾添加到sys.path,每當您導入模塊,Python的檢查:

import sys 
sys.path.append("framework") 

import game 
+0

請問'從框架導入*'工作?我知道這不是推薦的,但我正在閱讀一些關於'__all__'變量的東西,它可以在'__init __。py'中定義,所以我不確定。 – Lanaru

+0

@Lanaru:試試這個:在你的'__init __。py'中,放入'import game;導入渲染; import util;',然後我認爲'import *'會起作用。 – Claudiu