Jan 172013
 

发布Python程序

Distribute Python script

最近需要把一个Python程序发布给其他学校的Collaborators使用,发现最主要的问题是版本不兼容:我使用的是Python 2.7版本,但其他学校可能使用2.5或者更老的2.4版本。因为我使用了大量新版的特有功能,直接把代码发布给对方是没法让对方使用的。因为老版本的Python不支持2.7版里的函数比如:os.SEEK_SET, all(), str.format() 。解决方法有两个:

1. 使用Freeze之类的工具

在Python source code里有一个Tools文件夹,里面有freeze这个工具。他可以把Python代码编译成C语言中的Python。这种方式可以解决简单的脚本,但复杂的脚本这种方法可能会带来其他的错误。

2. 重写代码

这是最根本的解决方法,把新版本特有的函数重新定义,或者用另一种方法实现。比如all()

# all is a keyword since Python 2.7                                                                                                                                                  
try:
    all
except:
    def all(iterable):
        for element in iterable:
            if not element:
                return False
            return True

有一个工具可以检查当前的Python的向前兼容性:

https://github.com/ghewgill/pyqver

检查checkVCF.py的结果如下所示:

/net/fantasia/home/zhanxw/rvtests/rvMeta/sftp.clean/checkVCF/checkVCF.py
2.5 all
2.4 set, generator expression
2.3 logging, sum, enumerate

就是说我使用了2.5特有的all()函数,如果想在2.4版的Python上运行,需要重新定义all()函数。
类似的,set(), generator expression是2.4版才加入的特性,如果要支持2.3版本,就必须改写这两个地方。