Windows上的PyInstaller可执行文件由于PortAudio库问题而无法运行(OSError)

加布里埃尔·佩纳(Gabriel Pena)

我正在尝试使用PyInstaller从Python 3.7应用程序在Windows上构建.exe。该构建似乎运行顺利,没有显示任何错误;但是,在Windows命令提示符下执行文件会导致以下可怕错误:

OSError:找不到PortAudio库

我已经对该问题进行了一些研究并找到了一些信息,但仍然无法克服。我的应用程序使用sounddevice库,该库取决于PortAudio库。已安装PortAudio,因为当我直接使用Python运行该应用程序时,该应用程序可以完美运行;问题显然是,PyInstaller以某种不同的方式跟踪依赖项,无法找到它并将其链接到构建。

实际上,这种“不同方式”是从“ ctypes.util” Python库调用“ find_library”函数来查找系统上的PortAudio库。因此,我在Python上运行了以下命令,并确认它无法找到该库。

Python 3.7.1(默认值,2018年12月10日22:54:23)[MSC v.1915 64位(AMD64)] ::> Anaconda,Inc.在win32上键入“ help”,“ copyright”,“ credits”或有关更多信息的“许可证”。

从ctypes.util导入find_library

一个= find_library('portaudio')

打印(a)

没有

到目前为止,我已经尝试了几种解决方案。首先,我手动下载并编译了最新的PortAudio版本。没用 然后,我尝试使用Anaconda代替正式的Python发行版;如您所知,Anaconda的包管理器“ conda”可以处理PortAudio之类的C库。因此,我将其安装在Anaconda的虚拟环境中,并尝试在其中构建我的应用程序。也没用。我也尝试将PortAudio目录添加到Windows PATH变量,但是也失败了。我有点迷路了。我尚未尝试的唯一想法是使用Wine在Linux上构建它,但是我怀疑可能有一种使其在Windows上运行的方法。

有任何想法吗?

加布里埃尔·佩纳(Gabriel Pena)

我设法自己解决了。我将发布答案,这可能对某人有用。

我认为是对的。ctypes检查Windows PATH环境变量中定义的文件夹,并在它们中搜索库。事实是,在Linux上,系统使用某种别名,因此当

from ctypes.util import find_library
find_library('portaudio')

它返回正确的portaudio库。但是在Windows上,仅检查文件名。因此,您必须确保满足以下两个条件:

  • 含PortAudio的DLL的目录在PATH环境变量。
  • DLL文件名(不带扩展名)必须完全是“ portaudio”。

关于DLL,如果您在Python应用中使用sounddevice,则应该可以在这里找到它们:

\ your \ path \ to \ python \ Lib \ site-packages_sounddevice_data \ portaudio-binaries

该文件名为“ libportaudio64bit.dll”,因此仅将该目录添加到PATH并不能解决问题。为了克服这个问题,我只是将dll复制到另一个目录,将其重命名为“ portaudio.dll”,然后将该目录添加到PATH中。像魔术一样工作。

如果您不使用声音设备,也可以从此处下载这些相同的预编译DLL:

https://github.com/spatialaudio/portaudio-binaries

就这样。希望能帮助到你!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法在Linux上运行Pyinstaller可执行文件

无法在挂载分区上运行可执行文件

无法在Mac上的Wine中运行Windows可执行文件

由于“错误的cpu类型一可执行文件”而无法使用hombrew

PyInstaller:单文件可执行文件不运行

使用pyinstaller在Linux中创建python可执行文件,无法在Windows计算机上运行

带泡菜的 Tkinter。pyinstaller 可执行文件问题

运行使用 PyInstaller 构建的可执行文件时出现问题

使用 Pyinstaller 创建的可执行文件无法启动

如何在Ubuntu上使用PyInstaller创建Windows可执行文件?

如何在Ubuntu上使用PyInstaller创建Windows可执行文件?

pyinstaller可执行文件失败

在 ubuntu 上使用 Pyinstaller 创建的可执行文件并在 SuSE12 SP4 上运行会引发 libreadline 问题

Powershell 从存储库运行安装可执行文件

cmake,无法运行与预编译共享库链接的可执行文件

无法创建链接静态库的可执行文件

无法运行Nginx可执行文件

使“解压”是最新的;可执行文件将无法运行

.JAR可执行文件无法正常运行

Docker运行无法找到可执行文件“ uwsgi”

可执行文件无法正常运行[Linux]

根本无法运行可执行文件

在NTFS分区上运行可执行文件?

Windows如何确定要运行的可执行文件

无法在Ubuntu 12.04上运行二进制可执行文件

无法在 Linux 上的路径中运行 jar 可执行文件

无法在64位Ubuntu上运行32位动态可执行文件

C ++可执行文件无法在Windows 7中运行-64位不兼容

Wine上可执行文件的运行速度比Windows快-为什么呢?