【问题标题】:How to create a standalone executable file from Python 3 script?如何从 Python 3 脚本创建独立的可执行文件?
【发布时间】:2013-04-27 02:02:36
【问题描述】:

我最近编写了一个在 Python 3.3 中使用 Tkinter 的程序。我想将该程序作为不需要安装的简单可执行文件分发。我有很多使用 cx_freeze 将脚本编译为可执行文件的经验,但不幸的是它不会生成独立的应用程序,并且它需要各种 DLL 和 pyd 文件位于它生成的可执行文件的当前工作目录中。我还研究了其他打包程序,例如 py2exe 和 pyinstaller,但不幸的是它们不支持 Python 3.x。那么,有人知道我如何将 Python 3.3 脚本编译成没有任何依赖关系的独立可执行文件吗?

谢谢!

更新:我编写了一个 python 脚本来移动 cx_freeze 生成的 exe 文件中的所有 DLL 和 pyd 文件。虽然这不是一个非常“干净”的解决方案,但它确实适用于常规 python 脚本。问题出在我导入socket、tkinter等模块时,可执行文件不知道去哪里找,所以报错:

ImportError: No module named '_socket'

如果有人知道我该如何解决这个问题 - 可能是通过更改可执行文件查找其依赖项的位置 - 那就太好了,再次感谢!

【问题讨论】:

标签: python compiler-construction python-3.x cx-freeze


【解决方案1】:

考虑将您的问题定义更改为“如何将 DLL 烘焙到 Windows 可执行文件中?”如果您可以通过这种方式重新构建问题,那么我们可以应用此处列出的解决方案: how to bundle dependencies in exe

【讨论】:

  • 我也尝试过这种方法,但就像我提到的,我想要一个真正独立的可执行文件,不需要将程序解压缩到临时位置。还是谢谢。
  • 谁在乎东西是否解压到临时位置?避免这些真的很重要吗?如果是这样,为什么?老实说,我认为这种解决方案是合适的,但似乎您还有其他要求。您的用户真的会注意到或关心这些实施细节吗?
  • 这与用户注意到此过程无关,而是出于其他几个原因。主要的一个是应用程序相当大,解压缩/重新压缩需要一段时间。如果我让它每次启动时都经过这个过程,它可能会严重影响它的启动时间。如果我将程序永久解压缩到一个临时位置,那么这基本上相当于需要一个安装过程,而我的目标是避免这种情况。
猜你喜欢
  • 2016-01-15
  • 2016-10-13
  • 1970-01-01
  • 2018-06-19
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
相关资源
最近更新 更多