运行pyinstaller后找不到模块

时间:2020-06-30 20:53:22

标签: pyinstaller

我为冗长的帖子表示歉意。

我正在使用pyinstaller将Hello World程序从Python文件转换为独立的可分发可执行文件。我正在Windows 10企业版上使用pyinstaller 3.6。 Python代码是使用Spyder 4.0.1编写的(目前我无法更新至4.1.3)。

我已经创建了HelloWorld.py文件:

#! python3
# -*- coding: utf-8 -*-
"""
Created on Tue Jun 30 12:27:20 2020

@author: DNICHOL3
"""


def main():
    print("Hello World!")


if __name__ == "__main__":
    main()

以及同一文件夹中的cli.py文件:

# -*- coding: utf-8 -*-
"""
Created on Tue Jun 30 09:07 2020

@author: DNICHOL3
"""


# import HelloWorld
from HelloWorld.__main__ import main

if __name__ == '__main__':
    main()

我正在使用–onefile –debug import –clean标志运行pyinstaller:

pyinstaller cli.py –onefile –debug imports --clean

然后我从dist文件夹运行cli.exe,并获得几个输出屏幕(导入xxx,#清除yyy,#还原zzz,#清理[2] aaa)。在此输出中嵌入以下几行:

HelloWorld not found in PYZ
Traceback (most recent call last):
   File “cli.py”, line 10, in <module>
   File “<frozen importlib.bootstrap>”, line 991, in _find_and_load
   File “<frozen importlib.bootstrap>”, line 961, in _find_and_load_unlocked
   File “<frozen importlib.bootstrap>”, line 219, in _call_with_frames_removed
   File “<frozen importlib.bootstrap>”, line 991, in _find_and_load
   File “<frozen importlib.bootstrap>”, line 973, in _find_and_load_unlocked
ModuleNotFoundError: No module named ‘HelloWorld’
[21600] Failed to execute script cli

查看warn-cli.txt表明HelloWorld确实缺失:

Missing module named ‘HelloWorld.__main__’ imported by C:\Users\dnichol3\python\Utilities\cli.py (top-level)

和cli.spec似乎表明PYZ中缺少HelloWorld:

pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

执行生成的cli.exe遇到错误消息:

   File “cli.py”, line 10, in <module>
ModuleNotFoundError: No module named ‘HelloWorld’

我已经阅读了pyinstaller文档(出现错误时)。我试图通过使用–hidden_​​import标志将HelloWorld.py包含到我的pyinstaller命令中,但这始终以pyinstaller结尾:错误:无法识别的参数:--hidden_​​import。而且,无论是否在hidden_​​import和HelloWorld之间使用等号,也不管是否使用.py文件扩展名。

我尝试了其他一些堆栈溢出建议(https://stackoverflow.com/a/46894037/12344177https://stackoverflow.com/a/41869771/12344177https://stackoverflow.com/a/47337389/12344177),但没有用。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我认为这不是pyinstaller问题,但属于您的进口产品。尝试不使用.__main__的cli.py,这意味着您要从HelloWorld.py导入main()。

    # -*- coding: utf-8 -*-
    """
    Created on Tue Jun 30 09:07 2020

    @author: DNICHOL3
    """


    # import HelloWorld
    from HelloWorld import main

    if __name__ == '__main__':
        main()