设置python的thrift模块时出错

时间:2010-03-05 15:26:40

标签: python thrift

我正在尝试设置thrift以便与Cassandra合并,所以当我运行

setup.py

it out将此消息放入命令行

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

感谢。

4 个答案:

答案 0 :(得分:1)

通过一些源文件调整,可以在Windows上使用MINGW安装它。我使用thrift 0.9.1和Python 27

我遵循的步骤是:

  1. 如果您使用的是Python 2.7,请按照minGW的常规设置步骤和变通方法进行操作。特别是,您可能需要打开文件C:\ Python27 \ Lib \ distutils \ cygwinccompiler.py,并修改类Mingw32CCompiler以删除对-mno-cygwin选项的所有引用。不推荐使用此选项,如果保留,则会导致编译器停止并显示错误。

  2. 打开fastbinary.c并添加以下include语句

  3.   

    #include <stdbool.h>,

    这包括true / false的定义,否则会导致编译失败。 (我假设他们默认包含在MSVC上?)

    3)修改setup.py文件,告诉链接器链接到ws2_32.lib。这是使用MSVC上的pragma注释完成的,但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%的差异)时,我没有获得太多的速度提升,所以除非在极端情况下,否则这样做的努力可能是不合理的。

答案 1 :(得分:0)

我只是成功安装了Thrift和MSVC。

  • 安装MSVC
  • 获取节俭
  • 应用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之后,希望你得到你需要的东西。

答案 2 :(得分:0)

安装python-dev

你可以运行: sudo apt-get install python-dev

答案 3 :(得分:0)

我建议您执行以下命令:

pip3 install thriftpy2