2012-05-06 134 views
29

我知道如何使用cx_freeze将CPython文件编译为exe,但是可以使用PyPy编译一个简单的程序到exe吗?将PyPy编译为Exe

+1

http://stackoverflow.com/questions/4251964/can-pypy-be-used-to-produce-a-small-standalone-executable –

+1

可能的重复它不是一个重复的becouse链接你提供的解决方案没有和已经过时了2010年,现在我们已经有了2012年。可能自那时起有所改变。 – Nuncjo

+7

@RolandSmith该问题具体询问* py2exe等不同于* py2exe等的东西,因为它不包含Python解释器,并接受了“停止编写Python并开始使用这种完全不同的语言,这恰好是Python的一个子集”作为答案。这个问题只是要求一个类似于PyPy和完整Python的冻结工具。 – delnan

回答

-2

这是一个py2exe的解决方案,可能会为你工作:compile.py

#!/usr/bin/env python 
# Corey Goldberg 

from distutils.core import setup 
import py2exe 
import sys 

if len(sys.argv) == 2: 
    entry_point = sys.argv[1] 
    sys.argv.pop() 
    sys.argv.append('py2exe') 
    sys.argv.append('-q') 
else: 
    print 'usage: compile.py <python_script>\n' 
    raw_input('press ENTER to exit...') 
    sys.exit(1) 

opts = { 
    'py2exe': { 
     'compressed': 1, 
     'optimize': 2, 
     'bundle_files': 1 
    } 
} 

setup(console=[entry_point], options=opts, zipfile=None) 
+4

-1 py2exe不*使用PyPy(至少目前不是) - 请先做一些研究。为什么你链接到一些不明确的项目的安装脚本,而不是py2exe项目? – delnan

+1

@delnan:由于py2exe不会生成单个文件作为输出,除非您通过secumind链接的选项告诉它。 –

+1

@CeesTimmerman当然,这个选项以及其他可能对OP有用的选项在某处都有记录。 – delnan

7

有关于如何做创建使用PyPy解释程序的EXE,就没有现成的方式或教程我知道。恐怕事情发展并不是微不足道的。

原则上,有两种方法可以考虑使用PyPy的翻译来获取EXE文件,可以使用PyPy解释器或编写自己的RPython程序(PyPy解释器本身是一个RPython程序,即使用受限子集蟒蛇)。

如果你的程序使用了RPython的一个受限制的子集并且没有依赖关系,你可以使用pypy/translator/goal中的翻译脚本来查看,你也会发现很多目标* .py文件。拿一个和修改它为你的目的。您可能首先想从这里开始翻译蟒蛇功能发挥:

http://doc.pypy.org/en/latest/getting-started-dev.html#trying-out-the-translator

如果你的程序是一个应用程序,并依赖于外部包,你应该首先尝试以确保你的程序上pypy在所有工作 - 并非所有外部库都受支持。然后,您可能会考虑修改targetpypystandalone脚本来加载应用程序模块。如果有疑问,请尝试在irp.freenode.net上的pypy-dev邮件列表或#pypy频道上获得帮助。

+0

RPython的一个缺点是它没有记录,如果你的代码没有遵循它,那么翻译器将会失败并带有完全不可理解的错误信息。 (例如,试图使用命名元组给出错误FrozenDesc对象没有属性allenforced_attrs。) – Antimony