2010-03-05 4 views
1

Je suis en train de mettre en place thrift afin d'intégrer avec Cassandra, quand je courais lesErreur mise en place de modules de friperies pour python

setup.py 

it out met ce message en ligne de commande

running build 
running build_py 
running build_ext 
building 'thrift.protocol.fastbinary' extension 
C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall -IC:\Python26\include -IC:\Pytho 
n26\PC -c src/protocol/fastbinary.c -o build\temp.win32-2.6\Release\src\protocol 
\fastbinary.o 
src/protocol/fastbinary.c:24:24: netinet/in.h: No such file or directory 
src/protocol/fastbinary.c:85:4: #error "Cannot determine endianness" 
src/protocol/fastbinary.c: In function `writeI16': 
src/protocol/fastbinary.c:295: warning: implicit declaration of function `htons' 

src/protocol/fastbinary.c: In function `writeI32': 
src/protocol/fastbinary.c:300: warning: implicit declaration of function `htonl' 

src/protocol/fastbinary.c: In function `readI16': 
src/protocol/fastbinary.c:688: warning: implicit declaration of function `ntohs' 

src/protocol/fastbinary.c: In function `readI32': 
src/protocol/fastbinary.c:696: warning: implicit declaration of function `ntohl' 

error: command 'gcc' failed with exit status 1 

Besoin d'aide sur cette question.J'ai déjà installé le MigW32

Merci.

+0

Il me semble que le compilateur manque certains des éléments dont il a besoin (par exemple "netinet/in.h") ... un problème courant lors de la tentative de compilation de compléments et de modules et autres dans Windows. Vous aurez probablement besoin de vous assurer que GCC peut trouver tous les fichiers dans "C: \ Python26 \ include" ainsi que toutes les autres bibliothèques nécessaires pour Thrift et Cassandra ... – ewall

+0

Toujours les mêmes erreurs, j'ai suivi les méthodes décrites ici http://code.google.com/p/rdflib/issues/detail?id=104 Voilà comment j'arrive à ce jour. Maintenant, je n'arrive pas à comprendre ce problème. – Switch

Répondre

0

J'ai seulement réussi à installer Thrift avec MSVC.

  • Installer MSVC
  • Get Thrift
  • Appliquer le timbre Thrift-252-python-msvc-1.diff (google)

Le fastbinary.c sera patché, mais la configuration. patch py échouera, mettez à jour manuellement à partir des notes à setup.py.rej, voici un (apparemment) correcte copie: Test

from distutils.core import setup, Extension 
import sys 

libraries = [] 

if sys.platform == 'win32': 
    libraries.append('ws2_32') 

fastbinarymod = Extension('thrift.protocol.fastbinary', 
          sources = ['src/protocol/fastbinary.c'], 
          libraries = libraries, 
     ) 

setup(name = 'Thrift', 
     version = '0.1', 
     description = 'Thrift Python Libraries', 
     author = 'Thrift Developers', 
     author_email = '[email protected]', 
     url = 'http://incubator.apache.org/thrift/', 
     license = 'Apache License 2.0', 
     packages = [ 
     'thrift', 
     'thrift.protocol', 
     'thrift.transport', 
     'thrift.server', 
     ], 
     package_dir = {'thrift' : 'src'}, 
     ext_modules = [fastbinarymod], 
    ) 

de Endianness échouera, modifier f astbinary.c (autour de la ligne 68):

#ifdef _MSC_VER 
    #define __BYTE_ORDER __LITTLE_ENDIAN 
#endif 

Après cette course python setup.py install, je l'espère, vous obtiendrez ce dont vous avez besoin.

0

Installer python-dev

Vous pouvez exécuter: sudo apt-get install python-dev

+0

Je suppose que cela a été voté par quelqu'un parce qu'il ne répond pas directement à la question, mais je suis en train de voter parce qu'il a corrigé mon problème ... l'installation via pip install pycassa donne une erreur sur la construction d'économies .protocol.fastbinary 'extension' et n'installe donc vraisemblablement pas l'extension C rapide ... votre réponse a corrigé cela pour moi, merci! – Anentropic

1

Avec un peu de fichier source peaufinage il est possible de l'installer avec MINGW sous Windows. J'utilise 0.9.1 et Python friperie 27

Les étapes que je suivais étaient:

  1. Si vous utilisez Python 2.7, suivez les étapes de configuration normales et des solutions de contournement pour MinGW. En particulier, vous devrez peut-être ouvrir le fichier C: \ Python27 \ Lib \ distutils \ cygwinccompiler.py et modifier la classe Mingw32CCompiler pour supprimer toutes les références à l'option -mno-cygwin. Cette option est dépréciée et provoquera le compilateur d'arrêter avec une erreur si elle est laissée dans.

  2. fastbinary.c Ouvrir et ajoutez l'instruction suivante comprennent,

#include <stdbool.h>,

Ceci inclut les définitions de vrai/faux qui provoqueraient l'échec de la compilation. (Je suppose qu'ils sont inclus par défaut sur MSVC?)

3) Modifiez le fichier setup.py pour indiquer à l'éditeur de liens de lier à ws2_32.lib. Ceci est fait en utilisant un commentaire pragma sur MSVC, mais gcc ne supporte pas cette option.Donc, votre ext_modules devrait ressembler à:

ext_modules = [ 
       Extension('thrift.protocol.fastbinary', 
         sources = ['src/protocol/fastbinary.c'], 
         libraries=['ws2_32'], 
        include_dirs = include_dirs, 
       ) 
      ], 

4) Construire normalement en utilisant la setup.py

Sur ma configuration, je n'ai pas beaucoup d'une amélioration de la vitesse lors de l'utilisation de l'extension C plutôt que pur python (environ 5% de différence), donc l'effort pour ce faire pourrait ne pas être justifié sauf dans des cas extrêmes.