【问题标题】:ImportError: No module named win32timezone when i make a singleone exe from a python script with pyInstallerImportError:当我使用 pyInstaller 从 python 脚本制作单个 exe 时,没有名为 win32timezone 的模块
【发布时间】:2019-11-22 16:01:15
【问题描述】:

我有一个脚本可以在 py 文件时工作,但是当我使用 pyInstaller 从该脚本创建一个 exe 文件时,我会收到一个错误:ImportError: No module named win32timezone
我在脚本中导入:

import win32serviceutil
import win32service
import win32event

还有一些其他模块,例如 subprocess, os, time,但我认为 3 是问题所在。
有人知道出了什么问题吗?谢谢!

【问题讨论】:

  • 尝试更改 .spec 文件,听起来像是隐藏导入的工作...
  • 当 FileChooser 尝试在我的 .exe 构建中打开时,我得到一个 'win32timezone' 模块未找到(在与 'python main.py' 运行的同一程序中没有问题)。事实证明,下面提到的隐藏导入是修复它的正确方法。在我的 .spec 文件中,我确保 Analysis 的 hiddenimports 部分显示为:hiddenimports=['win32timezone'],然后我的运行时 ImportError 已修复。

标签: python pyinstaller


【解决方案1】:

-v 标志不再起作用(现在显示版本)。

首先,找出缺少哪个模块。您可以通过 PowerShell/cmd 执行 exe 来执行此操作。例如,如果您的文件是“project.exe”,则在其目录中打开一个 PowerShell 窗口并使用命令:.\project.exe

使用它来构建 exe: pyinstaller --hiddenimport win32timezone -F a.py

  • win32timezone 是缺少的模块。
  • 使用 -F 或 --onefile 创建一个独立的、可再发行的 exe。
  • 如果您缺少多个模块,您可以多次使用 --hiddenimport。

参考:https://pythonhosted.org/PyInstaller/usage.html

【讨论】:

  • 解决了我的问题。非常感谢你,我的朋友。祝你好运。
【解决方案2】:

我认为您需要遵循 Pyinstaller 手册的这一部分:

https://pythonhosted.org/PyInstaller/#id67

列出隐藏的导入

如果 Analysis 认为它​​已找到所有导入,但应用程序失败 出现导入错误,问题是隐藏导入;也就是说,一个 分析阶段不可见的导入。

当代码使用 import 时,可能会发生隐藏导入,或者可能 执行或评估。扩展模块时也可能发生隐藏导入 使用 Python/C API 进行导入。发生这种情况时,Analysis 可以 什么都检测不到。不会有任何警告,只有 ImportError 在 运行时。

要找到这些隐藏的导入,请使用 -v 标志构建应用程序(获取 上面 Python 的详细导入)并运行它。

一旦您知道需要哪些模块,您就可以将所需的模块添加到 使用 --hidden-import= 命令选项 或通过编辑 规范文件,或使用挂钩文件(请参阅了解 PyInstaller 下面的钩子)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 2012-07-10
    • 2014-01-21
    • 2018-04-03
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    相关资源
    最近更新 更多