我似乎无法让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
作为模块包含在内以便导入?
答案 0 :(得分:1)
添加__init__.py
,否则myapp
它不是有效的模块/包。
缺少的文件是:
myapp/__init__.py
修改强>
您可以将__init__.py
留空。
阅读文档here。
需要
__init__.py
个文件才能使Python将目录视为包含包;这样做是为了防止具有通用名称的目录(例如字符串)无意中隐藏稍后在模块搜索路径上发生的有效模块。在最简单的情况下,__init__.py
可以只是一个空文件,但它也可以执行包的初始化代码或设置__all__
变量,稍后将对此进行描述。