[英]Installing PyAudio on Windows
我想安装 PyAudio
我有Windows 10 , Python 3.7 , pip 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
现在一切都应该好了。
再次检查后,我在https://repo.anaconda.com/pkgs/main/win-64
看到了pyaudio
。 这意味着,如果你使用 Anaconda,你可以这样做:
conda install pyaudio
我将把这个答案的其余部分用于教育目的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.