py2exe的跨平台替代品

xor*_*yst 15 python py2exe

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

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

Ber*_*nnF 7

这里也是支持Linux,MacOS和Windows的PyInstaller - 我还没有使用它(但是)所以我不知道你是否可以在windows上为Linux打包,但是看一遍手册似乎是可能的.

编辑:回答问题明确规定,你不能从Linux创建Linux上的窗户包,并没有MAC OS包没有-没有什么关于从其他两个来源创建一个Linux软件包,但它可能无法正常工作.

编辑2: 谷歌搜索后我找到了cx_freeze,这也许值得一看.


Bog*_*dan 5

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

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

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


xor*_*yst 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)
Run Code Online (Sandbox Code Playgroud)