Как установить библиотеку Python 'gevent' в Mac OS X Lion
Библиотека Python gevent
, версия 0.13.6 (текущая версия на PyPI) не будет pip install
в OS X Lion, Python 2.7 (и, возможно, другие). Он отлично работает на Snow Leopard.
Как я могу установить эту библиотеку?
Бонусные баллы, если это можно сделать, используя pip install
, а не ручной или пользовательский процесс, потому что тогда он будет хорошо играть с автоматическими сборками.
Вот мой вывод pip install
:
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
Ответы
Ответ 1
Не публикуйте все! Это слишком! 90% времени, первая ошибка достаточно...
gevent/libevent.h:9:19: error: event.h: No such file or directory
Это означает, что библиотека, которая предоставляет заголовок event.h
, не установлена. Библиотека называется libevent (сайт).
В общем, ошибки компиляции, подобные этим, являются недостатком в сценариях сборки. В сборке script должно появиться сообщение об ошибке, что libevent не установлен, и это ошибка, из-за которой он не сделал этого.
Чтобы получить libevent из MacPorts, а затем вручную сообщите компилятору с переменной среды CFLAGS
, где можно найти event.h
и libevent
при запуске pip.
sudo port install libevent
CFLAGS="-I /opt/local/include -L /opt/local/lib" pip install gevent
Вы также можете использовать домородок для установки libevent: brew install libevent
(от комментария Дэвида Волевера)
Ответ 2
CFLAGS='-std=c99' pip install gevent
Смотрите в: Не удается установить gevent OSX 10.11
в OS X 10.11, clang использует значение c11 по умолчанию, поэтому просто верните его обратно в c99.
Ответ 3
Через некоторое время я понял, что пути для упомянутой выше переменной CFLAGS работают при установке libevent из порта, но не из brew. Следующие работали для меня (в OSX Mavericks):
$ brew install libevent
$ export CFLAGS="-I /usr/local/Cellar/libevent/2.0.21/include -L /usr/local/Cellar/libevent/2.0.21/lib"
$ pip install gevent
Ответ 4
Так я нашел самый легкий:
установить libevent с помощью homebrew
$ brew install libevent
установить gevent
$ pip install gevent
Это был единственный способ заставить его работать.
Ответ 5
Нашел этот ответ при поиске помощи на Snow Leopard, разместив его на случай, если кто-то другой придет с такой же проблемой.
У меня был libevent, установленный через macports.
export CFLAGS = -I/opt/local/include
export LDFLAGS = -L/opt/local/lib
sudo pip install gevent
Ответ 6
У меня был libevent, установленный через brew, и он тоже не удался, что сработало, было похоже на то, что сделал Стивен, но указав на brew default install:
CFLAGS = -I/usr/local/include LDFLAGS = -L/usr/local/lib pip install gevent
Ответ 7
Если вы устанавливаете все из источников и используете csh, на Mac OS 10.9 работает следующее
-
скачать последнюю версию http://libevent.org/ libevent-2.0.21-stable
- ./Configure
- сделать
- sudo make install
-
virtualenv env
-
источник env/bin/activate.csh
-
setenv CFLAGS "-I/usr/local/include -L/usr/local/lib"
-
pip install gevent
Ответ 8
Я использую virtualenv и virtualenv wrapper, и поэтому я хотел, чтобы это было самодостаточным. Я получил gevent так:
Предполагая, что у вас есть виртуальная установка env, тогда:
workon {my_virtual_env}
Затем загрузите libevent и установите его против virtualenv.
curl -L -O https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
tar -xzf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable
./configure --prefix="$VIRTUAL_ENV"
make && make install
Я предполагаю, что у вас установлен gcc 5+ (я использую brew)
Надеюсь, что это поможет.
Ответ 9
sudo pip install cython git+git://github.com/gevent/gevent.git#egg=gevent