在Ubuntu上通过pip安装pysox时报错无法找到sox.h
我在Ubuntu 12.04.2 LTS上尝试用pip安装pysox这个包(用easy_install也会出现同样的错误)。
$ pip install pysox
[...]
building 'pysox.sox' extension
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c pysox/sox.c -o build/temp.linux-x86_64-2.7/pysox/sox.o
pysox/sox.c:227:17: fatal error: sox.h: No such file or directory
我的系统上已经安装了:
$ dpkg --list | grep sox
ii libsox-fmt-all 14.3.2-3 All SoX format libraries
ii libsox-fmt-alsa 14.3.2-3 SoX alsa format I/O library
ii libsox-fmt-ao 14.3.2-3 SoX Libao format I/O library
ii libsox-fmt-base 14.3.2-3 Minimal set of SoX format libraries
ii libsox-fmt-ffmpeg 14.3.2-3 SoX ffmpeg format library
ii libsox-fmt-mp3 14.3.2-3 SoX MP3 format library
ii libsox-fmt-oss 14.3.2-3 SoX OSS format I/O library
ii libsox-fmt-pulse 14.3.2-3 SoX PulseAudio format I/O library
ii libsox1b 14.3.2-3 SoX library of audio effects and processing
ii sox 14.3.2-3 Swiss army knife of sound processing
还有libasound2-plugins
和libasound2-python
这两个包。我甚至下载了SoX的源代码,并把~/sox/src/sox.h加到了我的PATH
里,但都没有解决问题。确实,使用find
命令找不到sox.h,尽管我的二进制文件看起来都没问题。pysox的源代码里似乎也没有sox.h这个文件。
pysox的官方网站上说:“你需要在你的包含路径中有sox.h,并且在链接路径中有libsox.so和libsox.a。”
但是,除了从源代码编译所有东西,我看不出如何仅通过二进制包来获得这些文件。难道不能用普通的包管理工具来安装这个吗?我需要自己编译、链接和包含所有东西吗?
在Debian/Ubuntu上,如何才能正确安装pysox呢?
2 个回答
7
如果这能帮到你,我之前也遇到过同样的问题,但在使用时出现了错误:
sudo apt-get install libasound2-plugins libasound2-python libsox-fmt-all libsox-dev sox
不过我最终解决了这个问题,方法是去掉了libasound的请求,现在似乎已经不再可用了。
这是我找到的解决办法……我觉得过程是这样的:
pip3 install sox
sudo apt-get install sox libsox-fmt-all
sudo apt-get install sox libsox-dev
pip3 install pysox
我花了大约11个小时才搞明白这个问题。
6
好吧,这个是可以预料的:我忘了安装SoX的开发包,也就是libsox-dev。一开始我没意识到这一点,因为标准包是sox,而库包都是以libsox-fmt开头的(而且关于这一点的文档很少)。
无论如何,这里是你在Debian机器上需要的所有东西,以便让pip/easy_install正确管理你的SoX模块:
sudo apt-get install libasound2-plugins libasound2-python libsox-fmt-all libsox-dev sox