python - 在 Windows 上安装 PyAudio

标签 python pip pyaudio

在 Windows 10 上安装 PyAudio 错误

我想安装 PyAudio

我有Windows 10Python 3.7pip 8.1

我正在使用命令 pip install PyAudio 在命令提示符中安装它
但有一个错误错误:命令'D:\\VisualStudio2017\\VC\\Tools\\MSVC\\14.16.27023\\bin\\HostX86\\x86\\cl.exe'失败,退出状态2

Command "c:\python37\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\USER\\AppData\\Local\\Temp\\pip-install-is1aobj6\\pyaudio\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\USER\AppData\Local\Temp\pip-record-50bh4kz0\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in C:\Users\USER\AppData\Local\Temp\pip-install-is1aobj6\pyaudio\

这是一个 screenshot

感谢您阅读我的问题。我希望你能帮忙:D

最佳答案

嗯,当我想安装 pylisten (它有 PyAudio 作为依赖项)时,我遇到了这个问题。

这里有两个问题 - 首先,你的 MSVC 找不到 portaudio.h,然后构建时 min 宏会出现问题。但首先要做的事情。

获取portaudio

这是 PyAudio 的 C 依赖项,因此您需要包含文件,特别是 portaudio.h,如屏幕截图中所示。可以获取适用于 Windows 的二进制文件,但如果您使用 Anaconda,最简单的方法是使用 conda 安装它:

(base) C:\> conda search portaudio
Loading channels: done
# Name                       Version           Build  Channel
portaudio                     19.6.0      h0c8e037_3  pkgs/main
portaudio                     19.6.0      hfa6e2cd_3  pkgs/main

(base) C:\> conda install portaudio
(...)

接下来,我们想知道 portaudio 库中的文件实际去了哪里。没有 conda package --list 命令...(请参见此处: https://github.com/conda/conda/pull/7457 ),因此我们需要在其他地方找到一些魔法:

(base) C:\>dir %CONDA_PREFIX%\conda-meta\portaudio*
(...)
26.01.2020  13:17             5 577 portaudio-19.6.0-hfa6e2cd_3.json

我们需要检查此 JSON 并找到 files 属性:

  "extracted_package_dir": "C:\\Users\\(...)\\Anaconda3\\pkgs\\portaudio-19.6.0-hfa6e2cd_3",                             
  "features": "",
  "files": [
    "Library/bin/portaudio.dll",
    "Library/include/pa_asio.h",
    "Library/include/pa_jack.h",
    "Library/include/pa_linux_alsa.h",
    "Library/include/pa_mac_core.h",
    "Library/include/pa_win_ds.h",
    "Library/include/pa_win_wasapi.h",
    "Library/include/pa_win_waveformat.h",
    "Library/include/pa_win_wdmks.h",
    "Library/include/pa_win_wmme.h",
    "Library/include/portaudio.h",
    "Library/lib/portaudio.lib",
    "Library/lib/portaudio_static.lib",
    ".nonadmin"
  ],                                                                                                                  

extracted_pa​​ckage_dir(上面删除的用户名)实际上相当于:

%CONDA_PREFIX%\pkgs\portaudio-19.6.0-hfa6e2cd_3

因此,对于这个特定的构建,必要的包含目录(-I)是:

%CONDA_PREFIX%\pkgs\portaudio-19.6.0-hfa6e2cd_3\Library\include

链接目录(-L)是:

%CONDA_PREFIX%\pkgs\portaudio-19.6.0-hfa6e2cd_3\Library\lib

这在下面会有用。

简单的方法,但行不通

现在,如果您的 Conda 环境具有用于构建 native 扩展的 MSVC 14.0,您应该可以使用:

(base) C:\> pip install --global-option=build_ext --global-option="-I%CONDA_PREFIX%\pkgs\portaudio-19.6.0-hfa6e2cd_3\Library\include" --global-option="-L%CONDA_PREFIX%\pkgs\portaudio-19.6.0-hfa6e2cd_3\Library\lib" pyaudio

现在,它将找到portaudio.h!

但是遗憾的是,在撰写本文时,此操作因编译错误而失败。我仍然把它放在这里,因为也许与 MSVC 的不兼容问题会得到修复。

艰难但成功的方法

我们需要破解 PyAudio 的源代码。这可以像这样完成:

(base) C:\>pip download pyaudio

这将下载一个类似 PyAudio-0.2.11.tar.gz 的文件(版本号将来可能会有所不同)。您需要使用 tar 解压它。我把它放在 C:\Windows\system32 中 - 也许是因为 WSL。您也可以使用 7-zip 来解压它。无论如何:

(base) C:\>tar xf PyAudio-0.2.11.tar.gz
(... unpacked ...)
(base) C:\>cd PyAudio-0.2.11
(base) C:\PyAudio-0.2.11>

现在要获得与之前相同的结果,您需要将特殊参数传递给 setup.py (当然,与 pip 的方式不同) ):

(base) C:\PyAudio-0.2.11>python setup.py build_ext --include-dirs="%CONDA_PREFIX%\pkgs\portaudio-19.6.0-hfa6e2cd_3\Library\include" --library-dirs="%CONDA_PREFIX%\pkgs\portaudio-19.6.0-hfa6e2cd_3\Library\lib" install
(compile errors: min macro redefinition, __typeof__ undefined)

现在,编辑文件 src\_portaudiomodule.c,并删除/注释掉这些行(位于顶部,第 ~39 行):

#define min(a, b)           \
  ({                        \
    __typeof__(a) _a = (a); \
    __typeof__(b) _b = (b); \
    _a < _b ? _a : _b;      \
  })

这个微不足道的宏就是罪魁祸首。如果您想向 Pham 先生 ( http://people.csail.mit.edu/hubert/pyaudio/ ) 提交修复,请不要删除它,而是使用类似的内容 #ifndef _MSC_VER ... #endif

保存文件并再次运行:

(base) C:\PyAudio-0.2.11>python setup.py build_ext --include-dirs="%CONDA_PREFIX%\pkgs\portaudio-19.6.0-hfa6e2cd_3\Library\include" --library-dirs="%CONDA_PREFIX%\pkgs\portaudio-19.6.0-hfa6e2cd_3\Library\lib" install

现在一切都应该好了。

编辑:TL;DR简单方法

再次检查后,我在https://repo.anaconda.com/pkgs/main/win-64中看到了pyaudio。这意味着,如果您使用 Anaconda,您可以执行以下操作:

conda install pyaudio

我将保留此答案的其余部分用于教育目的。

关于python - 在 Windows 上安装 PyAudio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53936589/

相关文章:

python - 我如何在 Plone 4 开发的产品中运行测试?

python - 在商业产品中使用 LGPL 许可证上的 Python 模块

python - 无法从批处理文件执行 Python 脚本

python - 并行 Pip 安装

python - 同时播放多个 wav 文件,用于 Python 中的鼓机

python - 分离然后加入 .wav 立体声 channel 时出现断断续续的音频

python - 无法复制 gdal 输出

python - 运行 import tensorflow 后的非法指令(核心转储)

python - 强制 Python 包 setup.py bdist_wheel 在子目录中包含二进制文件

python - paInt32、paInt16、paInt24、paFloat32 等之间的区别?