首页 > 解决方案 > Pyinstaller 和 hiddenimports:如何强制导入 pyinstaller 不会自动导入的包

问题描述

我尝试使用 pyinstaller 生成一个 .exe 文件

它工作正常,除了一个包没有被 pyinstaller 自动检测和导入

这样的包,在这个例子中我们称之为“ packageOfInterest ”,没有被导入,因为开发者没有提供钩子

阅读一些文档后,我了解到可以通过在 .spec 中添加以下行轻松解决此问题

hiddenimports=["packageOfInterest"]

不幸的是它不起作用,即使使用这样的代码行也没有导入“packageOfInterest” 。

所以我的问题是:.spec 文件中还缺少什么?

在我的.spec 文件下面,我已经成功地使用了许多应用程序,其中包可以被 pyinstaller 自动检测到,因此情况并非如此

import sys
import os

from kivy_deps import sdl2, glew
from kivymd import hooks_path as kivymd_hooks_path
path = os.path.abspath(".")

a = Analysis(
    ["MyScript.py"],

    # "packageOfInterest" in the "hiddenimports" is the package name
    #  that pyinstaller could not import automatically
    hiddenimports=["kivymd.stiffscroll", "packageOfInterest"],

    pathex=[path],
    hookspath=[kivymd_hooks_path],
    datas = [("media\\", "media\\")],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=None,
    noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=None)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.zipfiles,
    a.datas,
    *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
    debug=False,
    strip=False,
    upx=True,
    name="MyScript",
    console=True,
    icon='myicon.ico'
)

“packageOfInterest”的位置在路径:

C:\Users\ASUS\AppData\Local\Programs\Python\Python39\Lib\site-packages 

也许这个路径应该在某个地方指定(例如应该在“path”值之后的“pathex”中添加)。

一般来说,确定一个清晰的方法检查通过“MyScript.py”导入的所有包,这些包不能由 pyinstaller 自动导入这将强制它们导入

同时将不胜感激了解如何定制到 .spec 以解决问题

提前致谢

标签: pythonpyinstaller

解决方案


The .exe crashed because one file is not showing. Such file was belonging to the "packageofinterest" (mne)

嗯..您可以尝试使用--collect-data packageofinterest,因为您似乎缺少一些属于该软件包的文件。

--hidden-import packageofinterest如果您不想使用规范文件,也可以使用。


推荐阅读