1

我想在各种环境中始终如一地使用 python。其中一种环境是cygwin。我想使用的组件之一是 gevent (http://www.gevent.org/intro.html)。在 cygwin 下,我运行了 python 2.7(在本地构建,此处描述了一行更改,这是构建所需的:http ://www.gossamer-threads.com/lists/python/python/976956 )。

gevent 需要 libevent (http://libevent.org/)。

libevent 似乎在 cygwin 下构建得很好(./configure && make && make install)。

但是,在构建 gevent (pip install gevent) 时,它会失败,因为 libevent 构建了静态库(例如 /usr/local/lib/libevent.a)并且 gevent 构建需要共享库。因此:

gcc -shared -Wl,--enable-auto-image-base build/temp.cygwin-1.7.13-i686-2.7/gevent/core.o -L/usr/local/lib/python2.7/config -levent -lpython2.7 -o build/lib.cygwin-1.7.13-i686-2.7/gevent/core.dll

/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot find -levent

同时,如果我尝试让 gevent 静态链接(CFLAGS='-static' pip install gevent),-levent 仍然失败,以及许多关于取消引用类型双关指针将如何破坏严格别名规则和一些额外的 ld 失败的警告:

gevent/core.c:21835:警告:取消引用类型双关指针将破坏严格别名规则

....
gevent/core.c:21836: warning: dereferencing type-punned pointer will break strict-aliasing rules

gcc -shared -Wl,--enable-auto-image-base -static build/temp.cygwin-1.7.13-i686-2.7/gevent/core.o -L/usr/local/lib/python2.7/config -levent -lpython2.7 -o build/lib.cygwin-1.7.13-i686-2.7/gevent/core.dll

/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot find -levent

/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot find -lpython2.7

... 所以...

我想我需要告诉 libevent 构建 .dll 而不是 .a,但 libevent 的 Makefile 实际上并没有 .a 目标,而且我不清楚要如何更改所使用的抽象来实现这一点。

所以,退一步:如何在cygwin下的python 2.7下安装gevent?

4

1 回答 1

1

您可以从http://code.google.com/p/gevent/downloads/list尝试测试版吗?

它不需要任何外部依赖项。

于 2012-04-09T20:00:36.470 回答