繁体   English   中英

在 Windows 上安装 PyAudio

[英]Installing PyAudio on Windows

在 Windows 10 上安装 PyAudio 错误

我想安装 PyAudio

我有Windows 10Python 3.7pip 8.1

我正在使用命令pip install PyAudio在命令提示符中安装它
但是有一个错误error: command 'D:\\VisualStudio2017\\VC\\Tools\\MSVC\\14.16.27023\\bin\\HostX86\\x86\\cl.exe' failed with exit status 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\

这是一个屏幕截图

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

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

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

获取端口

这是 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),所以我们需要做一些在 SO 上其他地方发现的魔法:

(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_package_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 环境具有用于构建本机扩展的 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

我将把这个答案的其余部分用于教育目的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM