无法安装gevent OSX 10.11

试图在OSX 10.11上使用Homebrew安装gevent最新的公开testing版。 运行安装时,会输出以下错误(对于大量代码抱歉,不确定错误的确切位置)

clang -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I /opt/local/include -L /opt/local/lib -U__llvm__ -DLIBEV_EMBED=1 -DEV_COMMON= -DEV_CLEANUP_ENABLE=0 -DEV_EMBED_ENABLE=0 -DEV_PERIODIC_ENABLE=0 -Ibuild/temp.macosx-10.11-x86_64-2.7/libev -Ilibev -I/usr/local/include -I/usr/local/opt/openssl/include -I/usr/local/opt/sqlite/include -I/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c gevent/gevent.core.c -o build/temp.macosx-10.11-x86_64-2.7/gevent/gevent.core.o clang: warning: argument unused during compilation: '-L/opt/local/lib' In file included from gevent/gevent.core.c:249: In file included from gevent/libev.h:2: libev/ev.c:483:48: warning: '/*' within block comment [-Wcomment] /*#define MIN_INTERVAL 0.00000095367431640625 /* 1/2**20, good till 2200 */ ^ libev/ev.c:1029:42: error: '_Noreturn' keyword must precede function declarator ecb_inline void ecb_unreachable (void) ecb_noreturn; ^~~~~~~~~~~~ _Noreturn libev/ev.c:832:26: note: expanded from macro 'ecb_noreturn' #define ecb_noreturn _Noreturn ^ libev/ev.c:1625:31: warning: 'extern' variable has an initializer [-Wextern-initializer] EV_API_DECL struct ev_loop *ev_default_loop_ptr = 0; /* needs to be initialised to make it a definition despite extern */ ^ libev/ev.c:1796:7: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (ANPENDING, pendings [pri], pendingmax [pri], w_->pending, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ libev/ev.c:1807:3: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (W, rfeeds, rfeedmax, rfeedcnt + 1, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ libev/ev.c:1934:7: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (int, fdchanges, fdchangemax, fdchangecnt, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ In file included from gevent/gevent.core.c:249: In file included from gevent/libev.h:2: In file included from libev/ev.c:2484: libev/ev_kqueue.c:50:3: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (struct kevent, kqueue_changes, kqueue_changemax, kqueue_changecnt, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ In file included from gevent/gevent.core.c:249: In file included from gevent/libev.h:2: In file included from libev/ev.c:2490: libev/ev_poll.c:66:7: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (struct pollfd, polls, pollmax, pollcnt, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ libev/ev.c:3648:34: warning: '&' within '|' [-Wbitwise-op-parentheses] fd_change (EV_A_ fd, w->events & EV__IOFDSET | EV_ANFD_REIFY); ~~~~~~~~~~^~~~~~~~~~~~~ ~ libev/ev.c:3648:34: note: place parentheses around the '&' expression to silence this warning fd_change (EV_A_ fd, w->events & EV__IOFDSET | EV_ANFD_REIFY); ^ ( ) libev/ev.c:3687:3: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (ANHE, timers, timermax, ev_active (w) + 1, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ libev/ev.c:4367:5: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (ev_idle *, idles [ABSPRI (w)], idlemax [ABSPRI (w)], active, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ libev/ev.c:4407:3: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (ev_prepare *, prepares, preparemax, preparecnt, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ libev/ev.c:4445:3: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (ev_check *, checks, checkmax, checkcnt, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ libev/ev.c:4592:3: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (ev_fork *, forks, forkmax, forkcnt, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ libev/ev.c:4675:3: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (ev_async *, asyncs, asyncmax, asynccnt, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ 14 warnings and 1 error generated. error: command 'clang' failed with exit status 1 ---------------------------------------- Failed building wheel for gevent Failed to build gevent Installing collected packages: gevent Running setup.py install for gevent Complete output from command /usr/local/opt/python/bin/python2.7 -c "import setuptools, tokenize;__file__='/private/var/folders/q8/1c24n_wj6kzc6kgl7629pwyh0000gn/T/pip-build-3zCPVx/gevent/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /var/folders/q8/1c24n_wj6kzc6kgl7629pwyh0000gn/T/pip-9VpZCX-record/install-record.txt --single-version-externally-managed --compile: running install running build running build_py running build_ext building 'gevent.core' extension clang -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I /opt/local/include -L /opt/local/lib -U__llvm__ -DLIBEV_EMBED=1 -DEV_COMMON= -DEV_CLEANUP_ENABLE=0 -DEV_EMBED_ENABLE=0 -DEV_PERIODIC_ENABLE=0 -Ibuild/temp.macosx-10.11-x86_64-2.7/libev -Ilibev -I/usr/local/include -I/usr/local/opt/openssl/include -I/usr/local/opt/sqlite/include -I/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c gevent/gevent.core.c -o build/temp.macosx-10.11-x86_64-2.7/gevent/gevent.core.o clang: warning: argument unused during compilation: '-L/opt/local/lib' In file included from gevent/gevent.core.c:249: In file included from gevent/libev.h:2: libev/ev.c:483:48: warning: '/*' within block comment [-Wcomment] /*#define MIN_INTERVAL 0.00000095367431640625 /* 1/2**20, good till 2200 */ ^ libev/ev.c:1029:42: error: '_Noreturn' keyword must precede function declarator ecb_inline void ecb_unreachable (void) ecb_noreturn; ^~~~~~~~~~~~ _Noreturn libev/ev.c:832:26: note: expanded from macro 'ecb_noreturn' #define ecb_noreturn _Noreturn ^ libev/ev.c:1625:31: warning: 'extern' variable has an initializer [-Wextern-initializer] EV_API_DECL struct ev_loop *ev_default_loop_ptr = 0; /* needs to be initialised to make it a definition despite extern */ ^ libev/ev.c:1796:7: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (ANPENDING, pendings [pri], pendingmax [pri], w_->pending, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ libev/ev.c:1807:3: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (W, rfeeds, rfeedmax, rfeedcnt + 1, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ libev/ev.c:1934:7: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (int, fdchanges, fdchangemax, fdchangecnt, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ In file included from gevent/gevent.core.c:249: In file included from gevent/libev.h:2: In file included from libev/ev.c:2484: libev/ev_kqueue.c:50:3: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (struct kevent, kqueue_changes, kqueue_changemax, kqueue_changecnt, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ In file included from gevent/gevent.core.c:249: In file included from gevent/libev.h:2: In file included from libev/ev.c:2490: libev/ev_poll.c:66:7: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (struct pollfd, polls, pollmax, pollcnt, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ libev/ev.c:3648:34: warning: '&' within '|' [-Wbitwise-op-parentheses] fd_change (EV_A_ fd, w->events & EV__IOFDSET | EV_ANFD_REIFY); ~~~~~~~~~~^~~~~~~~~~~~~ ~ libev/ev.c:3648:34: note: place parentheses around the '&' expression to silence this warning fd_change (EV_A_ fd, w->events & EV__IOFDSET | EV_ANFD_REIFY); ^ ( ) libev/ev.c:3687:3: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (ANHE, timers, timermax, ev_active (w) + 1, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ libev/ev.c:4367:5: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (ev_idle *, idles [ABSPRI (w)], idlemax [ABSPRI (w)], active, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ libev/ev.c:4407:3: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (ev_prepare *, prepares, preparemax, preparecnt, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ libev/ev.c:4445:3: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (ev_check *, checks, checkmax, checkcnt, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ libev/ev.c:4592:3: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (ev_fork *, forks, forkmax, forkcnt, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ libev/ev.c:4675:3: warning: unused variable 'ocur_' [-Wunused-variable] array_needsize (ev_async *, asyncs, asyncmax, asynccnt, EMPTY2); ^ libev/ev.c:1758:22: note: expanded from macro 'array_needsize' int ecb_unused ocur_ = (cur); \ ^ 14 warnings and 1 error generated. error: command 'clang' failed with exit status 1 ---------------------------------------- Command "/usr/local/opt/python/bin/python2.7 -c "import setuptools, tokenize;__file__='/private/var/folders/q8/1c24n_wj6kzc6kgl7629pwyh0000gn/T/pip-build-3zCPVx/gevent/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /var/folders/q8/1c24n_wj6kzc6kgl7629pwyh0000gn/T/pip-9VpZCX-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/var/folders/q8/1c24n_wj6kzc6kgl7629pwyh0000gn/T/pip-build-3zCPVx/gevent 

使用CFLAGS='-std=c99' pip install gevent来解决这个问题。

在OS X 10.11上,clang使用c11作为默认值,所以只要把它转回到c99即可。

我在我的OSX 10.10.5上遇到了同样的问题,试图安装具有gevent作为依赖的flask-socketio ,但是:

 sudo CFLAGS='-std=c99' pip install flask-socketio 

给我

 Successfully installed flask-socketio-0.6.0 gevent-1.0.2 gevent-socketio-0.3.6 gevent-websocket-0.9.5 

所以,tonicbupt的答案也适用于此。

我浪费了两天的时间,以及Mac用户的解决scheme。

 pip install gevent==1.1b5 

解决scheme: gevent无法安装在OS X Capitan的python虚拟环境中

在Mac OS X El Capitan上,我不得不做两个早期答案中提到的事情,设置CFLAGSvariables和降级gevent,但是我必须使用1.0版来清除编译器错误。

 CFLAGS='-std=c99' pip install gevent==1.0 

如其PyPI指令所述 ,

pip install --pre gevent

应该安装适用于OS X 10.11的候选版本( 1.1rc4 2016年2月22日,版本为1.1rc4 )。

在这个时候,gevent 1.1.0 final以OS X的二进制轮的forms发布,并且pip将默认安装它。 适用于OS X的gevent 1.0.2的二进制轮也适用于那些无法升级到新版本的用户。 这两个都已经过testing,可以在OS X 10.11上安装,包括Apple发行的Python 2.6和2.7,以及从python.org下载的2.7 Python。 (如果在安装二进制轮子时遇到问题,则可能需要更新您的点的版本。)

所以不需要再设置任何特殊的CFLAGS,除非你必须从源代码编译1.0.2。 (1.1.0不会遇到这个问题。)

请注意,轮子是为Python的“窄”unicode构build而发布的,因此如果使用“wide”构build,则需要从源代码编译。 在这种情况下,gevent 1.0.2(但不是1.1.0)需要设置CFLAGS =“ – std = c99”。