Python Ubuntu Oneiric上的scikits.audiolab-导入错误:没有名为_sndfile的模块

Python Ubuntu Oneiric上的scikits.audiolab-导入错误:没有名为_sndfile的模块,python,Python,好的,我想用Python做一些基本的信号处理,找到了这个很棒的库,名为scikits.audiolab 任何地方都找不到PPA。哦,好吧。我想我可以简单地把它安装到我的Ubuntu Oneiric服务器上 sudo aptitude install libsndfile-dev 然后 sudo easy_install scikits.audiolab 然而,这一点失败了 error: sndfile (http://www.mega-nerd.com/libsndfile/) librar

好的,我想用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
[...]
奇怪,图书馆进入非标准图书馆目录?愚蠢的包装工

哦,好吧。下载了Scikets.audiolab的源代码,编写了一个
站点.cfg
如下:

[sndfile]
include_dirs = /usr/include
library_dirs = /usr/lib/x86_64-linux-gnu/
sndfile_libs = sndfile
现在,
python setup.py build
sudo setup.py安装
成功完成

接下来,启动Python shell,尝试从Scikets.audiolab导入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
\u sndfile.so
可在
/usr/local/lib/python2.7/dist packages/scikits.audiolab-0.11.0-py2.7-linux-x86\u 64.egg/scikits/audiolab/pysndfile/\u sndfile.so上找到

所以我的问题是,

  • 世跆联在进行什么?为什么python找不到
    \u sndfile.so
  • 2011年是否有人在2011 Linux发行版上成功使用了scikits.audiolab?你是怎么做到的
  • 有没有好的替代库可以将大量(比如10GB/8小时)WAV文件逐块读取到NumPy中

  • 编辑:我刚刚意识到情况并非如此,因为pysndfile似乎是捆绑的。。。我不应该在早上第一件事就回答这些问题;)


    回答1:Sndfile是一个c库,您很可能需要为它安装python包装器:

    有人建议我检查
    ldd\u 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是否安装了flac vorbis工具

    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
    的构建脚本中触发了构建时故障,那么这会容易得多。。。毕竟,最后的错误消息没有提到这些库。

    如果您不想看到关于alsa头的警告,只需安装库即可

    sudo apt get安装libasound2 dev

    这对我来说很管用

    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, "