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

谢谢。

4

4 回答 4

1

通过对源文件进行一些调整,可以在 Windows 上使用 MINGW 安装它。我正在使用节俭 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>,

这包括 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% 的差异)时,我并没有得到太多的速度提升,所以除非在极端情况下,否则这样做可能是不合理的。

于 2014-05-02T08:11:54.287 回答
0

我只成功地用 MSVC 安装了 Thrift。

  • 安装 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],
      )

字节顺序测试将失败,修改 fastbinary.c(大约第 68 行):

#ifdef _MSC_VER
  #define __BYTE_ORDER __LITTLE_ENDIAN
#endif

在那次运行之后python setup.py install,希望你能得到你需要的东西。

于 2010-03-13T12:36:47.697 回答
0

安装 python-dev

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

于 2010-12-30T18:35:06.847 回答
0

我建议您执行以下命令:

pip3 install thriftpy2
于 2021-01-26T16:31:17.987 回答