pyaudio 无法导入 _portaudio

Posted

技术标签:

【中文标题】pyaudio 无法导入 _portaudio【英文标题】:pyaudio could not import _portaudio 【发布时间】:2016-08-09 11:22:51 【问题描述】:

尝试运行使用 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 install pyaudio' 使用 pip 安装它时它就消失了。这似乎是这个包的 conda 源中的问题。 【参考方案1】:

问题不在于找不到库,而在于库缺少所需的功能。 (source code)。我遇到了同样的问题,并且认为问题源于使用错误版本的 portaudio-dev 构建。

你需要做什么:

    如果你有 sudo apt-get purge --remove python-pyaudio 卸载 python-pyaudio(这是 0.2.8 版) Download PortAudio 最新版本(19)。 解压并安装 PortAudio ./configure make make install 获取 pyaudio 的依赖项 portaudio19-dev python-all-devpython3-all-dev 代表 Python 3sudo 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 (Successfully installed pyaudio-0.2.9) 现在得到`Could not import the PyAudio C module '_portaudio'。 这个错误还有更多吗?例如你之前的错误也这么说,但接着说“未定义的符号:Pa_GetStreamReadAvailable” 否:新错误Could not import the PyAudio C module '_portaudio'. Traceback (most recent call last): File "jasper/jasper.py", line 31, in &lt;module&gt; from client.mic import Mic File "/home/kidkic/audio/jasper/client/mic.py", line 9, in &lt;module&gt; import pyaudio File "/home/kidkic/audio/venv/local/lib/python2.7/site-packages/pyaudio.py", line 116, in &lt;module&gt; 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 存在。 现在的错误是找不到libportaudio.so.0文件。我现在无法访问我的 pi 来查看我的位置,但有几个想法:您是否将 LD_LIBRARY_PATH 设置为包含 /usr/local/lib?您是否将 sudo 与“pip install pyaudio”一起使用,所以 pip 可以安装到它想要放置库的任何目录中? 我在 .bashrc 中有 LD_LIBRARY_PATH 和 LD_RUN_PATH 。我停用了 virtualenv 并安装了 pip 模块,现在它可以工作了。使用 python virtualenv 和 portaudio 时似乎有些奇怪,或者我只是做错了。谢谢帮助【参考方案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/" &gt;&gt; ~/.bashrc

【讨论】:

【参考方案3】:

这对我有用

conda install -c anaconda portaudio

【讨论】:

你能解释一下你做了什么以及为什么? 我正在使用 。但由于某种原因,它不起作用。这终于奏效了。 这很有帮助 - 坦克!【参考方案4】:

Pip 卸载 pyaudio Pipwin 安装 pyaudio 对于windows机器

【讨论】:

【参考方案5】:

当我用 conda 安装 pyaudio 时,错误就出来了。但是,当我通过 'pip install pyaudio' 使用 pip 安装它时它就消失了

这个包的 conda 源似乎有问题。

【讨论】:

欢迎来到 ***!【参考方案6】:

问题是目前python 2.7、3.4、3.5和3.6主要支持portaudio和pyaudio。在您提出问题时,可能不支持 2.7。如果你想知道哪些版本的 python 是兼容的,你总是必须查看这个网站:https://pypi.org/project/PyAudio/#files。如果你想保持你的 python 版本不变,试试这个非官方的 Windows 站点:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio

【讨论】:

以上是关于pyaudio 无法导入 _portaudio的主要内容,如果未能解决你的问题,请参考以下文章

无法安装pyaudio,gcc错误

AttributeError:找不到 PyAudio;检查安装...无法使用语音识别

Mac M1 无法安装 PyAudio / 尝试了 *** 中建议的所有答案 [重复]

我无法在 Windows 上安装 pyaudio?如何解决“错误:需要 Microsoft Visual C++ 14.0。”?

PyAudio 不起作用并在 ubuntu 上中断声音

使用 Python 和 PyAudio 的语音转文本无法在操作系统上运行