2016-04-17 5 views
4

Пытается запустить приложение python, которое использует pyaudio. Использование virtualenv и установок работают. Однако при запуске он не может найти portaudio. Но файл _portaudio.so существует. Какие-либо предложения???pyaudio не удалось импортировать _portaudio

(venv) [email protected]:~/audio $ jasper/jasper.py 
Could not import the PyAudio C module '_portaudio'. 
Traceback (most recent call last): 
    File "jasper/jasper.py", line 31, in <module> 
    from client.mic import Mic 
    File "/home/kidkic/audio/jasper/client/mic.py", line 9, in <module> 
    import pyaudio 
    File "/home/kidkic/audio/venv/local/lib/python2.7/site-packages/pyaudio.py", line 116, in <module> 
    import _portaudio as pa 
ImportError: /home/kidkic/audio/venv/local/lib/python2.7/site-packages/_portaudio.so: undefined symbol: Pa_GetStreamReadAvailable 


# CHECKING THAT THE FILE EXISTS (a binary file) 
(venv) [email protected]:~/audio $ ls venv/local/lib/python2.7/site-packages/_* 
venv/local/lib/python2.7/site-packages/_portaudio.so 

ответ

5

Проблема не в том, что она не может найти библиотеку, но в библиотеке отсутствует функция, которая необходима. (source code). Я столкнулся с той же проблемой и считаю, что проблема связана с неправильной версией portaudio-dev.

Что вам нужно сделать:

  1. Uninstall питон-pyaudio с sudo apt-get purge --remove python-pyaudio, если у вас есть (это версия 0.2.8)
  2. Download последняя версия (19) из Portaudio.
  3. Распакуйте и установите Portaudio
    • ./configure
    • make
    • make install
  4. Получить зависимости для pyaudio
    • portaudio19-DEV
    • питон-все-DEV
  5. sudo pip install pyaudio

После этого я был в состоянии использовать pyaudio.

+0

Спасибо, Пробовал Ваше предложение \t 'Sudo APT-получить продувка --remove питона-pyaudio \t SUDO APT-получить autoremove \t пип деинсталлировать pyaudio \t wget http://www.portaudio.com/archives/pa_stable_v19_20140130.t gz \t tar -xf pa_stable_v19_20140130.tgz \t cd portaudio/ \t./ Настроить \t сделать чистый \t сделать \t Sudo сделать установку \t Sudo APT-получить установку portaudio19-DEV питон-все-DEV \t пункт установить pyaudio \t \t (успешно установлен pyaudio-0.2.9) ' сейчас получение \t 'Не удалось импортировать модуль PyAudio C '_portaudio'. – roady

+0

Есть ли еще эта ошибка? например ваша предыдущая ошибка также сообщила об этом, но далее сказал: «undefined symbol: Pa_GetStreamReadAvailable» – Wehrdo

+0

Nope: новая ошибка 'Не удалось импортировать модуль PyAudio C '_portaudio'. Traceback (самый последний вызов последнего): Файл "яшма/jasper.py", строка 31, в от client.mic импорта Mic Файл "/home/kidkic/audio/jasper/client/mic.py", строка 9, в импорта pyaudio Файл "/home/kidkic/audio/venv/local/lib/python2.7/site-packages/pyaudio.py", строка 116, в импорта _portaudio как па ImportError: libportaudio.so.0: невозможно открыть файл общих объектов: нет такого файла или каталога. Файл '/ home/kidkic/audio/venv/local/lib/python2.7/site-packages/_portaudio.so' существует. – roady

1

Для пользователей Линукс вы можете получить что-то вроде этого, после установки portaudio

Libraries have been installed in: 
    /usr/local/lib 

If you ever happen to want to link against installed libraries 
in a given directory, LIBDIR, you must either use libtool, and 
specify the full pathname of the library, or use the `-LLIBDIR' 
flag during linking and do at least one of the following: 
    - add LIBDIR to the `LD_LIBRARY_PATH' environment variable 
    during execution 
    - add LIBDIR to the `LD_RUN_PATH' environment variable 
    during linking 
    - use the `-Wl,-rpath -Wl,LIBDIR' linker flag 
    - have your system administrator add LIBDIR to `/etc/ld.so.conf' 

See any operating system documentation about shared libraries for 
more information, such as the ld(1) and ld.so(8) manual pages. 
---------------------------------------------------------------------- 


PortAudio was successfully installed. 

On some systems (e.g. Linux) you should run 'ldconfig' now 
to make the shared object available. You may also need to 
modify your LD_LIBRARY_PATH environment variable to include 
the directory /usr/local/lib 

Итак, я хотел бы добавить следующие команды в номер шага 4, следуя шагам в ответе выше по Wehrdo.

  • sudo ldconfig
  • export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
  • echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/custom/path/" >> ~/.bashrc

 Смежные вопросы

  • Нет связанных вопросов^_^