Ubuntu Oneiric上的scikits.audiolab-ImportError:没有名为_sndfile的模块
问题内容:
好的,所以我想用Python进行一些基本的信号处理,并找到了一个名为的出色库scikits.audiolab
。
在任何地方都找不到PPA。那好吧。我以为我可以简单地将其安装在我的Ubuntu Oneiric服务器上
sudo aptitude install libsndfile-dev
接着
sudo easy_install scikits.audiolab
然而,这失败了
error: sndfile (http://www.mega-nerd.com/libsndfile/) library not found.
Directories to search for the libraries can be specified in the
site.cfg file, in section [sndfile].
WTF?好的,查询libsndfile1-dev
文件列表:
japsu@helios ~ $ apt-file list libsndfile1-dev
libsndfile1-dev: /usr/include/sndfile.h
libsndfile1-dev: /usr/include/sndfile.hh
libsndfile1-dev: /usr/lib/x86_64-linux-gnu/libsndfile.a
libsndfile1-dev: /usr/lib/x86_64-linux-gnu/libsndfile.la
libsndfile1-dev: /usr/lib/x86_64-linux-gnu/libsndfile.so
libsndfile1-dev: /usr/lib/x86_64-linux-gnu/pkgconfig/sndfile.pc
[...]
很奇怪,图书馆会进入非标准图书馆目录吗?愚蠢的打包者。
那好吧。下载的源代码scikits.audiolab
,这样写site.cfg
:
[sndfile]
include_dirs = /usr/include
library_dirs = /usr/lib/x86_64-linux-gnu/
sndfile_libs = sndfile
现在python setup.py build
并sudo setup.py install
成功完成。
接下来,启动一个Python shell,尝试执行以下操作from scikits.audiolab import sndfile
:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "scikits/audiolab/__init__.py", line 25, in <module>
from pysndfile import formatinfo, sndfile
File "scikits/audiolab/pysndfile/__init__.py", line 1, in <module>
from _sndfile import Sndfile, Format, available_file_formats, \
ImportError: No module named _sndfile
但:
>> sys.path
['',
'/usr/bin',
'/usr/lib/pymodules/python2.7',
'/usr/local/lib/python2.7/dist-packages/scikits.audiolab-0.11.0-py2.7-linux-x86_64.egg',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-linux2',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages/IPython/Extensions',
u'/home/japsu/.ipython']
并_sndfile.so
在找到/usr/local/lib/python2.7/dist- packages/scikits.audiolab-0.11.0-py2.7-linux-x86_64.egg/scikits/audiolab/pysndfile/_sndfile.so
。
所以,我的问题是
- WTF正在进行吗?python为什么找不到
_sndfile.so
? - 有人
scikits.audiolab
在2011年的Linux发行版中成功使用了2011年吗?你是怎么做到的? - 是否有任何好的替代库可以将巨大的(例如10 GB / 8小时)WAV文件逐块读取到NumPy中?
问题答案:
有人建议我检查一下ldd _sndfile.so
。做到了就得到了
linux-vdso.so.1 => (0x00007fffd3dea000)
libsndfile.so.1 => /usr/lib/x86_64-linux-gnu/libsndfile.so.1 (0x00007f2bfbb5b000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f2bfb93e000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2bfb59e000)
libFLAC.so.8 => /usr/lib/x86_64-linux-gnu/libFLAC.so.8 (0x00007f2bfb354000)
libvorbisenc.so.2 => /usr/lib/x86_64-linux-gnu/libvorbisenc.so.2 (0x00007f2bfae85000)
libvorbis.so.0 => /usr/lib/x86_64-linux-gnu/libvorbis.so.0 (0x00007f2bfac58000)
libogg.so.0 => /usr/lib/x86_64-linux-gnu/libogg.so.0 (0x00007f2bfaa51000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f2bfa7cd000)
有趣!一堆文件格式库也被引用,我可能还没有安装。
做到了sudo aptitude install flac vorbis-tools
,瞧!
In [1]: from scikits.audiolab import sndfile
/usr/local/lib/python2.7/dist-packages/scikits.audiolab-0.11.0-py2.7-linux-x86_6
4.egg/scikits/audiolab/soundio/play.py:48: UserWarning: Could not import alsa ba
ckend; most probably, you did not have alsa headers when building audiolab
warnings.warn("Could not import alsa backend; most probably, "
我现在可能会忽略关于缺少ALSA支持的警告,因为它可能用于本地记录和回放-无论如何这是一台服务器。
如果缺少libFLAC
,libvorbis
并且libvorbisenc
在…的构建脚本中触发了构建时故障,那将容易得多scikits.audiolab
。毕竟,最终的错误消息中没有提到这些库。