代码之家  ›  专栏  ›  技术社区  ›  physicsmichael

在运行雪豹的Mac上构建portaudio和pyaudio(arch问题)

  •  4
  • physicsmichael  · 技术社区  · 15 年前

    我想告诉你我试过什么,然后我真的很欢迎你对我如何正确地得到portaudio和pyaudio设置提供任何意见!

    我试过安装Portaudio的稳定版本和SVN版本 their website 为我的核心2双MacBook Pro运行雪豹。稳定释放有一个相当大的错误 can be fixed(?) 但是每日的SVN版本安装很好 ./configure && make && make install (这就是我所用的)。测试被正确地编译,我可以得到二进制文件来产生输出/可以读取麦克风输入。

    好吧,那么派迪奥就有麻烦了。从安装 source 我在找不到库时出错:

    mwoods 13 pyaudio-0.2.3$ python setup.py build
    running build
    running build_py
    running build_ext
    building '_portaudio' extension
    gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch ppc -arch x86_64 -pipe -DMACOSX=1 -I/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -c _portaudiomodule.c -o build/temp.macosx-10.6-universal-2.6/_portaudiomodule.o -fno-strict-aliasing
    _portaudiomodule.c:35:25: error: pa_mac_core.h: No such file or directory
    _portaudiomodule.c:679: error: expected specifier-qualifier-list before ‘PaMacCoreStreamInfo’
    _portaudiomodule.c: In function ‘_pyAudio_MacOSX_hostApiSpecificStreamInfo_cleanup’:
    _portaudiomodule.c:690: error: ‘_pyAudio_Mac_HASSI’ has no member named ‘paMacCoreStreamInfo’
    _portaudiomodule.c:691: error: ‘_pyAudio_Mac_HASSI’ has no member named ‘paMacCoreStreamInfo’
    _portaudiomodule.c:692: error: ‘_pyAudio_Mac_HASSI’ has no member named ‘paMacCoreStreamInfo’
    _portaudiomodule.c:695: error: ‘_pyAudio_Mac_HASSI’ has no member named ‘channelMap’
    _portaudiomodule.c:696: error: ‘_pyAudio_Mac_HASSI’ has no member named ‘channelMap’
    _portaudiomodule.c:699: error: ‘_pyAudio_Mac_HASSI’ has no member named ‘flags’
    
    ... another 100 lines of this ...
    
    _portaudiomodule.c:2471: error: ‘paMacCoreMinimizeCPUButPlayNice’ undeclared (first use in this function)
    _portaudiomodule.c:2473: error: ‘paMacCoreMinimizeCPU’ undeclared (first use in this function)
    lipo: can't open input file: /var/folders/Qc/Qcl516fqHAWupTUV9BE9rU+++TI/-Tmp-//cc7BqpBc.out (No such file or directory)
    error: command 'gcc-4.2' failed with exit status 1
    

    我可以从安装pyaudio their .dmg installer 但目标是python2.5。如果我将/library/python/2.5/site-packages/的所有相关内容复制到/library/python/2.6/site-packages/(这包括pyaudio-0.2.3-py2.5.egg-info、\u portaudio.so、pyaudio.py、pyaudio.pyc和pyaudio.pyo),那么我的python2.6可以识别它。

    In [1]: import pyaudio
    Please build and install the PortAudio Python bindings first.
    ------------------------------------------------------------
    Traceback (most recent call last):
      File "<ipython console>", line 1, in <module>
      File "/Library/Python/2.6/site-packages/pyaudio.py", line 103, in <module>
        sys.exit(-1)
    SystemExit: -1
    
    Type %exit or %quit to exit IPython (%Exit or %Quit do so unconditionally).
    
    In [2]: 
    

    所以这是因为 _portaudio 无法导入。如果我试图直接导入:

    In [2]: import _portaudio
    ------------------------------------------------------------
    Traceback (most recent call last):
      File "<ipython console>", line 1, in <module>
    ImportError: /Library/Python/2.6/site-packages/_portaudio.so: no appropriate 64-bit architecture (see "man python" for running in 32-bit mode)
    

    好吧,如果我 export VERSIONER_PYTHON_PREFER_32_BIT=yes 然后再次运行python(我想是i python),我们可以看到它可以工作,但会产生以下后果:

    In [1]: import pyaudio
    
    In [2]: pyaudio
    Out[2]: <module 'pyaudio' from '/Library/Python/2.6/site-packages/pyaudio.pyc'>
    
    In [3]: import pylab
    ------------------------------------------------------------
    Traceback (most recent call last):
      File "<ipython console>", line 1, in <module>
      File "/Library/Python/2.6/site-packages/matplotlib-1.0.svn_r8037-py2.6-macosx-10.6-universal.egg/pylab.py", line 1, in <module>
        from matplotlib.pylab import *
      File "/Library/Python/2.6/site-packages/matplotlib-1.0.svn_r8037-py2.6-macosx-10.6-universal.egg/matplotlib/__init__.py", line 129, in <module>
        from rcsetup import defaultParams, validate_backend, validate_toolbar
      File "/Library/Python/2.6/site-packages/matplotlib-1.0.svn_r8037-py2.6-macosx-10.6-universal.egg/matplotlib/rcsetup.py", line 19, in <module>
        from matplotlib.colors import is_color_like
      File "/Library/Python/2.6/site-packages/matplotlib-1.0.svn_r8037-py2.6-macosx-10.6-universal.egg/matplotlib/colors.py", line 52, in <module>
        import numpy as np
      File "/Library/Python/2.6/site-packages/numpy-1.4.0.dev7542_20091216-py2.6-macosx-10.6-universal.egg/numpy/__init__.py", line 130, in <module>
        import add_newdocs
      File "/Library/Python/2.6/site-packages/numpy-1.4.0.dev7542_20091216-py2.6-macosx-10.6-universal.egg/numpy/add_newdocs.py", line 9, in <module>
        from lib import add_newdoc
      File "/Library/Python/2.6/site-packages/numpy-1.4.0.dev7542_20091216-py2.6-macosx-10.6-universal.egg/numpy/lib/__init__.py", line 4, in <module>
        from type_check import *
      File "/Library/Python/2.6/site-packages/numpy-1.4.0.dev7542_20091216-py2.6-macosx-10.6-universal.egg/numpy/lib/type_check.py", line 8, in <module>
        import numpy.core.numeric as _nx
      File "/Library/Python/2.6/site-packages/numpy-1.4.0.dev7542_20091216-py2.6-macosx-10.6-universal.egg/numpy/core/__init__.py", line 5, in <module>
        import multiarray
    ImportError: dlopen(/Library/Python/2.6/site-packages/numpy-1.4.0.dev7542_20091216-py2.6-macosx-10.6-universal.egg/numpy/core/multiarray.so, 2): no suitable image found.  Did find:
        /Library/Python/2.6/site-packages/numpy-1.4.0.dev7542_20091216-py2.6-macosx-10.6-universal.egg/numpy/core/multiarray.so: mach-o, but wrong architecture
    

    我们可以假设Pylab以前在工作!我花了一段时间来达到这个目的,但是有人能帮助这个安装或从成功的雪豹安装提供建议吗?不好意思写了这么长的帖子,但我只提供部分信息,这是臭名昭著的,我正在努力解决这个问题!

    2 回复  |  直到 12 年前
        1
  •  5
  •   Gabriel Grant    12 年前

    由于pyaudio的作者对我的询问作出了迅速的答复,我现在有了一个安装得很好的副本。他的指示贴在下面给任何有类似问题的人。

    嗨,米迦勒,

    试试这个:

    1)确保目录布局为 像:

    /foo/pyaudio/portaudio-v19//foo/pyaudio/

    2)从源头构建portaudio-v19, 就像你做的那样

    3)cd./foo/pyaudio/4)python setup.py build—静态链接

    (参见顶部的注释 setup.py了解更多信息 --静态链接

    如果一切顺利,内部 /foo/pyaudio/build/lib.macosx-10.6-…/, 你会发现建造的(胖)物体 包括i386、ppc和x86_ 二进制文件。你也可以做“蟒蛇” 如果您愿意,可以安装“setup.py install”。

    最好的,休伯特

        2
  •  1
  •   tom10    14 年前

    我在Mac 10.5.8 Intel Core 2 Duo上,遇到了同样的问题。 您需要的目录布局是

    ./foo/pyaudio/portaudio-v19/
    ./foo/pyaudio
    

    原因是setup.py具有以下功能: portaudio_path=os.environ.get(“portaudio_path”,“./portaudio-v19”)。

    或者,您应该能够设置portaudio_path env变量并使其工作。