Сборка PortAudio и PyAudio на Mac под управлением Snow Leopard (проблемы с архитектурой) - PullRequest
4 голосов
/ 23 мая 2010

Я хотел бы рассказать вам, что я пробовал, и тогда я действительно буду рад любым комментариям, которые вы можете предоставить о том, как мне правильно настроить PortAudio и PyAudio!

Я пытался установить стабильную и SVN-версии PortAudio со их веб-сайта для моего Core 2 Duo MacBook Pro, работающего под управлением Snow Leopard. В стабильном выпуске есть ошибка sizeof, которую можно исправить (?) , но ежедневный выпуск SVN отлично устанавливается с ./configure && make && make install (так что я использую это). Тесты скомпилированы правильно, и я могу заставить двоичные файлы производить вывод / может читать вход микрофона.

Хорошо, тогда у PyAudio проблемы. Установка из 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 из их установщика .dmg , но он нацелен на python2.5. Если я скопирую все связанное содержимое /Library/Python/2.5/site-packages/ в /Library/Python/2.6/site-packages/ (включая PyAudio-0.2.3-py2.5.egg-info, _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 (ну, я полагаю, ipython), мы увидим, что он работает, но с последствиями:

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

Мы можем предположить, что Пилаб работал раньше! Я потратил некоторое время, чтобы зайти так далеко, но может ли кто-нибудь помочь с этой установкой или дать совет по успешной установке Snow Leopard? Извините за длинный пост, но я печально известен только частичной информацией и пытаюсь это исправить!

Ответы [ 2 ]

5 голосов
/ 25 мая 2010

Благодаря быстрому ответу автора PyAudio на мои запросы у меня теперь есть хорошо установленная копия. Его указания приведены ниже для тех, у кого есть подобные проблемы.

Привет, Майкл,

Попробуйте это:

1) Убедитесь, что ваш макет каталога как:

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

2) Сборка portaudio-v19 из исходников, как вы сделали

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

(см. Комментарии вверху setup.py для получения дополнительной информации о --static-ссылка)

Если все идет хорошо, внутри ./foo/pyaudio/build/lib.macosx-10.6-.../, вы найдете встроенные (жирные) объекты содержащий i386, ppc и x86_64 двоичные файлы. Вы также можете сделать "питон" setup.py install ", если хотите.

Бест, Юбер

1 голос
/ 21 декабря 2010

Я на 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")

альтернативно, вы должны иметь возможность установить переменную env PORTAUDIO_PATH и заставить ее работать.

...