Python HOWTOS 是一些单一的、特定的主题并试图覆盖python大部分内容,参考linux howto形成的集合,部分内容比python库包含更多的内容。 目前,包括这些topic.

  • 将python2代码移植到python3
  • 移植扩展模块到python3
  • Curses编程
  • Descriptor 使用方法
  • 函数式编程方法
  • Logging使用方法
  • Logging Cookbook
  • 正则表达式使用方法
  • Socket编程方法
  • 排序使用方法
  • Unicode使用方法
  • 如何通过urllib包获取网络资源
  • Argparse教程
  • IP地址模块介绍
  • 参数解析方法
  • CPython中DTrace和SystemTap使用

将python2代码移植到python3

Python3是python的未来,与此同时,Python2仍然在使用,使用这两个主流版本的python开发项目是件好事。本指南将帮助我们如何更好的使用python2&3.如果想查看扩展模块级的信息,可以查看移植扩展模块到python3[].如果想了解python3的出现原因,可以查看Nick Coghlan'sPython 3 Q&A.

简要说明

为了使你的项目兼容python2/3,基本步骤是:

  • 1.只担心支持python2.7
  • 2.确保测试覆盖,(coverage.py;pip install coverage)
  • 3.学习python2&3的不同
  • 4.使用ModernizeFuturize去更新代码(pip install modernize 或 pip install future)
  • 5.使用Pylint确保没有回退到不支持python3(pip install pylint)
  • 6.使用caniusepython3找出哪些依赖影响了python3的使用(pip install caniusepython3)
  • 7.但这些依赖不在影响集成,需要确保可以一直兼容python2&3(tox可以帮助你应付不同版本的测试;pip install tox)

如果放弃对python2的支持,在学习了python2&3的差异之后,可以通过2&3转换代码,并可以忽略其他步骤。

详细信息

同时支持python2&3的关键是今天你就可以开始了。尽管你的依赖现在不支持python3,并不意味着你的代码现在不支持python3.大多为了支持python3,需要清理python2的代码。

另一个关键是更新python2支持python3已有大量的自动化工具。 虽然必须让一些文字数据和二进制数据API去支持Python 3,但底层的转换工作可以由自动化工具去转换。

当更新代码以支持python2&3时,一定要记住这些要点的详细信息。

Drop support for Python 2.6 and older

尽管可以让python2.5支持python3,但只使用python2.7要简单的多。如果不打算放弃python2.5,six可以帮助兼容python2.5和python3(pip install six).但这个专题,几乎不能提供帮助。

如果跳过python2.5和之前版本,一些必要的修改可以让你的代码看起来像纯正的python代码。最坏的情况需要用函数替换一些方法或import的一些内置函数。

如果要尽量支持python2.7,python2.6以后将不再支持和进行bug 修复。

Make sure you specify the proper version support in your setup.py file

在setup.py文件中,需要你在trove classifier指定你支持python版本。如果你的代码不支持python3,你至少应该指定 Programming Language :: Python :: 2 :: only. 例如你同样需要指定哪个主版本,Programming Language :: Python :: 2.7

Have good test coverage

一旦你让你的代码支持python2早期的版本,你会想确保你的test suite足够覆盖你的代码。如果,你没有工具进行测试覆盖,coverage.py是个不错的选择。

Learn the differences between Python 2&3

当你准备好了代码和测试就可以开始支持python3了。 但要完全理解你的代码是如何改变的,你会想学习python2到python3的变化.通常比较好的方法是读python3每个版本的更新What's NewPorting to Python3.还有就是查看python未来项目cheat sheet.

Update your code

当你了解了python3&2不同之后,就可以更新你的代码了。有两个自动移植代码的工具可以选择:Modernize 和 Futurize.两个工具选择的依据是,你想让你的代码接近python3的程度。Futurize会尽力使Python 3语法同步到ython 2,如存在向后移植的bytes在Python 3这样的类型。

选好需要的工具之后,就可以开始更新代码了。你需要确保,更新之后的代码和之前的代码在功能实现是一致的。也就需要保证测试结果更新前后保持一致。尽管工具可以将大部分代码更新到支持python3,但仍然有一些不能更新,需要手动去更改,使代码完全支持python3.下面几种情况需要注意,有时调试时可能会忽略。  

Division

在python3中,5/2 == 2.5而不是2;所有int之间的除法的结果都是float.这个变化实际上在2002年发布的python2.2中增加。一直鼓励用户在任何使用/和//的文件中增加"from __future__ import division" 或-Q标志。 如果你还没有这样做,那么你将需要通过你的代码,做两件事情: * 1.在文件中增加"from __future__ import division" * 2. 使用//进行地板除,/除则得到float

原因是/不能简单翻译成//,如果你的代码定义__truediv__方法而不是__floordiv__则会导致你的代码出错。

Text versus binary data

待补

Prevent compatibility regressions

待补

Check which dependencies block your transition

待补

Update your setup.py file to denote Python3 compatibility

待补

Use continuous integration to stay compatible_idioms

待补

Dropping Python2 support completely

待补

by 李鹏