简谈python的向下兼容性问题



前两天在写python代码的时候,发现了一个问题。因为要使用email模块,使用
了其中一项导入语句:from email.mime.text import MIMEText,在python2.5下
面运行的很正常,可是到python2.4下面却运行失败,说是导入库失败。最后找
来找去,发现在低版本下面可以用from email.MIMEText import MIMEText进行
代替。而且,这样做的话也是兼容高版本的。看了一下里面的模块,发现在
python2.5下面:
Python 2.5.2 (r252:60911, Jan  8 2009, 12:17:37)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import email
>>> dir(email)
['Charset', 'Encoders', 'Errors', 'FeedParser', 'Generator', 'Header',
'Iterators', 'LazyImporter', 'MIMEAudio', 'MIMEBase', 'MIMEImage',
'MIMEMessage', 'MIMEMultipart', 'MIMENonMultipart', 'MIMEText',
'Message', 'Parser', 'Utils', '_LOWERNAMES', '_MIMENAMES', '__all__',
'__builtins__', '__doc__', '__file__', '__name__', '__path__',
'__version__', '_name', 'base64MIME', 'email', 'importer',
'message_from_file', 'message_from_string', 'mime', 'quopriMIME',
'sys']
而在python2.4下面:
Python 2.4.4 (#2, Apr  5 2007, 20:11:18)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import email
>>> dir(email)
['__all__', '__builtins__', '__doc__', '__file__', '__name__',
'__path__', '__version__', 'message_from_file', 'message_from_string']
差别还是蛮大的。
最近很让人郁闷的一件事情是,python的上下兼容性做得并不好。许多版本之间
并不相通。python2.4和2.5的小版本之间差别都如此大,更不要说大版本了。前
几天有同事问,现在python3.0为什么不用啊,不是不用,用的话许多东西都要
重新改写,而且许多第三方库现在都是针对python2.4/2.5的,很少有针对3.0的,
第三方库升不上去,别的地方肯定就不好升了。再如django,每一件小版本之间
的升级,也会导致你的代码重写,如0.96到1.0之间,代码不能拿过来就用,还
得改来改去。虽然说现在3.0代码更严谨了,而且不像c和c++那样,背上历史的
包袱,但是,没有向下兼容性,还是容易加大代码维护工作量。哎,说到这里,
真是让人既爱且恨啊。
简谈python的向下兼容性问题