La bibliothèque Python gevent
, la version 0.13.6 (la version actuelle sur PyPI) ne sera pas pip install
sur OS X Lion, Python 2.7 (et probablement d'autres.) Cela fonctionne très bien sur Snow Leopard.
Comment puis-je installer cette bibliothèque?
Points bonus si cela peut être fait en utilisant pip install
, plutôt qu'un processus manuel ou personnalisé, car il fonctionnera bien avec les versions automatisées.
Voici mon pip install
sortie:
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
Ne postez pas le tout! C'est trop! 90% du temps, la première erreur suffit ...
gevent/libevent.h: 9: 19: erreur: event.h: Aucun fichier ou répertoire de ce type
Cela signifie que la bibliothèque qui fournit le event.h
l'en-tête n'est pas installé. La bibliothèque s'appelle libevent ( website ).
En général, les erreurs de compilation comme celles-ci sont une faille dans les scripts de construction. Le script de construction devrait donner un message d'erreur indiquant que libevent n'est pas installé, et c'est un bogue qu'il ne l'a pas fait.
Pour obtenir libevent de MacPorts, puis indiquer manuellement au compilateur avec la variable d'environnement CFLAGS
où trouver event.h
et libevent
lors de l'exécution de pip.
Sudo port install libevent
CFLAGS="-I /opt/local/include -L /opt/local/lib" pip install gevent
Vous pouvez également utiliser homebrew pour installer libevent: brew install libevent
(d'après le commentaire de David Wolever)
CFLAGS='-std=c99' pip install gevent
Voir dans: Impossible d'installer gevent OSX 10.11
sous OS X 10.11, clang utilise c11 par défaut, il suffit donc de le revenir à c99.
Après un certain temps, j'ai réalisé que les chemins de la variable CFLAGS mentionnés ci-dessus fonctionnent lors de l'installation de libevent à partir du port, mais pas de brew. Les éléments suivants ont fonctionné pour moi (sur 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
C'est ainsi que j'ai trouvé le plus simple:
installer libevent en utilisant homebrew
$ brew install libevent
installer gevent
$ pip install gevent
C'était la seule façon de le faire fonctionner.
J'ai trouvé cette réponse lorsque vous cherchez de l'aide pour l'installation sur Snow Leopard, en la publiant au cas où quelqu'un d'autre viendrait de cette façon avec le même problème.
J'ai fait installer libevent via macports.
export CFLAGS = -I/opt/local/include export LDFLAGS = -L/opt/local/lib Sudo pip install gevent
J'avais installé libevent via brew et cela a échoué aussi, ce qui a fonctionné était similaire à ce que Stephen a fait, mais pointant vers l'installation par défaut de brew:
CFLAGS = -I/usr/local/include LDFLAGS = -L/usr/local/lib pip install gevent
Sudo pip install cython git+git://github.com/gevent/gevent.git#Egg=gevent
J'utilise MacOs High Sierra (10.13.3) D'abord, j'ai fait: installation de brew libevent
J'ai mis à jour ma version pip vers pip-18.0. puis réessayé d'installer avec ce qui suit: -
pip install gevent
ça a marché.
Dans le cas où vous installez tout à partir de sources et utilisez csh, les travaux suivants sur mac os 10.9
télécharger la dernière version stable http://libevent.org/ libevent-2.0.21-stable
virtualenv env
source env/bin/activate.csh
setenv CFLAGS "-I/usr/local/include -L/usr/local/lib"
installer pip gevent
J'utilise virtualenv et virtualenv wrapper, et je voulais donc que cela soit autonome. J'ai commencé à travailler comme ça:
En supposant que vous avez une configuration env virtuelle, alors:
workon {my_virtual_env}
Téléchargez ensuite libevent et installez-le sur 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
Je suppose que vous avez installé gcc 5+ (j'utilise brew)
J'espère que cela t'aides.