【问题标题】:Is a python script faster when you convert it to a .exe using py2exe? [closed]当您使用 py2exe 将其转换为 .exe 时,python 脚本是否更快? [关闭]
【发布时间】:2012-12-24 13:43:58
【问题描述】:

我真的不擅长编译程序,我只想知道如果我使用 py2exe 将其转换为 .exe,我的 python 2.5 程序是否会更快。如果它最终会变慢,我不想花很多时间尝试编译它。我的程序使用 OpenCV 和 PyAudio,但我认为这是它使用的唯一非纯 python 模块。谢谢!

注意:我认为这个问题不需要代码片段,但如果需要,请在 cmets 中说明。谢谢!

【问题讨论】:

  • 这将在很大程度上取决于您的 Python 程序究竟做了什么,并且只能通过实际并排测试两者来回答。由于这里没有人可以为您做到这一点,所以这个问题不太可能得到回答。
  • 没有“灵丹妙药”。您不能只做一些简单的事情并让代码运行得更快。您必须了解它在做什么,为什么要花很长时间,并想办法解决这个问题。

标签: python windows-xp py2exe python-2.5


【解决方案1】:

不,不是真的。由于它只是一个包装器,它提供了运行代码所需的必要文件。使用 Cython 可以使您的程序运行得更快,因为它能够使用 C 进行编译。

【讨论】:

  • 你能给我一个下载链接来使用 Cython 编译它吗?我一直在寻找类似的东西!
  • 请注意,应用于未修改的 Python 代码的 Cython 只会提供最小的加速,因为它除了删除字节码调度开销外,无能为力。几乎所有生成的 C 代码仍将使用 CPython 运行时、动态类型化、使用运行时类型检查、对盒装堆分配的对象进行操作、具有 GC 开销等——为了获得更高效的代码,你必须使用Cython 特定的语法来摆脱这些(以牺牲活力和可移植性为代价)。
  • 您将需要的大部分 Python 库:lfd.uci.edu/~gohlke/pythonlibs 另外,您应该研究一下 Numba。它类似于 Cython,但也更容易使用。查看此博客“jakevdp.github.com/blog/2012/08/24/numba-vs-cython”了解更多详情。使用 Numba,函数上的单行装饰器可以提供比原生 python 1000 倍的加速(但 Cython 只是稍微快一点)。
【解决方案2】:

如果你想让你的程序更快,你首先必须衡量为什么它很慢。这意味着找出程序将时间花在哪里。为此,请使用可用的profilers 之一。从链接的示例中可以看出,这并不难。

如果您知道程序将大部分时间花在哪里,您可以决定优化是否值得甚至可能。如果您的程序是例如您的网络连接已经饱和,修改程序不会使其更快。

如果您将程序中最慢的代码添加到您的问题中,也许我们可以帮助您改进它。通常可以通过改进您使用的算法来获得巨大的收益。例如,如果您的代码对一长串数据进行相同的计算,通常很容易使其更快,例如multiprocessing.Pool。如果你有一个 N 核 CPU,Pool.map() 可以比普通的map() 快 N 倍。

如果这还不够,很多标准的python代码可以在pypy实现上运行,通常faster比cpython实现。

除了已经提到的 cython,您还可以使用用 C 编写的现有扩展,例如numpy 用于数值计算。当然,另一种选择是用 C 编写一个专门构建的扩展。

您的操作系统也很重要。 It seems xp 上的 python 在文件访问上比例如慢。在 Linux 上。

【讨论】:

  • 好吧,我的程序捕获了许多屏幕图像并将它们保存到文件中。现在,它使用 wx 捕获图像并将它们保存到线程中的文件中。
  • XP 有截屏功能。您可以直接使用它们(使用 ctypes)而不是通过 wx.见:stackoverflow.com/questions/531684/… 如果还是太慢,你可以使用多个进程来做。
【解决方案3】:

我过去 2 个月都在使用 Windows Python,我必须说我不是很开心。 如果你有任何 C 模块(除了标准库),你会遇到很大的问题来让它工作。

速度和Linux差不多,但好像慢了一点。 请注意,py2exe 不是最好的。 我遇到了 py2exe 问题,不得不使用 pyinstaller。 它有一个更好的调试,它在 py2exe 没有的情况下工作

我最大的失望是 exe 大小,我有一个使用 lxml、suds 的简单程序,它有 7-8mb 大...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多