如何从Python 3脚本创建一个独立的可执行文件?

4
我最近做了一个使用Python 3.3中的Tkinter的程序。我想将该程序作为简单可执行文件分发,无需安装。我使用过cx_freeze编译脚本成可执行文件,但遗憾的是它并不产生独立应用程序,而且需要各种DLL和pyd文件在可执行文件的当前工作目录中。我也尝试了其他打包程序,如py2exe和pyinstaller,但它们不支持Python 3.x。那么,有谁知道如何将Python 3.3脚本编译为独立的可执行文件且不需要任何依赖项呢?
谢谢!
更新:我编写了一个Python脚本,将所有的DLL和pyd文件移动到cx_freeze生成的exe文件中。虽然这不是非常“干净”的解决方案,但它确实适用于常规Python脚本。问题出现在我导入像socket或tkinter这样的模块时,可执行文件不知道从哪里寻找它们,所以我会收到错误信息:
ImportError: No module named '_socket'

如果有人知道如何修复这个问题——可能是通过更改可执行文件寻找其依赖项的位置——那就太棒了,再次感谢!

可能是重复的问题:如何将我的Python 3应用程序编译为.exe文件? - Cees Timmerman
1个回答

1
考虑将您的问题定义更改为“如何将DLL打包到Windows可执行文件中?” 如果您可以这样重新构思问题,那么我们就可以应用像这里列出的解决方案: 如何在exe中捆绑依赖项

我也尝试过这种方法,但正如我所提到的,我希望有一个真正独立的可执行文件,不需要将程序解压缩到临时位置。无论如何,谢谢。 - Parker Hoyes
谁在意东西解压到临时位置?这真的很重要吗?如果是,为什么?我一直认为这种解决方案是合适的,但似乎你有其他要求。你的用户真的会注意或关心这些实现细节吗? - John Zwinck
这件事并不是为了让用户注意到这个过程,而是因为其他几个原因。 主要原因是该应用程序相当大,并需要一定时间来解压/重新压缩。 如果我让它每次启动都经历此过程,可能会严重影响其启动时间。 如果我让程序永久解压到临时位置,那么这基本上就相当于需要安装过程,而我希望避免这种情况。 - Parker Hoyes

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