简体   繁体   中英

Pyaudio, portaudio and mac 10.7.5

I'm having trouble installing pyaudio correctly. I have a virtualenv set up for the project. I first tried to install portaudio:

sudo port install portaudio

which returns:

--->  Cleaning portaudio
--->  Scanning binaries for linking errors: 100.0%
--->  No broken files found.

I assume that means it ran fine. Then I tried:

pip install pyaudio

Which returns:

Downloading/unpacking pyaudio
Running setup.py egg_info for package pyaudio

warning: no files found matching '*.c' under directory 'test'
Installing collected packages: pyaudio
Running setup.py install for pyaudio
building '_portaudio' extension
gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -isysroot /Developer/SDKs/MacOSX10.6.sdk -arch i386 -arch x86_64 -g -O2 -DNDEBUG -g -O3 -DMACOSX=1 -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c src/_portaudiomodule.c -o build/temp.macosx-10.6-intel-2.7/src/_portaudiomodule.o -fno-strict-aliasing
src/_portaudiomodule.c:29:23: error: portaudio.h: No such file or directory
src/_portaudiomodule.c:33:25: error: pa_mac_core.h: No such file or directory
...

Is that first warning a problem? I'm a bit surprised it's saying no file or directory for portaudio.h. Do I have to do something special to enable my port audio macport installation?

Appreciate any help!

$ brew install portaudio
$ pip install pyaudio

Some missing libraries and such that portaudio provides. Works for Python 2.7 (not sure about other versions)

How about the following:

$ sudo port install py27-pyaudio
Warning: port definitions are more than two weeks old, consider using selfupdate
--->  Computing dependencies for py27-pyaudio
--->  Fetching archive for py27-pyaudio
--->  Attempting to fetch py27-pyaudio-0.2.7_0.darwin_12.x86_64.tbz2 from http://lil.fr.packages.macports.org/py27-pyaudio
--->  Attempting to fetch py27-pyaudio-0.2.7_0.darwin_12.x86_64.tbz2.rmd160 from http://lil.fr.packages.macports.org/py27-pyaudio
--->  Installing py27-pyaudio @0.2.7_0
--->  Activating py27-pyaudio @0.2.7_0
--->  Cleaning py27-pyaudio
--->  Updating database of binaries: 100.0%
--->  Scanning binaries for linking errors: 100.0%
--->  No broken files found.
$ python -c "import pyaudio"
$

This works for me at least.

Following my comment above, this is similar to this answer, but since OP wasn't clear with it, I'm going to try again. (This is basically just a cut and paste from some notes I made to myself when I was doing this.)

  1. This is a build for 32-bit.
  2. Download pyaudio, and portaudio (I used 0.2.4, v19).
  3. cd portaudio
  4. make clean
  5. CC="gcc -arch i386" ./configure -enable-static
  6. make
  7. sudo make install (maybe not needed if you statically link to it).
  8. move portaudio into the PyAudio directory, that is:
    1. cd .. (out of portaudio)
    2. mv portaudio PyAudio/portaudio-v19 (note need the v19 here)
  9. cd into PyAudio and run:
    1. make sure you're in the virtual environment, ie, source bin/activate
    2. python setup.py build –static-link
    3. python setup.py install

You can install portaudio with $ sudo port install portaudio

and you can install pyaduio with mac installer from http://people.csail.mit.edu/hubert/pyaudio/

this will install portaudio which is required for pyaudio:

sudo port install portaudio

next, look for the appropriate pyaudio macport for your version of python

port search pyaudio

suppose you are using python27, install pyaudio as such:

sudo port install py27-pyaudio

References:

How do I install PyAudio in virtualenv on Mac OS X 10.7

Create a virtual env, activate it:

virtualenv env
env/bin/activate

Download PyAudio ( latest at the time ):

wget -c http://people.csail.mit.edu/hubert/pyaudio/packages/pyaudio-0.2.8.tar.gz
tar zxf pyaudio-0.2.8.tar.gz
cd PyAudio-0.2.8/

Unzip portaudio inside PyAudio folder, rename it to portaudio-v19 and build it:

wget -c http://www.portaudio.com/archives/pa_stable_v19_20140130.tgz
tar zxf pa_stable_v19_20140130.tgz
mv portaudio portaudio-v19
cd portaudio-v19
./configure
make
cd ../

Back to PyAudio directory:

export CFLAGS="-I `pwd`/portaudio-v19/include/ -L `pwd`/portaudio-v19/lib/.libs/"
python setup.py build --static-link
python setup.py install

Thats all!

The crucial point is this command:

export CFLAGS="-I `pwd`/portaudio-v19/include/ -L `pwd`/portaudio-v19/lib/.libs/"

which avoids no such file error.

This solved my problem, thanks very much to @tuxdna.

The problem is that the pyaudio setup script ( setup.py ) assumes that all the necessary headers are in /usr/include . That is why it works with HomeBrew, and not MacPorts, which typically (and cleanly) puts everything under /opt/local .

PyAudio maintainers have relied on HomeBrew, and there is no option combination right now that allows for spelling out where to find the headers. At time of writing, the setup.py source code supports only default values for Mac OS X.

To work with MacPorts, it is cumbersome but enough to create two links for compiling:

port install portaudio
sudo ln -s /opt/local/include/portaudio.h /usr/include
sudo ln -s /opt/local/include/pa_mac_core.h /usr/include
pip install --user pyaudio # Should now compile fine.

The links should probably be removed once the install is over.

Tested on Mac OS X 10.10 with Python 2.7 installed with MacPorts.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM