簡體   English   中英

如何設置Python包

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM