[英]How to set up Python packages
我想要這樣的結構:
Zimp / controller / game_play->如何:以最簡單的方式導入Zimp / model / game_play模塊? Zimp /模型/ game_play
我制作了一個名為controller的文件夾和一個名為model的文件夾。 在這些文件夾中,我放置了一個空的__init__.py
文件(不知道為什么這樣做會做任何事情)。 我沒有制作model.py文件或controller.py文件。 沒用 我剛剛創建了一個model.py和controller.py,它們是空的,除了在創建新模塊時自動出現的主塊。 沒有不同。
在controller / game_play.py中,我嘗試: from ..model import game_play_model
它顯示值錯誤:嘗試在非包中進行相對導入
是不是實際上不將它們放在單獨的目錄中? 規范是什么?
謝謝
問題是您正在嘗試直接執行子程序包模塊,請參見問題的答案, 即使使用__init__.py,也嘗試在非程序包中進行相對導入 。
首先,我認為您需要像這樣設置目錄文件結構:
Zimp/ top-level package
__init__.py package initalization
controller/ subpackage
__init__.py subpackage initalization
game_play.py subpackage module
model/ subpackage
__init__.py subpackage initalization
game_play_model.py subpackage module
__init__.py
文件都可以為空,因為它們僅表明該目錄是[sub]程序包。
出於說明目的,我們假設其中包含game_play_model.py
文件:
print 'hello from game_play_model.py'
game_play.py
文件包含以下內容,以檢測何時直接執行該文件, Zimp
其文件夾父級的名稱Zimp
到Python搜索路徑中,從而使您可以在導入時直接從包中導入其他內容那樣跑
if __name__ == '__main__' and __package__ is None:
import sys, os.path as path
# append parent of the directory the current file is in
sys.path.append(path.dirname(path.dirname(__file__)))
import model.game_play_model
print 'hello from game_play.py'
然后直接使用python game_play.py
之類的東西執行它,它將輸出:
hello from game_play_model.py
hello from game_play.py
from Zimp.model import game_play
應該做到的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.