【问题标题】:What to do if pyinstaller can't find dynamic or custom libraries?如果 pyinstaller 找不到动态或自定义库怎么办?
【发布时间】:2018-06-13 19:17:43
【问题描述】:

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

126946 信息:寻找动态库

我收到数百行“警告:找不到 lib:api-ms-win-crt-任意数量的不同 .dll 依赖于 dll 或 pyd 所在路径的路径已保存

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

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

【问题讨论】:

  • 你能告诉我们你用来创建单个exe的命令吗
  • 最初,我只是在控制台中输入了pyinstaller myFile.py,而在myFile.py目录下。由于我只想拥有一个自包含的 exe,我将其更改为:pyinstaller --onedir --name=myFile --windowed --onefile --noconsole myFile.py
  • @ishandutta2007 这看起来是一个完全不同的问题,因为错误消息引用了不同的缺失库和问题。
  • @NLee23 libpython2.7.dylib dylib 代表动态库。在这两种情况下,库都存在并且位于适当的路径中,但代码无法访问

标签: python compilation libraries pyinstaller


【解决方案1】:

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

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

我已从我推荐的解决方案中复制了说明,并使用该链接作为补充。 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 将以应用模式打开,项目在其中运行。

使用应用程序

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

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

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

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

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

使用参数传递文件

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

【讨论】:

  • 感谢您的信息。我试了一下,但它要么创建一个不运行的构建,要么在编译过程中锁定。我认为这个问题与熊猫有关。 PyQt5 文件夹被创建(如果编译完成),但 Pandas 文件没有。另外,在 pyinstaller\hooks 文件夹中,没有 pandas 文件,所以我看到了另一篇关于如何创建的文章。
【解决方案2】:

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

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

【讨论】:

  • 感谢您的回复。这可能是问题的一部分,但在安装 SDK 后,它仍然无法正确编译。必须还有另一个步骤要做。
  • 关于这个的另一个问题 - 下载 SDK 后,我应该在编译时做一些不同的事情吗?将 pyinstaller 指向它似乎正在寻找的这些驱动程序的东西?我检查并在编译时出现在警告中的 dll 清楚地位于您上面引用的文件夹中。所以,它们存在,但 pyinstaller 看不到它们,或者看起来。还有其他建议吗?再次感谢您的宝贵时间。
  • 您是否按照我在答案中提到的那样将目录添加到您的路径中?在运行 pyinstaller 命令之前通过回显来仔细检查。
  • 我确实将它添加到了路径中,但我没有告诉 pyinstaller 查看该文件夹。但是,我可以在下次编译时尝试一下,看看它有什么变化。无论如何我都能编译,所以这些特定的驱动程序可能不会直接影响我的程序。
【解决方案3】:

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

首先,pyinstaller 缺少 pandas 的“挂钩”文件,因此必须手动创建。对我来说,钩子文件夹位于:“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 \网站包”。一旦这些东西到位,编译正常完成并且构建运行完美。所以总而言之,这里成功的关键是:

-如果你的脚本中使用了 pandas,请确保有一个 hook-pandas.py 文件 - 确保 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

类型导入,以避免这些。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 2017-02-02
    • 2018-03-04
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多