开发者

Building PortAudio and PyAudio on Mac running Snow Leopard (arch issues)

开发者 https://www.devze.com 2022-12-31 03:32 出处:网络
I\'d like to tell you what I\'ve tried and then I\'d really welcome any comments you can provide on how I can get PortAudio and PyAudio setup correctly!

I'd like to tell you what I've tried and then I'd really welcome any comments you can provide on how I can get PortAudio and PyAudio setup correctly!

I've tried installing the stable and svn releases of PortAudio from their website for my Core 2 Duo MacBook Pro running Snow Leopard. The stable release has a sizeof error that can be fixed(?), but the daily svn release installs fine with ./configure && make && make install (so this is what I'm using). The tests are compiled properly and I can get the binaries to produce output/can read microphone input.

Ok, so then PyAudio has troubles. Installing from source I get errors about not finding the libraries:

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

I can install PyAudio from th开发者_运维技巧eir .dmg installer, but it targets python2.5. If I copy all of the related contents of /Library/Python/2.5/site-packages/ to /Library/Python/2.6/site-packages/ (this includes PyAudio-0.2.3-py2.5.egg-info, _portaudio.so, pyaudio.py, pyaudio.pyc, and pyaudio.pyo) then my python2.6 can recognize it.

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]: 

So this happens because _portaudio can't be imported. If I try to import that directly:

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)

Ok, so if I export VERSIONER_PYTHON_PREFER_32_BIT=yes and then run python again (well, ipython I suppose), we can see it works but with consequences:

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

We can assume pylab was working before! I spent a while getting this far, but can someone help with this install or lend advice from a successful Snow Leopard install? Sorry for the long post, but I'm notorious for only giving partial information and I'm trying to fix that!


Thanks to PyAudio's author's speedy response to my inquiries, I now have a nicely installed copy. His directions are posted below for anyone who has similar issues.

Hi Michael,

Try this:

1) Make sure your directory layout is like:

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

2) Build portaudio-v19 from sources, as you have done

3) cd ./foo/pyaudio/ 4) python setup.py build --static-link

(See the comments at the top of setup.py for more info on --static-link)

If all goes well, inside ./foo/pyaudio/build/lib.macosx-10.6-.../, you'll find the built (fat) objects comprising i386, ppc, and x86_64 binaries. You can also do a "python setup.py install" if you like.

Best, Hubert


I'm on Mac 10.5.8 Intel Core 2 duo and hitting the same issue. The directory layout you need is

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

The reason is setup.py has the following: portaudio_path = os.environ.get("PORTAUDIO_PATH", "./portaudio-v19")

alternatively, you should be able to set PORTAUDIO_PATH env variable and get it to work.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号