mingw compile python 2.5 extensions


                                在安装Jinja2时,出现了问题,因为其中包含了c文件,所以先要用c compiler build。我使用的codeblock-with-mingw的版本。
c:\python\jinja2> python setup.py build -c mingw32
出错:
......
    CygwinCCompiler.__init__ (self, verbose, dry_run, force)
  File "C:\PRG\PYTHON25\lib\distutils\cygwinccompiler.py", line 84, in
__init__    get_versions()
  File "C:\PRG\PYTHON25\lib\distutils\cygwinccompiler.py", line 424, in
get_versions
    ld_version = StrictVersion(result.group(1))
  File "C:\PRG\PYTHON25\lib\distutils\version.py", line 40, in __init__
    self.parse(vstring)
  File "C:\PRG\PYTHON25\lib\distutils\version.py", line 107, in parse
    raise ValueError, "invalid version number '%s'" % vstring
ValueError: invalid version number '2.18.50.20080109'
搜索:
看得出来是使用的mingw32版本与构建python用的版本不一致。在
python tracer issue 2234
看到了这个问题和解决的方法,
For instance "ld -v" now returns "GNU ld (GNU Binutils)
2.18.50.20080109", not "GNU ld
version 2
.17.50 20060824". The extra
period between the version number and date causes class StrictVersion to
raise a ValueError. A fix is to alter the regular expressions in cygwinccompiler.get_versions().
大意是,python 2.5构建用的gnu版本号是
2
.17.50 20060824,而当前用的是2.18.50.20080109,而
distutils\cygwinccompiler.py中的使用正则表达式来检查版本号。而要做是修改
cygwinccompiler.get_versions()中的版本号检查re。让它只匹配检查版本号的前1或前3位, 这是一致的。
就可以通过了。
解决:
上面的链接中,提供了一个补丁,.patch文件,在win下打补丁,一般需要下载一个包,地址我没记住,
在网上搜索patch for win应该就能搜索到,用法是cmd下,patch srcfile patchfile。
不过我的没有成功。
如果你安装了totoriseSVN的话,好像也可以使用svn diff/patch。不过我没有试过。
知道只是改re, 就对照着python/to/path/Lib/distutils/
cygwinccompiler.py中
把所有的result = re.search('(\d+\.\d+(\.\d+)*)',out_string)
改为 result = re.search('(\d+\.\d+(\.\d+)?)',out_string)
注意到了吗,只是'(\d+\.\d+(\.\d+)*)',把其中的最右边的'*',改为'?',我理解是只检查2.1所有就可以使用
最新的mingw32了。
>>> python setup.py build -c mingw32
>>> python setup.py install
成功
>>> python setup.py bdist
会在./dist/下面生成一个Jinja2-2.0.win32.zip
>>>python setup.py bdist_egg
会把jinja2打包成Jinja2-2.0-py2.5-win32.egg。在其他地方就可以使用easy_install来安装。