2010-03-05 3 views
1

Я пытаюсь настроить thrift для того, чтобы соединиться с Cassandra, поэтому ошибки, когда я побежалнастройки бережливость модули для питона

setup.py 

это ставит это сообщение в командной строке

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 

Нужна помощь по этой проблеме. У меня уже установлена ​​MigW32

Спасибо.

+0

Похоже на то, что компилятору не хватает некоторых его включений (например, «netinet/in.h») ... общая проблема при попытке скомпилировать надстройки и модули и т. Д. В Windows. Вероятно, вам нужно будет убедиться, что GCC может найти все файлы в «C: \ Python26 \ include», а также любые другие библиотеки, необходимые для Thrift и Cassandra ... – ewall

+0

По-прежнему получая те же ошибки, я следил за описанными здесь способами http://code.google.com/p/rdflib/issues/detail?id=104 Вот как я до сих пор понимаю. Теперь не удалось понять эту проблему. – Switch

ответ

0

Мне удалось установить Thrift с помощью MSVC.

  • Установите MSVC
  • Получить бережливость
  • Применить бережливость-252-питон-MSVC-1.diff патч (Google это)

fastbinary.c будет исправлена, но установка. ру патч не получится, обновление вручную из намеков на setup.py.rej, вот (на первый взгляд) правильная копия:

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], 
    ) 

тест Порядок байтов не получится, изменить п astbinary.c (вокруг линии 68):

#ifdef _MSC_VER 
    #define __BYTE_ORDER __LITTLE_ENDIAN 
#endif 

После этого запуска python setup.py install, надеюсь, вы получите то, что вам нужно.

0

Установите питон-DEV

Вы можете запустить: Sudo APT-получить установку питона-DEV

+0

Я предполагаю, что это было отклонено кем-то, потому что оно напрямую не затрагивает вопрос, но я его голосовал, потому что он исправил мою проблему ... установка через 'pip install pycassa' дает ошибку в вопросе о« строительстве »бережливости .protocol.fastbinary 'extension' и, по-видимому, поэтому не устанавливает быстрое расширение C ... ваш ответ исправил это для меня, спасибо! – Anentropic

1

С немного исходного файла настройки можно установить с помощью MinGW на Windows. Я использую бережливость 0.9.1 и Python 27

шаги я последовал были:

  1. Если вы используете Python 2.7, выполните обычные шаги настройки и обходные пути для MinGW. В частности, вам может потребоваться открыть файл C: \ Python27 \ Lib \ distutils \ cygwinccompiler.py и изменить класс Mingw32CCompiler, чтобы удалить все ссылки на параметр -mno-cygwin. Эта опция устарела и будет вызывать компилятор, чтобы остановить с ошибкой, если он остается в.

  2. Открыть fastbinary.c и добавить следующее заявление включают,

#include <stdbool.h>,

включает определения для true/false, которые в противном случае вызывают сбой компиляции. (Я предполагаю, что они включены по умолчанию в MSVC?)

3) Измените файл setup.py, чтобы сообщить компоновщику ссылку на ws2_32.lib. Это делается с использованием комментария прагмы о MSVC, но gcc не поддерживает эту опцию.Так что ваш ext_modules должен выглядеть следующим образом:

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

4) Построение в обычном режиме с помощью setup.py

На моей установке, я не получил большую часть улучшения скорости при помощи расширения C, а не чистой python (разница в 5%), поэтому попытка сделать это может быть не оправдана, за исключением крайних случаев.