我有一个脚本,它在py
文件时有效,但是当我使用pyInstaller从该脚本生成一个单独的exe文件时,我会收到错误:ImportError: No module named win32timezone
。
我用脚本导入:
import win32serviceutil
import win32service
import win32event
和其他一些模块如subprocess, os, time
,但我认为3是问题
谁知道出了什么问题?谢谢!
答案 0 :(得分:6)
我认为您需要遵循Pyinstaller手册的这一部分:
https://pythonhosted.org/PyInstaller/#id67
列出隐藏的进口
如果Analysis认为已找到所有导入,但应用程序失败 导入错误,问题是隐藏导入;也就是说 导入在分析阶段不可见。
当代码使用导入或可能时,可能会发生隐藏导入 执行或评估。扩展模块时也可能发生隐藏导入 使用Python / C API进行导入。发生这种情况时,分析可以 没有检测到。没有警告,只有一个ImportError 运行时间。
要查找这些隐藏的导入,请使用-v标志构建应用程序(获取 Python的Verbose Imports上面并运行它。
一旦知道需要哪些模块,就可以添加所需的模块 使用 - hidden-import =命令选项或通过编辑捆绑包 spec文件,或者使用钩子文件(请参阅了解PyInstaller 下面的钩子。)
答案 1 :(得分:1)
-v标志不再起作用(现在显示版本)。
首先,找出缺少的模块。您可以通过PowerShell / cmd执行exe来执行此操作。例如,如果您的文件是“ project.exe”,则在其目录中打开一个PowerShell窗口,然后使用命令:.\project.exe
。
使用它来构建exe:
pyinstaller --hiddenimport win32timezone -F a.py