2011-12-11 27 views
9

Được rồi, vì vậy tôi muốn thực hiện một số xử lý tín hiệu cơ bản trong Python và tìm thấy thư viện tuyệt vời này được gọi là scikits.audiolab.scikits.audiolab trên Ubuntu Oneiric - ImportError: Không có module _sndfile

Không tìm thấy PPA ở bất cứ đâu. Oh well. Tôi nghĩ tôi có thể cài đặt nó trên máy chủ Oneiric Ubuntu của tôi bằng cách đơn giản

sudo aptitude install libsndfile-dev 

và sau đó

sudo easy_install scikits.audiolab 

này, tuy nhiên, thất bại với

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? OK, đã truy vấn danh sách tệp libsndfile1-dev:

[email protected] ~ $ 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 
[...] 

Lạ, thư viện đi vào thư mục thư viện không chuẩn? Máy đóng gói ngu ngốc.

Ồ tốt. Tải về các nguồn cho scikits.audiolab, đã viết một site.cfg như thế này:

[sndfile] 
include_dirs = /usr/include 
library_dirs = /usr/lib/x86_64-linux-gnu/ 
sndfile_libs = sndfile 

Bây giờ python setup.py buildsudo setup.py install kết thúc thành công.

Tiếp theo, bắn lên một vỏ Python, cố gắng 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 

Nhưng:

>> 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 tìm thấy tại /usr/local/lib/python2.7/dist-packages/scikits.audiolab-0.11.0-py2.7-linux-x86_64.egg/scikits/audiolab/pysndfile/_sndfile.so.

Vì vậy, câu hỏi của tôi là,

  1. Wtf đang xảy ra? Tại sao python không tìm thấy _sndfile.so?
  2. Có ai đã sử dụng thành công scikits.audiolab trong năm 2011 trên bản phân phối Linux 2011 không? Bạn đã làm nó như thế nào?
  3. Có thư viện thay thế nào tốt để đọc các tệp WAV HUGE (như, 10 GB/8 giờ) chunk bằng đoạn vào NumPy không?

Trả lời

4

Có người đề nghị tôi kiểm tra ldd _sndfile.so. Đã làm điều đó và nhận được

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) 

Thú vị! Một loạt các thư viện định dạng tệp cũng được tham chiếu, những thư viện mà tôi có thể chưa cài đặt.

Đã làm sudo aptitude install flac vorbis-tools và thì đấy!

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

Tôi có thể bỏ qua cảnh báo về việc thiếu hỗ trợ ALSA hiện tại vì nó có thể được sử dụng để ghi và phát lại cục bộ - và đây vẫn là máy chủ.

Nó đã có dễ dàng hơn nhiều nếu thiếu libFLAC, libvorbislibvorbisenc đã gây ra một sự thất bại build-thời gian trong việc xây dựng các kịch bản của scikits.audiolab ... Xét cho cùng, được thông báo lỗi chính thức đề cập gì về những thư viện.

0

Chỉnh sửa: Tôi chỉ nhận ra đây không phải là trường hợp như pysndfile dường như bị đóng gói ... tôi không nên trả lời thứ điều đầu tiên vào buổi sáng;)

trả lời đến 1: Sndfile là thư viện ac, bạn có thể cần phải cài đặt trình bao bọc python cho nó: http://code.google.com/p/libsndfile-python/

0

Tôi không muốn cảnh báo về các tiêu đề alsa, chỉ cần cài đặt lib.

sudo apt-get install libasound2-dev

đó đã làm việc cho tôi ..

Các vấn đề liên quan