你应该选择使用Python 2还是Python 3来进行开发?(五)

在一个共同代码基础上同时支持Python 2和Python 3

Python 2.6+ 和 Python 3.3+的共有子集相当大–Python3.3中恢复Unicode字符的u前缀支持意味着从语义上正确的Python 2.6+代码实现源码支持Python 3.3+而同时保有
大量的Python习惯用法。主要区别是有些东西需要从不同的地方导入,这样是为了处理他们在Python 2和Python 3中不同名的事实。

相应地,six compatibility package 是个关键的使用程序用于在一个单一的代码基础中支持Python 2和Python 3。

future compatibility package仍然处于beta状态并且不像six包支持那么多Python版本(它仅仅向后支持到Python 2.6, 而six包支持Python 2.4),但是允许Python 2兼容代码写成更接近Python 3习惯的风格(比如它包含一个实际的Python 3字节类型的Python 2兼容实现,而不是依赖Python 2.x 8位字符串类型–该类型暴露有些不同的API)。

标志标准库模块的另一个关键事情是看在PyPI上有没有一个更新的向后移植可优先用于2.x标准库版本。下列模块要么是PyPI向后移植,或者原始模块用作Python 2.7或者Python 3.x标准库附加项的来源(或者灵感)。

  • unittest2(Michael Foord,标准库unittest维护者,至少需要2.6版本支持)
  • mock(Michael Foord,标准库unittest.mock维护者)
  • contextlib2(Nick Coghlan,标准库contextlib维护者)
  • configparser(Łukasz Langa,标准库configparser维护者)
  • futures(Alex Grönholm和Brian Quinlan,标准库concurrent.futures维护者)
  • argparse(Steven Bethard,标准库argparse维护者,至少需要2.6版本支持)
  • faulthandler(Victor Stinner,标准库faulthandler维护者)
  • cdecimal(Stefan Krah,标准库decimal维护者)
  • ipaddr(Peter Moody,标准库ipaddress维护者,Google IP地址操作模块灵感来自于标准库ipaddress模块的设计)
  • stats(Steven D’Aprano,标准库statistics维护者)
  • enum34(Ethan Furman,标准库enum维护者)
  • funcsigs(Aaron Iles,函数签名对象的向后移植)
  • shared namespace module for backports(Brandon Craig Rhodes)
  • backport.inspect(Tripp Lilley,附加侦查模块变化的向后移植,基于funcsigs )
  • backports.datetime_timestamp(Jason R. Coombs,datetime.timestamp方法的向后移植,作为一个模块级函数接收日期时间对象)
  • backports.pbkdf2(Christian Heimes,标准库hashlib维护者,hashlib.pbkdf2_hmac的向后移植)
  • backports.ssl_match_hostname(Brandom Craig Rhodes 和 Toshio Kuratomi,ssl.match_hostname的向后移植)
  • backports.lzma(Peter Cock,lzma封装器模块的向后移植)
  • lzmaffi(Tomer Chachamu,替代lama向后移植,使用cffi获得更好的PyPy JIT兼容性)
  • tracemalloc(Victor Stinner,标准库tracemalloc维护者)
  • pathlib(Antoine Pitrou,标准库pathlib维护者)
  • selectors34(Berker Peksag,标准库selectors模块的向后移植)

使用向后移植命名空间模块的优势在于它能清楚指示某个东西是一个标准库特性的跨版本向后移植,而且允许原始模块名称被使用如果合适且不跟原始库名称冲突。

在Python菜谱ActiveState中一些更小的Python 3附加项被用作食谱。

  • functools.lru_cache(Raymond Hettinger)

下面的模块不是向后移植的,而是关键标准库API的跨版本兼容替代品:

  • requests(更高层级HTTP和HTTPS APIs。由于各种各样的技术原因requests不太可能会被添加到标准库,但是一个对等的基于asyncio的API可能成为未来的标准库添加项)
  • regex(一个正则表达式的替代引擎原则批准纳入最终的标准库,但是需要一个PEP来解决合作的详细问题)
  • lxml.etree(ElementTree XML API 的替代实现)

除了上述模块也支持Python 2, Python 3.4添加到标准库的asyncio模块原来是为Python 3.3开发的一个PyPI模块。

  • asyncio(Guido van Rossum,Python之父以及标准库asyncio维护者,要求Python 3.3添加语法“yield from”)

可以帮助选择Python 2或者Python 3的其它资源

原文参考:
https://wiki.python.org/moin/Python2orPython3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值