pyinstaller不导入子模块

时间:2017-05-31 14:43:48

标签: python pyinstaller

我似乎无法让pyinstaller正确打包模块。

示例模块结构

myapp/
      __main__.py
      mysubmodule.py

示例__main__.py内容

"""My __main__.py."""

import myapp.mysubmodule

print("Done")

如果我运行python -m myapp它运行时没有错误并打印Done

如果我运行pyinstaller myapp,我会收到错误,说明它是一个目录。

如果我运行pyinstaller myapp/__main__.py它会构建,但是当我执行生成的dist/__main__/__main__时,我得到ModuleNotFoundError: No module named 'myapp'

如何让pyinstaller将myapp作为模块包含在内以便导入?

1 个答案:

答案 0 :(得分:1)

添加__init__.py,否则myapp它不是有效的模块/包。

缺少的文件是:

  • myapp/__init__.py

修改

您可以将__init__.py留空。

阅读文档here

  

需要__init__.py个文件才能使Python将目录视为包含包;这样做是为了防止具有通用名称的目录(例如字符串)无意中隐藏稍后在模块搜索路径上发生的有效模块。在最简单的情况下,__init__.py可以只是一个空文件,但它也可以执行包的初始化代码或设置__all__变量,稍后将对此进行描述。