pyinstaller找不到动态库或自定义库怎么办?

What to do if pyinstaller can't find dynamic or custom libraries?

我正在尝试使用 pyinstaller 创建我的 Python 程序的单个 exe 文件,但是当该过程完成时,exe 不能是 运行。查看该过程的控制台输出后,我可以看到以下行:

126946 信息:寻找动态库

我收到数百行“警告:未找到库:api-ms-win-crt-任意数量的不同 .dll 保存dll或pyd的路径

我使用默认配置安装 Python,并且一直使用 pip 安装 Python 包。 Pyinstaller 应该是直截了当的,不需要很多额外的步骤,比如创建一个 setup.py 文件,但它似乎缺少一些东西,告诉 pyinstaller 在哪里寻找那些丢失的库。有解决方法吗?或者我应该使用更好的 python 到 exe 编译器?

编辑: 提供更多信息——我的程序由 5 个模块组成,其中我使用了三个第 3 方包,包括:PyQt5、pandas 和 ArcGIS。此外,我还有两个 sql 文件,它们也是程序的一部分。我有一种感觉,pyinstaller 只能编译简单的脚本,通过使用其他包、模块和外部文件,它就是用来处理这种东西的。

有趣的是,大约 44 分钟前有人问过类似的问题,但使用 python 和 excel。

无论如何,希望这里的答案有效并且 auditor/moderator 不会为此感到害怕;p

我已经从我推荐的解决方案中复制了说明,并使用 link 作为补充。 https://www.youtube.com/watch?v=OZSZHmWSOeM

Py 到 exe 项目

先决条件

Python : Python 2.7 或 Python 3.3+(基本上是 pyinstaller 运行 上的任何东西)

Chrome : 运行 用户界面

正在安装

下载压缩文件夹

打开cmd/terminal和cd解压后的文件夹(建议暂时放在桌面)

执行pip install -r requirements.txt

运行应用程序

运行run.py。 Chrome 将以应用程序模式打开,其中包含项目 运行ning。

使用应用程序

Select 您的脚本位置(粘贴或使用文件资源管理器)

当文件存在时,地址框轮廓将变为蓝色

Select 其他选项并添加图标或其他文件等内容

点击底部蓝色大按钮进行转换

完成后在[解压缩文件夹]/输出中找到您转换的文件

传递带有参数的文件

或者您可以执行 python run.py [filename]。这将在脚本位置打开带有文件名的 window。

您需要安装 Windows 10 SDK,然后更新您的路径以包含 ucrt dll,可以在此处找到 post-安装:

C:\Program Files (x86)\Windows Kits\Redist\ucrt\DLLs\x86

我进行了一系列更改,导致构建编译和 运行 正确。

首先,pyinstaller 缺少 pandas 的 'hook' 文件,因此必须手动创建一个。对我来说,挂钩文件夹位于此处:"C:\Users\natha\AppData\Local\Programs\Python\Python36-32\Lib\site-packages\PyInstaller\hooks"

在该文件夹中,我创建了一个名为 hook-pandas.py 的文件,该文件的唯一内容是一行:hiddenimports = ['pandas._libs.tslibs.timedeltas']

我确实安装了 Windows 10 SDK,但我不确定这是否只是问题的一部分,或者如果有的话,它会影响什么。我的程序是由多个模块组成的,因为我喜欢将不同类型的进程分开放在不同的文件中。但是,为了简化事情,我将所有代码合并到一个 .py 文件中,并且只有另一个文件包含我的 PyQt5/Qt Designer 自动生成的 GUI 代码。我删除了所有读起来像

的导入
from x.y import z 

我在一些构建中收到错误,似乎 pyinstaller 无法识别这些东西。所以我让事情变得非常直截了当,比如

import PyQt5

最后,我去编译构建的时候,使用-p命令,添加了两个文件路径;一个指向我的程序的根位置,这是另一个模块(PyQt5 模块)的保存位置,第二个路径是 "C:\Users\natha\AppData\Local\Programs\Python\Python36-32\Lib\site-packages"。一旦这些东西到位,编译就会正常完成并且构建运行完美。所以总而言之,这里成功的关键是:

-确保有一个 hook-pandas.py 文件 IF pandas 正在您的脚本中使用 -确保钩子-pandas.py 文件包含此行:

hiddenimports = ['pandas._libs.tslibs.timedeltas']

- 并确保使用 -p 命令将 pyinstaller 定向到保存自定义模块和任何 python 包的位置。我的 -p 命令是这样读的:

-p C:\Users\natha\Desktop\Python_Projects\CompEval\code:C:\Users\natha\AppData\Local\Programs\Python\Python36-32\Lib\site-packages

注意分隔两条路径的冒号。

我认为这些是要检查的主要内容,次要内容是

from x.y import z

键入导入,以避免这些。