在我的游戏中,我有很多不同的关卡,在以下结构中:
+ levels/
- Level1.py
- Level2.py
- Level3.py
- ...
Level1.py包含class Level1
,所有其他包含{。}}。
我可以导入我的每个级别:
from levels.Level1 import Level1
但由于我有很多这些,并且我想将它们全部导入到同一个地方,我写了一个位于load_levels
的{{1}}函数:
levels/__init__.py
这非常有用,直到我使用def load_levels(game,window):
levels = {}
for loader, mod_name, ispkg in pkgutil.iter_modules(path=__path__):
#import and initialise level
return levels
打包应用程序。然后py2app
不包含任何内容,大概是因为它无法在zip目录中运行(pkgutil.iter_modules
是__path__
)
我可以在这做什么?有没有办法配置['/.../dist/main.app/Contents/Resources/lib/python35.zip/levels']
不压缩目录,或py2app
在zip文件中工作?
答案 0 :(得分:0)
问题不在于pkgutil不起作用,但该模块图并没有打包我的任何级别文件,因为它无法看到''他们在建设时。
要解决此问题,您可以将levels
列为setup.py
中的包,这将确保捆绑所有内容。但是,它们不会被编译。
如果你想实现相同的目标并确保编译文件,那么解决它的方法是确保__all__
中的__init__.py
包含所有模块:
for f in os.listdir(__path__):
mod = os.path.splitext(f)[0]
if mod not in ['__init__','__pycache__','level_base']:
__all__.append(mod)
然后将模块添加到includes
中的setup.py
。
现在唯一的问题是此代码赢得在打包的应用内工作,因为__path__
不再是真正的目录,所以你会想要把它在try/except
块中。