2

我正在工作中开始一个新的 python 项目,主要针对可能在几年内升级到 RHEL6 的 RHEL5 机器。鉴于 Python 2.4 是 RHEL5 上的标准配置,并且系统管理员不会支持超出他们必须的范围,因此在我们的本地存储库中获取 Python 2.6 将需要一些说服力。虽然看起来我可以用 python 2.4 过得很好,但我对从头开始创建一个旨在 100% 与这样一个旧版本兼容的项目持怀疑态度。

我应该争取在 2.6 中完成这个项目还是争取最顺利地遵守 RHEL5?如果我坚持使用 2.4,我应该注意哪些陷阱?

仅供参考:我肯定会使用 sqlite 和 pygtk。

4

5 回答 5

2

哪个 Python 中有什么?

于 2011-10-08T00:37:27.977 回答
2

您最好的选择可能是坚持使用 2.4,并拥有一个 time_machine 模块,其中包含您想要的后来 python 拥有的所有好东西。例如,当属性首次出现时,您必须执行以下操作:

def _get_prop(self):
    return self._prop
def _set_prop(self, value):
    self._prop = value
prop = property(_get_prop, _set_prop)

但在 2.6 中,它们将属性增强为本身也是装饰器,因此您可以编写:

@property
def prop(self):
    return self._prop
@prop.setter
def prop(self, value):
    self._prop = value

这意味着更少的冗余函数挂在你的类的命名空间中。

我碰巧很喜欢这个功能,所以我的 time_machine.py 的代码类似于:

# 2.6+ property for 2.5-
if sys.version_info[:2] < (2, 6):
    # define our own property type
    class property():
        "2.6 properties for 2.5-"
        def __init__(self, fget=None, fset=None, fdel=None, doc=None):  ...
        def __call__(self, func):  ...
        def __get__(self, obj, objtype=None):  ...
        def __set__(self, obj, value):  ...
        def __delete__(self, obj):  ...
        def setter(self, func):  ...
        def deleter(self, func):  ...

真正好的部分是 python 等效项通常用于演示新功能,因此您甚至不必自己编写代码。

于 2011-10-08T07:05:51.460 回答
1

2.5、2.6、2.7中的新功能_ 此外,添加某些功能时的标准库文档。例如,在 2.6 中添加了字符串格式。不过,第三方库支持可能很狡猾。

于 2011-10-08T00:36:16.203 回答
1

我主要担心的是第三方库——大多数库作者将运行 2.7 并考虑 3.X,因此任何只出现在旧版本中的错误都可能获得较低的优先级(或完全忽略 - 如果错误是与 python 本身有关,作者可以很容易地说这不是他们图书馆的错)

于 2011-10-08T02:01:29.993 回答
0

算你自己幸运——上次我做真正的 Python 工作时,我必须以 Python 1.5.2 为目标,因为这是我们所针对的 RHEL 系统上可用的最大公分母。希望现在所有这些系统都已迁移到更新的工具。

它可能会让人觉得过时,但这就是当前的生态系统:要么让你的软件易于在目标客户中部署,要么让自己被忽视。爱好者的部署要容易得多,他们将在各处运行更新的系统,但他们并不经常支付账单。

于 2011-10-08T00:39:34.897 回答