将Python编译为单个.exe文件,为什么这么困难?

4

我对编程完全是新手。最近我用Python和pygame制作了一个简单的贪吃蛇游戏。当然,我可以通过运行.py脚本轻松地玩我的游戏,但为了与不太懂计算机的朋友分享它,我尝试着弄清楚如何将我的代码编译成单个的.exe文件以便于他们使用。

我已经尝试过py2exe和cx_Freeze,两者都给出了一个包含.exe文件和多个其他文件(依赖项)的dist或build目录。这确实有效,因为我能够将整个文件夹压缩并通过.zip方式分发,但这并不是理想的。我希望能够将所有内容打包成一个文件。

因此,我开始搜索“如何将Python编译成一个单独的exe”。然而,与我之前尝试搜索的许多编程问题不同的是,我无法得到一个直接、可靠的答案。到目前为止,我尝试的最新可靠答案给出了以下setup.py脚本:

from distutils.core import setup
import py2exe, sys, os

sys.argv.append('py2exe')

setup(
        options = {'py2exe': {'bundle_files': 1, 'compressed': True}},
        windows = ['snek.py'],
        zipfile = None
        )

# Python 3.4.4, py2exe 0.9.2.2; modules used: pygame, random

尽管如此,它给了我一个整个文件夹而不是单个的.exe文件,这样程序就无法运行。
所以,我来找您——万事通、伟大的stackoverflow,有两个问题。
以防我漏掉了什么:你有什么建议可以实现我的单个.exe文件梦想吗?
另外:为什么这么难?

你试过Nuitka吗? - mbdevpl
Python并不是为了编译成.exe文件而创建的,许多人仍然不需要.exe文件,因此它仍然很复杂。顺便说一下,py2exe(以及类似的工具)会创建一个带有扩展名为.exe的自解压缩.zip文件,而不是真正的.exe文件(就像C/C++编译器所做的那样)。 - furas
1个回答

5
这个问题已经在这里得到了解答: py2exe - generate single executable file 使用PyInstaller并添加—onefile参数,可以创建一个无需其他依赖的单独.exe文件。它通过将所有需要的共享库打包进可执行文件中,并在运行之前进行解压缩来实现这一点,就像您所描述的那样(编辑:py2exe也具有此功能,请参阅minty的回答)。

是的,那些都是我之前尝试过的答案。用户Minty的回答实际上是我的当前“解决方案”,因为它与我的问题相同(我正在使用相同的代码!) - ning

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接