Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python py2exe的跨平台替代方案_Python_Py2exe - Fatal编程技术网

Python py2exe的跨平台替代方案

Python py2exe的跨平台替代方案,python,py2exe,Python,Py2exe,py2exe很棒,每当我想打包一个python程序在Windows系统上运行时,我都会使用它 我的问题是,有没有一个等效的工具可以用来在Windows上打包程序,但我可以在Linux上运行?这里还有一个支持Linux、MacOS和Windows的工具-我还没有使用过它(现在),所以我不知道你是否可以在Windows上打包Linux版的东西,但是浏览一下它似乎是可能的 编辑: 声明明确指出,您不能从linux创建windows软件包,也不能从linux创建mac os软件包——从其他两个源创建li

py2exe很棒,每当我想打包一个python程序在Windows系统上运行时,我都会使用它

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

这里还有一个支持Linux、MacOS和Windows的工具-我还没有使用过它(现在),所以我不知道你是否可以在Windows上打包Linux版的东西,但是浏览一下它似乎是可能的

编辑: 声明明确指出,您不能从linux创建windows软件包,也不能从linux创建mac os软件包——从其他两个源创建linux软件包没有任何意义,但它可能不起作用

EDIT2:
在谷歌上搜索了一下后,我发现这可能也值得一看。

我真的怀疑你是否能做这样的事情

你所能做的就是为自己配置3个构建虚拟机,一个用于Windows,一个用于MacOS,一个用于Linux,它们拥有运行程序所需的一切


然后使用py2exe/py2app/pyinstaller的组合为每个平台生成一个发行版。您将有3个不同的包,但每个包都将很好地打包,无需在客户端计算机上安装任何其他东西。

好的,我已经完成了。它有点粗糙,但对于我的用例来说效果很好

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

您可以放心地假设python已经安装在大多数linux系统上。是的,但我仍然希望轻松地打包所有相关的源文件,包括任何导入的模块,而无需在目标linux系统上安装任何东西。这是一个有趣的想法,但我还没有成功地使这两个都起作用。谢谢你的建议。