pyaudio could not import _portaudio

2019-02-13 22:53发布

Trying to run python app that uses pyaudio. Using virtualenv and installations are working. However when running it can't find portaudio. But the _portaudio.so file exists. Any suggestions???

(venv) kidkic@pi-mirror1:~/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) kidkic@pi-mirror1:~/audio $ ls venv/local/lib/python2.7/site-packages/_*
venv/local/lib/python2.7/site-packages/_portaudio.so

2条回答
小情绪 Triste *
2楼-- · 2019-02-13 23:26

The issue isn't that it can't find the library, but that the library is missing a function that is needed. (source code). I ran into the same problem, and believe the issue stems from building with the wrong version of portaudio-dev.

What you need to do:

  1. Uninstall python-pyaudio with sudo apt-get purge --remove python-pyaudio if you have it (This is version 0.2.8)
  2. Download the latest version (19) of PortAudio.
  3. Untar and install PortAudio
    • ./configure
    • make
    • make install
  4. Get the dependencies for pyaudio
    • portaudio19-dev
    • python-all-dev (python3-all-dev for Python 3)
  5. sudo pip install pyaudio

After that, I was able to use pyaudio.

查看更多
可以哭但决不认输i
3楼-- · 2019-02-13 23:51

For linux users you may get something like this after you install 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

So, I would like to add the below commands as step number 4, following the steps in above answer by 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
查看更多
登录 后发表回答