如果pyinstaller无法找到动态或自定义库,该怎么办?

时间:2018-06-13 19:17:43

标签: python compilation libraries pyinstaller

我试图使用pyinstaller来创建我的Python程序的单个exe文件,但是当该过程完成时,exe就无法运行。在查看进程的控制台输出后,我可以看到该行:

126946 INFO:寻找动态库

我得到几百行"警告:未找到lib:api-ms-win-crt- 路径到dll的任何数量的不同.dll 依赖关系或pyd已保存

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

编辑: 提供更多信息 - 我的程序由5个模块组成,其中我使用了三个第三方软件包,包括:PyQt5,pandas和ArcGIS。另外,我有两个sql文件也是程序的一部分。我觉得pyinstaller只能编译简单的脚本,并且使用其他软件包,模块和外部文件,它只是为了处理那种东西而做的。

3 个答案:

答案 0 :(得分:1)

有趣的是,有人在44分钟之前问了一个类似的问题,但是使用了excel的python。

无论如何,希望这里的答案有效,审核员/主持人也不会对此感到害怕; p

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

Py to exe Project

<强>先决条件

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

Chrome:运行用户界面

<强>安装

下载压缩文件夹

打开cmd /终端和cd解压缩文件夹(建议暂时将其放在桌面上)

执行pip install -r requirements.txt

运行应用程序

运行run.py。 Chrome将在app模式下打开,项目在里面运行。

使用应用

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

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

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

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

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

传递带参数的文件

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

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

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

的导入
from x.y import z 

我在几个版本中收到错误,似乎pyinstaller没有认识到这些东西。所以我把事情做得非常直截了当,比如

import PyQt5

最后,当我使用-p命令编译构建时,我添加了两个文件路径;一个指向我的程序的根位置,这是保存另一个模块(PyQt5模块)的位置,第二个路径是&#34; C:\ Users \ natha \ AppData \ Local \ Programs \ Python \ Python36- 32 \ LIB \站点包&#34 ;.一旦这些东西到位,编译正常完成,构建运行完美。总而言之,这里成功的关键是:

- 确保有一个hook-pandas.py文件如果您的脚本中正在使用pandas - 确保hook-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

输入类型,以避免那些。