Pyaudio无法导入_portaudio。

15
尝试运行使用pyaudio的Python应用程序。已安装virtualenv并且安装工作正常。但是在运行时找不到portaudio。但是 _portaudio.so文件存在。有什么建议吗?

尝试运行使用 pyaudio 的 Python 应用程序。已使用 virtualenv 进行安装并成功安装。然而,在运行时无法找到 portaudio。但 _portaudio.so 文件已经存在。有什么建议吗?

(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

当我使用conda安装pyaudio时,会出现错误。但是,当我使用pip直接安装它时,错误就消失了。这似乎是conda源中此软件包的问题。 - Wenjie
7个回答

22

问题不在于找不到库,而是该库缺少所需的函数。(源代码)。我遇到了同样的问题,并认为这个问题源于使用了错误版本的portaudio-dev

你需要做的:

  1. 如果已经安装了python-pyaudio (版本为0.2.8),请使用sudo apt-get purge --remove python-pyaudio卸载它。
  2. 下载最新版本(19)的PortAudio。
  3. 解压并安装PortAudio。
    • ./configure
    • make
    • make install
  4. 获取pyaudio的依赖项
    • portaudio19-dev
    • python-all-dev(对于Python 3,请使用 python3-all-dev
  5. sudo pip install pyaudio

之后,我就能够使用pyaudio了。


谢谢,我尝试了你的建议:sudo apt-get purge --remove python-pyaudio sudo apt-get autoremove pip uninstall pyaudio wget http://www.portaudio.com/archives/pa_stable_v19_20140130.tgz tar -xf pa_stable_v19_20140130.tgz cd portaudio/ ./configure make clean make sudo make install sudo apt-get install portaudio19-dev python-all-dev pip install pyaudio (成功安装pyaudio-0.2.9)现在出现以下错误: 无法导入PyAudio C模块'_portaudio'。 - roady
这个错误还有更多信息吗?例如,你之前的错误也提到了它,但接着说“未定义的符号:Pa_GetStreamReadAvailable”。 - Wehrdo
不行:新的错误 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: libportaudio.so.0: cannot open shared object file: No such file or directory。文件 /home/kidkic/audio/venv/local/lib/python2.7/site-packages/_portaudio.so 存在。 - roady
现在的错误是找不到libportaudio.so.0文件。我现在无法访问我的树莓派,看看我的在哪里,但有几个想法:您是否设置了LD_LIBRARY_PATH以包括/usr/local/lib?并且您是否使用sudo与“pip install pyaudio”一起使用,以便pip可以安装到它想要放置库的任何目录中? - Wehrdo
我在 .bashrc 中设置了 LD_LIBRARY_PATH 和 LD_RUN_PATH。我停用了 virtualenv 并安装了 pip 模块,现在它可以正常工作了。可能是在使用 Python virtualenv 和 portaudio 时出现了一些奇怪的问题,或者是我做错了什么。感谢帮助。 - roady

6
这对我很有帮助。
conda install -c anaconda portaudio

你能详细解释一下你做了什么以及为什么吗? - Jonathan Stellwag
我曾经使用过<conda install pyaudio>。 但由于某些原因,它没有起作用。最终这个方法奏效了。 - Rima
这很有帮助 - 谢谢! - pyano

2

对于Linux用户,在安装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

因此,我想在Wehrdo的上面回答的步骤后面添加以下命令作为第4步。

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

0

0

当我使用conda安装pyaudio时,出现了错误。但是,当我使用'pip install pyaudio'命令进行安装时,错误就消失了。

看起来这个包在conda源中存在问题。


欢迎来到StackOverflow! - ominug

0

这是我在 M1 MacBook Pro 上工作的内容,

conda install -c anaconda portaudio
pip install pyaudio

-2

卸载Pyaudio:Pip uninstall pyaudio 安装Pyaudio(Windows系统):Pipwin install pyaudio


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接