我正在尝试设置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
感谢。
答案 0 :(得分:1)
通过一些源文件调整,可以在Windows上使用MINGW安装它。我使用thrift 0.9.1和Python 27
我遵循的步骤是:
如果您使用的是Python 2.7,请按照minGW的常规设置步骤和变通方法进行操作。特别是,您可能需要打开文件C:\ Python27 \ Lib \ distutils \ cygwinccompiler.py,并修改类Mingw32CCompiler以删除对-mno-cygwin选项的所有引用。不推荐使用此选项,如果保留,则会导致编译器停止并显示错误。
打开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%的差异)时,我没有获得太多的速度提升,所以除非在极端情况下,否则这样做的努力可能是不合理的。
答案 1 :(得分:0)
我只是成功安装了Thrift和MSVC。
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