Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I install the Python library 'gevent' on Mac OS X Lion

Python library gevent, version 0.13.6 (the current version on PyPI) will not pip install on OS X Lion, Python 2.7 (and probably others.) It works fine on Snow Leopard.

How can I get this library installed?

Bonus points if it can be done using pip install, rather than a manual or custom process, because then it will play nicely with automated builds.

Here is my pip install output:

pip install gevent Downloading/unpacking gevent   Running setup.py egg_info for package gevent  Requirement already satisfied (use --upgrade to upgrade): greenlet in ./tl_env/lib/python2.7/site-packages (from gevent) Installing collected packages: gevent   Running setup.py install for gevent     building 'gevent.core' 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 -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c gevent/core.c -o build/temp.macosx-10.6-intel-2.7/gevent/core.o     In file included from gevent/core.c:225:     gevent/libevent.h:9:19: error: event.h: No such file or directory     gevent/libevent.h:38:20: error: evhttp.h: No such file or directory     gevent/libevent.h:39:19: error: evdns.h: No such file or directory     gevent/core.c:361: error: field ‘ev’ has incomplete type     gevent/core.c:741: warning: parameter names (without types) in function declaration     gevent/core.c: In function ‘__pyx_f_6gevent_4core___event_handler’:     gevent/core.c:1619: error: ‘EV_READ’ undeclared (first use in this function)     gevent/core.c:1619: error: (Each undeclared identifier is reported only once     gevent/core.c:15376: warning: assignment makes pointer from integer without a cast    [... about 1000 more lines of compiler errors...]     gevent/core.c:15385: error: dereferencing pointer to incomplete type     gevent/core.c: In function ‘__pyx_pf_6gevent_4core_4http___init__’:     gevent/core.c:15559: warning: assignment makes pointer from integer without a cast     gevent/core.c: At top level:     gevent/core.c:21272: error: expected ‘)’ before ‘val’     lipo: can't figure out the architecture type of: /var/folders/s5/t94kn0p10hdgxzx9_9sprpg40000gq/T//cczk54q7.out     error: command 'gcc-4.2' failed with exit status 1     Complete output from command /Users/jacob/code/toplevel/tl_env/bin/python -c "import setuptools;__file__='/Users/jacob/code/toplevel/tl_env/build/gevent/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /var/folders/s5/t94kn0p10hdgxzx9_9sprpg40000gq/T/pip-s2hPd3-record/install-record.txt --install-headers /Users/jacob/code/toplevel/tl_env/bin/../include/site/python2.7:     running install  running build  running build_py  running build_ext  building 'gevent.core' 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 -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c gevent/core.c -o build/temp.macosx-10.6-intel-2.7/gevent/core.o 
like image 881
Jacob Lyles Avatar asked Oct 03 '11 01:10

Jacob Lyles


People also ask

Where are Python packages installed OSX?

The Apple-provided build of Python is installed in /System/Library/Frameworks/Python. framework and /usr/bin/python , respectively.


1 Answers

Don't post the entire thing! That's too much! 90% of the time, the first error is enough...

 gevent/libevent.h:9:19: error: event.h: No such file or directory 

This means that the library which provides the event.h header is not installed. The library is called libevent (website).

In general, compilation errors like these are a flaw in the build scripts. The build script should give an error message that libevent is not installed, and it is a bug that it did not do so.

To get libevent from MacPorts and then manually tell compiler with CFLAGS environment variable where to find event.h and libevent while running pip.

sudo port install libevent CFLAGS="-I /opt/local/include -L /opt/local/lib" pip install gevent 

You can also use homebrew for installing libevent : brew install libevent
(from David Wolever's comment)

like image 55
Dietrich Epp Avatar answered Oct 14 '22 09:10

Dietrich Epp