2012-01-27 103 views
13

py2exe非常棒,每当我想打包一个python程序在Windows系统上运行时,我都会使用它。py2exe的跨平台替代

我的问题是,是否有一个等同的工具可以用来打包Windows上的程序,但我可以在Linux上运行?

+0

你可以安全地假设python已经安装在大多数linux系统上。 – ThiefMaster 2012-01-27 15:16:32

+2

是的,但我仍然想要轻松打包所有相关的源文件,包括任何导入的模块,而无需在目标linux系统上安装任何东西。 – xorsyst 2012-01-27 15:55:55

回答

1

好的,我已经完成了。这有点冒险,但对我的使用情况非常有用。

它的要点是使用ModuleFinder查找所有导入的模块,过滤掉所有系统模块,编译它们并将其压缩。

不幸的是我的这段代码中充斥着没有任何关系这个问题更多的并发症,所以我不能粘贴工作程序,只是一些片段:

zipfile = ZipFile(os.path.join(dest_dir, zip_name), 'w', ZIP_DEFLATED) 
sys.path.insert(0, '.') 
finder = ModuleFinder() 
finder.run_script(source_name) 

for name, mod in finder.modules.iteritems(): 
    filename = mod.__file__ 
    if filename is None: 
     continue 
    if "python" in filename.lower(): 
     continue 

    subprocess.call('"%s" -OO -m py_compile "%s"' % (python_exe, filename)) 

    zipfile.write(filename, dest_path) 
6

这里也是PyInstaller,它支持Linux,MacOS和Windows - 我还没有使用它(所以我不知道你是否可以在windows上打包linux的东西,但看了一下manual它似乎是可能的。

编辑:FAQ国家明确规定,不能创建从Linux的一个窗口封装,从Linux没有MAC OS包没有 - 没有什么关于从其他两个来源创建Linux包,但它可能不工作。

EDIT2: google搜索了一下,我发现cx_freeze这也可能是值得一看之后。

+0

有趣的想法,但我没有设法得到任何工作。谢谢你的建议。 – xorsyst 2012-01-30 08:38:08

5

我真的怀疑你可以这样做。

你可以做的仅仅是自己配置3个虚拟机,一个用于Windows,另一个用于MacOS,另一个用于Linux,你需要运行你的程序。

然后使用py2exe/py2app/pyinstaller的组合来为每个平台生成一个分配。你将有3个不同的pacakges,但其中每一个都会很好地打包并且不需要在客户端机器上安装任何东西。