我有一个thrift文件,名为importservice.thrift
执行命令
#thrift --gen py importservice.thrift
生成了一个./gen-py/importservice目录
该目录下有一个ImportService.py文件
文件开头引入了
from thrift.Thrift import TType, TMessageType, TException, TApplicationException import logging from ttypes import * from thrift.Thrift import TProcessor from thrift.transport import TTransport from thrift.protocol import TBinaryProtocol, TProtocol
注意from ttypes import * 这行代码,它试图引入当前目录下的一个ttypes模块中的一个类, 我们假定为MyType1
同样,我还有另外一个thrift代码,他试图用
from ttypes import *
引入另外一个类MyType2,然后使用
但是发现这第二个thrift里面找不到MyType2类,那原因也很显然, 上面这行代码里面从ttypes里面没有找到MyType2这个类,
这是为什么?
一个猜想是,第一个thrift引入的时候已经引入了ttypes, 而这个是属于第一个thrift的ttypes,它里面肯定是没有MyType2的,而第二个thrift在试图引入ttypes的时候发现已经被import了,那自然不会再import一次。
而我的应用在thrift的代码如下:
sys.path.append('./gen-py/importservice') from SenseWordServiceV2 import *
不能用这个方式,应该改成如下方式:
sys.path.append('./gen-py/importservice') from importservice.ImportService import * from importservice.ttypes import * from importservice.constants import *这样,在引入ttypes的时候,可以因为是从父模块里面引入的,而两个thrift的ttypes的父模块不同,所以两个thrift的ttypes就可以区分开了,不会发生名称冲突的问题