假设,我已经开发了一个通用的最终用户的实用写在蟒蛇。在此之前,我只有一个版本,供其适用于蟒蛇迟于2.3版。这足以说,"下载Python如果你需要,然后运行这个脚本"。只是有一个版本中的脚本源的控制(我令)跟踪。

与Python3,这是不再一定是真实的。在可预见的未来,我将需要同时研制两个不同的版本,一个适用于蟒蛇2.x和一个适用于Python3.x.从发展的角度,我可以想到的几个选择:

  1. 保持两个不同的脚本中相同的分支,使得改进两者同时进行。
  2. 维持两个单独的分支机构,以及合并共同的改变来回作为发展收益。
  3. 维持只有一个版本的剧本,再加上检查一个补丁文件,该文件将脚本从一个版本。当有足够的已经作了修改,修补不再适用干净,解决冲突和创建一个新的修补程序。

我目前倾向于备选案文3,作为第一个两将涉及很多易出错的单调乏味.但选择3,似乎混乱和我源控制系统的应该是管理补丁我。

为分包装,有更多的选择可供选择:

  1. 提供了两个不同的下载的软件包,一个适用于蟒蛇2和一个适用于Python3(用户将需要知道下载的正确一个任何版本的蟒蛇他们有)。
  2. 提供一个下载软件包,用两个不同的脚本内(然后用户已经知道运行的正确之一)。
  3. 一个载包有两个版本-具体脚本,和一个小短装载机可以运行中的两蟒蛇的版本中,运行正确的剧本Python版本的安装。

我再次目前倾向于备选案文3在此,虽然我没有试图发展这样一个短装载机。

任何其他想法吗?

有帮助吗?

解决方案

编辑: 我原来的答案是基于国家的2009年,与Python2.6和3.0作为当前版本。现在,Python2.7和3.3,还有其他选择。特别是,它现在是相当可行的,使用一个单一的编码基于蟒蛇2和Python3.

看看 移植蟒蛇2码Python3

原来的回答:

官方建议 说:

为移植的现有Python2.5或2.6 源代码,以Python3.0,最好的 战略如下:

  1. (先决条件)启动与良好测试的复盖范围。

  2. 口向Python2.6.这应该是没有更多的工作比平均口 从蟒蛇2.x向Python2.(x+1).确保所有测试通过。

  3. (仍在使用2.6:)开-3命令线路开关。这使 警告有关的功能将被 删除(或转变)在3.0.运行 测试一次,并修复代码 你得到警告,直到有 没有警告的左边,你的所有测试 仍然通过。

  4. 运行2to3源-来源的翻译了源代码树。(见2to3自动化蟒蛇2到3 代码转换为更多的在这 工具。) 运行的结果 翻译下Python3.0.手动 解决了任何其余问题,固定 问题直到所有测试都通过一次。

建议不要试着写 源代码,运行不变下 Python2.6和3.0;你必须 使用非常扭曲的编码的风格, 例如避免打印的发言, 元类,以及更多。如果你是 维持一个图书馆需要 支持Python2.6和蟒蛇 3.0,最好的办法是修改上述步骤3由编辑的2.6 版本的源代码和运行 该2to3译者再次,而不是 编辑的3.0版本的来源 代码。

理想的是,你最终会有一个版本,即2.6兼容和可以被翻译为3.0使用2to3.在实践中,可能无法实现这一目标。所以,你可能需要一些手册的修改以获得它的工作在3.0.

我会保持这些修改在一个分支,喜欢你的选项2。然而,不是保持最终3.0兼容的版本在这一分,我会考虑的适用手册的修改 之前 该2to3的翻译,并把这个改2.6码进入你的分支。这种方法的优点将是,差异之间的这一分支和2.6干将是相当小,只包括手册的更改,而不改变通过2to3.这一办法,单独的分支机构应该更容易维持和合并,并应能够受益于将来的改进2to3.

或者,采取的"等等看"的做法。继续你的移植只有这么远你可以去与一个单一的2.6版本加2to3翻译,并推迟,其余的手册的修改,直到你真正需要的3.0版本。也许这个时候,你不需要任何人工调整了...

其他提示

对于研究与开发,备选方案3太麻烦。维持两个分支是最简单的方法虽然做到这一点的方法会随之间的Vcs.许多DVC会更快乐的独立repos(与共同的祖先,以帮助合并)和风险投资集中可能会容易的工作有两个分支机构。选择1是可能的,但是你可能会错过一些合并和一位更容易出错,海事组织。

为分发,我愿意使用的选择3,以及如果可能的。所有3个选项都是有效的,反正我已经看到的变化对这些模型从次次。

我不认为我会走这条路。这是痛苦的方式您看它。真的,除非有强烈的商业利益,在保持两个版本的同时,这更是头痛于增益。

我觉得它更有意义,就保持发展中2.x现在,至少在几个月,最多一年。在某个时间点,它将只是时间宣布对一个最终的、稳定的版本2.x和发展的下一步于3.x+

例如,我会不会切换到3。x直到的一些主要框架是这样的:PyQt,matplotlib,顽固,而其他一些人。我真的不介意,如果在某些时候,他们停止2.x支持并刚刚开始开发用于3.x因为我会知道,在一个短短的时间我就可以切换到3。x太。

我会开始通过迁移到2.6,这是非常接近python3.0.你甚至可能要等待2.7,这将甚至更接近python3.0.

然后,一旦你已经迁移到2.6(或2.7),我建议你只需保持只有一个版本的剧本,带的东西像"如果PY3K:...其他:...",在罕见的地方,这将是强制性的。当然这不是一种代码我们开发者想写的,但你不必担心有关管理多个脚本或分支机构或贴或分布,这将是一场噩梦。

无论你选择什么,确保你已经彻底的测试,与100%码的复盖范围。

祝你好运!

无论选择的发展选择,大多数潜在的问题可以缓解与彻底单元的测试,以确保这两个版本的生产匹配的产出。这就是说,备选方案2似乎最自然的对我说:申请改变从一个来源树的另一个来源的树是的一项任务(大多数)的版本控制系统被设计为-为什么不采取优势的工具,他们提到缓解这一点。

发展,很难说没有'了解你的听众'.电Python用户可能会更好,不具有以下两本你的软件,还用于一个更大的用户群就可能应该就工作'。

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