py2exe的跨平台替代品

时间:2012-01-27 15:09:12

标签: python py2exe

py2exe很棒,只要我想打包一个python程序在Windows系统上运行,我就会使用它。

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

3 个答案:

答案 0 :(得分:7)

这里也是支持Linux,MacOS和Windows的PyInstaller - 我还没有用它(所以)所以我不知道你是否可以在windows上为Linux打包,但是可以浏览{{3似乎有可能。

修改 manual明确规定你不能从linux创建一个windows包,也不能从linux创建一个mac os包 - 没有什么可以从其他两个来源创建一个linux包,但它可能不起作用。

<强> EDIT2: 谷歌搜索后,我发现FAQ也可能值得一看。

答案 1 :(得分:5)

我真的怀疑你可以做那样的事。

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

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

答案 2 :(得分:2)

好的,我已经做到了。它有点hacky,但它对我的用例非常有用。

它的要点是使用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)