I compiled my test.thrift file using:
thrift -gen py test.thrift
Then i tried to import the created files:
from test.ttypes import *
When I use Python 2.7 the import works but with Python 3.4 it raises
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/art/SerTest/addressThrift/gen-py/test/ttypes.py", line11, in <module>
from thrift.transport import TTransport
File "/usr/local/lib/python3.4/dist-
packages/thrift/transport/TTransport.py", line 20, in <module>
from cStringIO import StringIO
ImportError: No module named 'cStringIO'
I tried to run:
sudo python3 setup.py install
and got many exceptions, all seems to be related to python 2 vs 3 problems. for example:
File "/usr/local/lib/python3.4/dist-
packages/thrift/transport/TSSLSocket.py", line 99
except socket.error, e:
^
SyntaxError: invalid syntax
I addition there is a warning thats seems important:
/usr/lib/python3.4/distutils/dist.py:260: UserWarning: Unknown distribution option: 'use_2to3'
Googling Thrift Python 3 support seems contradicting.
Those say that there is no support:
Does cql support python 3?
https://issues.apache.org/jira/browse/THRIFT-1857
And here I understand from the subtext that it does:
Thrift python 3.4 TypeError: string argument expected, got 'bytes'
Python 3.4 TypeError: input expected at most 1 arguments, got 3
https://issues.apache.org/jira/browse/THRIFT-2096
So does Thrift support Python 3.X? If so what did I missed?
There is a better solution to this. Instead of waiting the official python 3 support, why not use our python implementation of thrift?
https://github.com/eleme/thriftpy
it fully supports python 3, and pypy, and pypy3.