Ubuntu Oneiric上的scikits.audiolab-importrorror:没有名为_sndfi的模块

2024-05-19 00:23:05 发布

您现在位置: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/) library not found.
Directories to search for the libraries can be specified in the
site.cfg file, in section [sndfile].

世界贸易基金会?好的,查询了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 buildsudo 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']

以及在/usr/local/lib/python2.7/dist-packages/scikits.audiolab-0.11.0-py2.7-linux-x86_64.egg/scikits/audiolab/pysndfile/_sndfile.so发现的_sndfile.so

所以,我的问题是

  1. 世界贸易基金会在进行吗?为什么python找不到_sndfile.so
  2. 2011年是否有人在2011年的Linux发行版上成功地使用了scikits.audiolab?你是怎么做到的?
  3. 有没有好的替代库可以将大量(比如,10gb/8小时)的WAV文件逐块读入NumPy?

Tags: indevgnuincludelinuxlibpackagesusr
3条回答

有人建议我检查一下。就这么做了

    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支持的警告,因为它可能用于本地录制和播放-无论如何这是一个服务器。

如果缺少libFLAClibvorbislibvorbisenc触发了scikits.audiolab的生成脚本中的生成时失败,那就容易多了。。。毕竟,最后的错误消息没有提到这些库。

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

答:Sndfile是一个c库,您很可能需要为它安装python包装器:http://code.google.com/p/libsndfile-python/

如果你不想得到关于alsa头的警告,只需要安装lib。

sudo apt get安装libasound2 dev

这对我很有用。。

相关问题 更多 >

    热门问题