我想要这样的结构:
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
到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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句