Ошибка при настройке комиссионных модулей для python - PullRequest
1 голос
/ 05 марта 2010

Я пытаюсь настроить 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

Спасибо.

Ответы [ 3 ]

1 голос
/ 02 мая 2014

Немного подправив исходный файл, можно установить его с MINGW в Windows.Я использую Thrift 0.9.1 и Python 27

Шаги, которые я выполнил:

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

  2. Откройте fastbinary.c и добавьте следующий оператор include,

#include <stdbool.h>,

это включает определения истинного / ложного, которые в противном случае приведут к сбою компиляции.(Я предполагаю, что они включены по умолчанию в 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%), поэтому усилия по выполнению этого могут быть неоправданными, за исключением крайних случаев.

0 голосов
/ 30 декабря 2010

Установить python-dev

Вы можете запустить: sudo apt-get install python-dev

0 голосов
/ 13 марта 2010

Мне удалось установить Thrift только с MSVC.

  • Установить MSVC
  • Get Thrift
  • Применение патча thrift-252-python-msvc-1.diff (Google it)

Файл fastbinary.c будет исправлен, но исправление setup.py завершится неудачно, обновите вручную из подсказок на 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 = 'thrift-dev@incubator.apache.org',
      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],
      )

Тест Endianness не пройден, измените fastbinary.c (около строки 68):

#ifdef _MSC_VER
  #define __BYTE_ORDER __LITTLE_ENDIAN
#endif

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

...