如何“编译”python 程序

如何“编译”Python程序
2008-03-05  13:27
从来没有玩过这个东西。。。。
诶,常被人鄙视。。。。。。
发奋下!!!
找到篇牡蛎兄的文章瞻仰下,恩,8错,找个框表起来。。。呵呵


   
        
            
            作者:牡蛎 ,原始链接:http://blender.bokee.com/523381.html
            
            
如何编译
Python
程序(或者如何由
Python
生成可执行文件)是一个非常常见的问题,总是有人问,列出来,
google
搜索的时候就可以看到了。如果还有人说"找不到相关资料",唯一的解释就是这个人太懒了,根本没有去找。
            
如果转载,请注明作者是牡蛎,出自
http://blender.blogchina.com/523381.html

            

            
    0.
Python
(及其它高级的脚本语言)不存在把指令编译到本地代码的工具,但是总是可以发布可执行文件。
            
 
            
  • py2exe      
    http://py2exe.sf.net
                    只支持windows平台,应该是大家听到最多的一个名字了,用户不少,所以有问题的话在它的
    mail list
    里面很容易找到答案。文档中提到了"无法找到某某code"、使用opengl等模块的问题
                   
     
                   
    • PyPackage     
      http://codereactor.net/projects/pypack/index.html
                      我觉得
      py2exe

      等工具还是罗嗦得像唐僧,需要在配置文件中写上需要的数据文件。作者完全无视这样一个事实:我需要发布可执行文件的时候,程序已经完工了,所有的数据文件
      就在主程序所在目录下,所以多数情况下,根本不用到别的地方搜索。现在终于有人站了出来,PyPackage实际上并不是一个程序打包的工具,而只是简化
      py2exe的操作,甚至可以自动调用
      InnoSetup 5
      制作安装文件——不过这个软件并不智能,会打包很多不需要的文件
                     
       
                     
    • Installer      
      http://www.mcmillan-inc.com/installer_dnld.html
                      可以产生windows、linux平台的可执行文件,现在作者主页连不上去了,但是搜索一下可以在其它地方下载
                      自带一个小程序写配置文件,如果程序较复杂,还是需要手工修改这个配置文件。支持从py15以来的所有
      Python
      版本
                      2005年9月,冰冻牡蛎更新:Giovanni Bajo获得Gordon McMillan's Installer的授权、版权改变为GPL,并在
      http://pyinstaller.hpcf.upr.edu/
      继续开发PYinstaller。2006年9月更新:
      [color="#0000ff"]这里
      可以看到Gordon McMillan's的原始网站的镜像
                     
       
                     

    • Python
      自带的freeze.py(不过windows版本不带这个,你可以自己下载
      Python
      的源程序再找)。这个是我最不推荐的一种方法(为什么?自己看),不过如果你的
      Python
      程序要发布到其它工具不支持的平台上,可以考虑这个方法
                     
       
                     
    • 新出来的Pyco     
      http://www.pythonapocrypha.com/projects/pyco/
                      还没用过
                     
       
                     
    • Squeeze     
      http://starship.python.net/crew/fredrik/ipa/squeeze.htm
                      还没用过,只支持
      Python
      1.4
                     
       
                     
    • cx_Freeze
      http://starship.python.net/crew/atuining/cx_Freeze/
                      winodws、linux平台。简单的程序甚至都不需要写配置文件
                     
       
                     
    • Stand alone Python for Windows
      http://arctrix.com/nas/python/standalone.html
                      如果你不介意源程序太过"暴露"的话,用这个吧
      会 不会觉得Updated: Sun, 09 Apr 2000 18:39:54 -0600
      扎眼?如果你看一看它的VC源代码,就不会这么想了——其实这是普遍适用于win系统的方法,无论是98、2000或者xp。也许也可以用到linux上
      ——我不懂linux,如果真的可以这么做,还请告诉我。
       
                     
    • py2app     
      http://undefined.org/python/
                      支持linux平台的工具可能也支持mac os,或者直接使用这个
      py2app
      。具体就不知道了,只吃过苹果,还没玩过苹果呢
                     
       
                     

    • Movable Python
        
      http://www.voidspace.org.uk/python/movpy/
                      这个其实是使用
      py2exe
      制作的、可以放在U盘上的绿色
      Python
      。有使用
      py2app
      制作苹果版movpy和用
      cx_Freeze
      制作Linux版
      movpy
      的计划。懒到都不愿意学习
      py2exe

      py2app
      或者
      cx_Freeze
      的人可以看看。
                     
       
                     

    • Shed Skin - A Python-to-C++ Compiler
      : 试验项目,windows上,连他的例子我都没有编译成功 :(。
                     
       
                     

    • Psyco
      : 给
      Python
      程序加速的东西,看不出对发布
      Python
      程序的直接好处,并且作者以后将致力于
      PyPy

                     
       
                     

    • PyPy
      : 项目目标是纯
      Python
      实现的
      Python
      、速度比
      CPython
      快,将来可以帮助实现编译
      Python

                     
       
                     

    • pyc

      Python
      compiler in
      Python
      ,一个用纯
      Python
      写的
      Python
      的bytecode编译器,可以优化输出的pyc文件。和
      PyPy
      一样,现在还看不出对发布
      Python
      程序的直接好处。只有py24的bytecode。
      pyc

      pyvm
      这个新的python虚拟机的一部分。
                     
       
                     

    • Jungle
      : 使用GNU工具(as、ld和winres)把
      Python
      程序编译到windows的exe可执行文件。该可执行文件只使用基于python24的的pythonic.dll。猜测它支持的模块仅限于内部模块以及jungle.jgl列出的模块。只有可执行文件下载,而这个可执行文件也是用
      Jungle
      自己编译的。目前版本号都到1.10了,经常看0.xx的版本号,这个数字好大啊,娃哈哈。
                     
       
                     
                  
      另类的方法,对
      Python
      语言特性都还不是100%支持,众多的
      CPython
      模块也不可以使用,还有,我也没有试过:
                  
    • for .NET的
      Python
      编译器(如
      Visual Python

      IronPython
      ),不过我可不喜欢为了一个芝麻大的软件安装.NET framework

    • jython
      ,然后用jbuilder、
      jsmooth
      、NativeJ之类的包裹一下,或者用
      gcj
      编译成本地代码
                     
       
                     
                  
      2006年11月26日,近来有些人问,如何保护python开发的商业软件/闭源软件。
                  
      我的观点是,纯
      Python
      程序,又不想用C语言(其实C语言程序也可以破解,所以最好的方法就是不发布任何程序,嘿嘿),可以试试
      pyobfuscate
      混淆源代码,增加可能被反编译获得的源代码的阅读难度。不过
      pyobfuscate
      也好久没有更新了,娃哈哈。而实际上,没必要考虑别人会获得源代码的问题。 考虑(尤其是在自己的程序还没有写出来的时候)别人会反编译自己的
      Python
      程序,有点杞人忧天。
                  
      在*nix下的话,似乎可以(我不用*nix,并不确定)使用
      Python
      自带的freeze.py,把源程序的字节码转换成C程序,然后使用GCC编译,这样应该看不到字节码了。在windows下,不知道怎么使用freeze.py,总报错——谁知道的话告诉我吧。但是如果想实现跨平台,使用freeze.py的方法似乎不可取。
                  
                  
                  首先我相信,目前没有软件可以很好反编译
      Python
      2.4及之后的版本生成的字节码,所以采用新版本
      Python
      “编译”到可执行文件,是安全的。
                  
                  其次,据我所知,目前最成熟的反编译软件只有
      decompyle
      。而不是象某些人为了夸大问题的重要性,而口吐莲花所说的“现在有很多
      Python
      的反编译软件”。而我不相信有人愿意花钱买这个“唯一的且很多的”反编译软件,理由有二
                  
    • 看看
      decompyle
      页面更新日期,是2004年。我猜测作者把这个软件商业化之后并不成功,并没有太多人需要反编译自己或者他人的
      Python
      程序。导致作者没有足够的收入或者兴趣继续完善了
    • 有人愿意花钱去反编译一个还不存在地软件,或者一个不出名的程序?
                  
                  
                  次成熟的反编译软件是
      decompiler.py
      。但是它比商业软件
      decompyle
      差远了。我没有去做试验,是他自己的主页承认说有很多局限的。