我敢肯定这是一个主题,是在大蟒蛇开发人员的头脑中考虑到蟒蛇3是很快出来了.一些问题得到我们走在正确的方向:

  1. 你会有一条巨蟒2和python3版本,要维持同时进行,或者你只是有一个python3版本,一旦它完成了吗?

    • 你已经开始或计划开始快?或者你计划在等待,直到最终版本出来,进入全面展开?
有帮助吗?

解决方案

这里是总体规划对于扭曲。我本来是要去的博客中这一点,但然后我想:博客为什么关于它的时候我可以得到 它吗?

  1. 等到有人关心。

    现在,没有人Python3.我们不会花一大堆的努力,直到至少一个实际用户已经站出来说"我需要Python3.0支持",并有一个好的理由除了一个事实,即3.0看起来光亮。

  2. 等到我们的依赖性必须迁移。

    一个大的系统扭曲有一定数量的依赖。对于初学者来说,我们的包括:

    这些项目有自己的阵列的依赖关系,因此我们将必须等待那些为好。

  3. 等到有人关心不够 要帮助.

    还有好听的5人工作上的扭曲-和我说的"慈善",因为这是计我,我没有承诺在几个月。我们 超过1000打开的门票 现在,这将是很好实际上解决其中一些修复的错误,增加新的功能,并且通常使扭转一个更好的产品在其自己的权利—之前花费时间,让它移植到一个基本的新版本的语言。

    这可能包括 提案国 照顾不足以支付对我们做到这一点,但我希望这将有大量涌入的志愿人员关心的3.0支持,并希望有助于推动社会向前进。

  4. 按照Guido的建议。

    这意味着 我们不会改变我们的API不兼容, 我们将跟随 过渡时期发展的准则 这Guido发表的最后一年。开始具有单元的测试和运行 该2to3转换的工具 在扭曲的代码。

  5. 报告错误,并补丁文件,2to3工具.

    当我们达到我们实际上是在使用它,我预计会有很多问题与正在运行 2to3 在未来。跑过来的扭曲现在需要极长的时间和(上次我检查,这是相当长一段时间前)不能分析一些文件中的扭曲的储存库,所得到的输出不会导入。我认为会有相当数量的成功的故事,从小型项目和一个很大的敲的工具之前,它实际上将为我们工作。

    然而,蟒蛇开发团队已经非常有助于应对我们的错误报告和早期应对这些问题已经令人鼓舞,因此我希望所有这些问题将是固定的时间。

  6. 维持2.x的兼容性为若干年。

    现在,扭曲的支持python2.3至2.5.目前,我们正在2.6支持(这是我们将显然必须完成之前3.0!).我们的计划是我们修订我们的支持版本的蟒蛇的基础上的长期支持的版本 Ubuntu -释放8.04,其中包括Python2.5,将支持,直至2013年。根据Guido的建议,我们将需要下降支持2.5为了支持3.0,但我希望我们可以找到一个解决方(我们是相当创新版本的兼容性攻击).

    因此,我们正计划支持Python2.5至少直到2013年。在两年,Ubuntu将释放的另一个长期的支持版本的Ubuntu:如果他们仍然存在,并停留在日程表,那将是10.04.我个人猜测,这将船舶与蟒蛇2.x,也许python2.8, /usr/bin/python, 因为有一个庞大的蟒蛇软件打包分发和这将需要很长的时间来更新这一切。因此,五年 然后, 在2015年,我们可以开始寻找滴2.x的支持。

    在此期间,我们将继续Guido的建议,有关迁移:运行2to3在我们2.x代码,并修改2.x代码,以保持它的测试通过在这两个版本。

    其结果是,蟒蛇3.x将不会是一个 来源 语言扭曲直到经过我的35岁生日—这将是一个目标运行时(以及一套准则和限制)为我的蟒蛇2.x代码。我希望可以编写程序在蟒蛇2.x接下来的十年左右。

那么,计划是这样的。我希望它结束了寻找可笑的保守在一年或一年;3.x过渡是易如反掌,并且每个人都迅速升级。其他的事情可能发生,也:2.x和3。x分支机构可能趋同,有人可能会写 3to2, 或者另一个运行时(PyPy想到的)可能允许用于运行2.x和3。x代码中相同的进程直接,使我们的转换过程更容易。

暂时的,但是,我们假定,多年来,我们就会有人与大型代码基它们保持(或人书写的新代码,谁想要使用 其他的 图书馆还没有被迁移)的人仍然希望新的特点和错误的修正在扭转。很快我希望我们将还有血缘用户想使用扭曲python3.我想要提供所有的那些人的一个积极的经验,为尽可能长的时间。

其他提示

Django项目使用的图书馆 six 维持一个代码的工作的同时对蟒蛇2 蟒蛇3(博客).

six 通过提供一个兼容性层智能重定向进口和功能以其各自的地点(以及统一其它不相容的变化)。

明显的优点:

  • 不需要为单独的分支机构为蟒蛇2和3蟒蛇
  • 没有转换的工具,例如2to3.

主要想法的2.6是提供一个迁移路径为3.0。所以你可以用 from __future__ import X 慢慢迁移的一个特征的时间,直到你得到所有的人都确定下来,可以移动到3.0.许多3.0功能将流入2.6,所以你可以让语言差距较小的逐步而不是具有迁移的一切。

在工作中,我们计划升级,从2.5至2.6第一次。然后我们开始启用3.0特缓慢的一个模块时间。在某些点的一个整体部分的系统将可能是准备用于3.x.

唯一的问题是图书馆。如果一个图书馆是不迁移的,我们被困与旧的图书馆。但我很确信我们会得到一个替代现在适当的时候对那一部分。

作为一个图书馆作者:

我在等待最终版本中被释放。我相信,像这样的大蟒的社区,这是2.x将继续是占主导地位的版本,为期几周或几个月。这就是足够的时间来释放一个漂亮的抛光3.x释放。

我会保持独立2.x和3。x分支机构。2.x将是向后兼容2.4,因此我不能使用了很多花哨的语法或新的特点在2.6/3.0.相比之下,3个。x分支将使用每一个这些特征,结果在一个更好的经验的用户。测试,将进行修改,以便2to3会的工作,并且我将保持同一测试用于这两个分支机构。

支持

我想制作一个尝试在转换BeautifulSoup图书馆的3倍的一个项目,我的工作但是我可以看看它是如何将是一个痛苦保持两个不同的分支机构的代码。

目前的模式来处理这包括:

  1. 做出改变的2个分支
  2. 运行2to3
  3. 祈祷它不会转换适当地第一次
  4. 运行代码
  5. 运行单位测试来确认一切正常
  6. 复制出来的3倍的分支

这个模型的工作原理,但恕我直言,它吸收。对于每一个变化/释放你必须要通过这些步骤::叹息::.此外,它鼓励开发商从延长3倍支的新功能,只能支持在py3k因为你仍然基本上针对所有代码2倍。

该解决方案...使用一个预处理器

因为我无法找到一个体面的c式的预处理与#定义和#ifdef指令python我写的一个。

这就是所谓 pypreprocessor,可以发现在PYPI

基本上,你所做的是:

  1. 进口pypreprocessor
  2. 检测的哪个版本的蟒蛇的脚本中运行
  3. 设置一个'定义'的预处理器用于版本(ex'python2'或'python3')
  4. 撒'#ifdef python2'和'#ifdef python3'指令代码是特定版本
  5. 运行代码

就是这样。现在,它将在两个工作2和3倍。如果你担心增加能击中的运行一个预处理器还有一个模式,这将带了所有的元数据和输出后处理源文件。

最好的是...你只需要做的2to3转换一次。

这一工作的示例:

#!/usr/bin/env python
# py2and3.py

import sys
from pypreprocessor import pypreprocessor

#exclude
if sys.version[:3].split('.')[0] == '2':
    pypreprocessor.defines.append('python2')
if sys.version[:3].split('.')[0] == '3':
    pypreprocessor.defines.append('python3')

pypreprocessor.parse()
#endexclude
#ifdef python2
print('You are using Python 2x')
#ifdef python3
print('You are using python 3x')
#else
print('Python version not supported')
#endif

这些结果的终端:

 python py2and3.py
 >>>You are using Python 2x 
 python3 py2and3.py
 >>>You are using python 3x

如果你想出来的一个文件,并使清洁版本的特定源的文件没有额外的元数据,添加这两个线的地方之前pypreprocessor.分析()声明:

pypreprocessor.output = outputFileName.py
pypreprocessor.removeMeta = True

然后:

python py2and3.py

将创建一个文件叫outputFileName.py 这是蟒蛇2个特定没有额外的元数据。

python3 py2and3.py

将创建一个文件叫outputFileName.py 这是蟒蛇3倍的具体没有额外的元数据。

文献和更多的实例请参阅检查了 pypreprocessor在GoogleCode.

我真诚地希望这会有所帮助。我喜欢写代码python我希望看到的支持进入的3倍的领域。我讨厌看到的语言没有取得进展。尤其是,由于第3版本解决了大量的精WTFs和做法看起来多一点友好的用户的迁移是从其他语言。

该文件在这一点上是完整的,但并不广泛。我会尽力让wiki了一些更广泛的信息。

更新:

虽然我设计pypreprocessor具体地来解决这个问题,它不起作用,因为语法分析程序做法的检查的所有代码之前,任何代码被执行。

如果python有真正的C预处理指令的支持,它将使开发者编写的两python2x和python3k码在旁边的每一个其他的在相同文件,但由于名声不好的预处理器C(滥用的宏替换变化的关键词语言)我没有看到合法C预处理器支持正在加入蟒蛇的任何时间很快。

现的工具包已经在一个缓慢的进展向Python3的支持。慢主要是因为许多这些图书馆是非常复杂。

对于多数图书馆我用2to3.一些图书馆使没有它,因为它们是简单的还有大部分的码在C-扩展。zc。附加件,这是一个相关的软件包,将运行相同的代码没有2to3为蟒蛇2和3的支持。

我们口的ZTK向Python3,因为许多其他图书馆和框架依赖于它,例如扭曲和金字塔的框架。

我的一些更加复杂2.x代码要住在2.5或2.6.我搬到3.0为所有新的发展,一旦一些第3次缔约方图书馆我经常使用已经更新了3.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top