Python的freeze.py不能安装在Windows上

时间:2013-04-24 18:33:16

标签: python python-3.x

我一直在寻找应该在Python 3.3 Windows安装中捆绑Python 3的freeze.py实用程序(虽然安装了distributepip)但没有找到了。该实用程序可以直接从Python svn存储库here下载,但我想知道:freeze是否附带标准的Windows Python 3安装?

1 个答案:

答案 0 :(得分:6)

看起来像Python的Windows二进制安装不会附带freeze工具。这显然是一个很好的理由。根据源树中的freeze README

  

在Windows 95或NT下,必须使用-p选项并将其指向Python源代码树的顶部。

如果您阅读整个部分,则可以归结为:在Windows上,freeze仅在您从源代码构建Python时生效,并且生成的树可以用于冻结。因此,没有充分的理由在二进制安装中为您提供freeze


与此同时,我可能应该首先问这个问题,但是......你确定首先需要freeze吗?

冻结实用程序已经过时了(您可能已经从README中猜到了要求VC ++ 5.0,Windows 95或NT 4.0等)。它在Windows上也没有那么好用(从documentation可以看出它是一个实用工具" ...为Unix系统编译可执行文件")。而且它有很多东西可以处理或处理不当。此时应该更多地将其视为示例代码而不是有用的工具。

有许多第三方替代方案:cx_freezepy2exePyInstaller等。如果您search PyPI for "freeze"(以及其他似乎合理的条款) ,你会发现一堆这些替代品。如果你的目标是用你的Python脚本创建一个独立的可执行文件(顺便说一下,freeze在Windows上永远无法做到这一点),试验其中的一些并选择你最喜欢的那个。

如果您的目标不同,那么正确的工具将会有所不同 - 您可能最好使用venv或者只是压缩用户site-packages目录或创建本地PyPI服务器。


在评论中,你说:

  

我实际需要的是将Python代码转换为C代码的工具。显然,这是不可能的。

它不是不可能,它不是freeze(或其继承者/竞争对手)所做的。 Cython编译了几乎严格的Python到C代码的超集,尽管它使用的是Python运行时对象的C代码(除非你用C类型显式静态声明变量和函数)。如果C ++是C的可接受替代品,Shed Skin编译Python 2.6的受限子集(使用本机C ++对象,并使用类型推断,因此您不必静态声明类型)。

问题是为什么要将Python代码编译为C。

如果您正在寻求优化一些慢速代码,Cython非常擅长加速小块瓶颈代码。需要花费一些精力(决定移动到Cython的内容,要放入什么静态类型声明等),但是付出努力的曲线非常可靠。 Shed Skin需要花费很少的精力 - 如果它可以工作,它只是自动加速一切 - 但这也意味着你不能首先编写很多惯用的Python代码。但实际上,在查看其中之前,你应该考虑PyPy,这是一个完整的Python 2.7.3实现(很快就会有3.3),它在JIT编译解释器中经常提供类似的加速,几乎不需要权衡所有。或者,您可能只需要重写慢速代码以利用已经优化的库(numpy而不是映射列表,itertools而不是显式循环lxml而不是{ {1}},...)。

如果您正在寻找可以直接与C代码交互的Python代码,而没有html.parse的所有麻烦(或手动构建Python绑定),Cython再次得分。 Cython代码可以有效地本地调用Python代码和C代码,编译器使它完全像魔术一样工作。

如果您希望获得可以阅读,维护和改进的C代码,那么您就会失败。而这个实际上可能是不可能的。惯用的Python代码与惯用的C代码完全不同,很难想象如何将其转换为另一个。


如果你想知道底层问题是什么:

据我所知,ctypes对事情的布局做了很多假设。它应该足以让任何可以构建C扩展模块和嵌入应用程序的Python安装,但事实并非如此,因为freeze已经涵盖并希望构建以特定方式工作。几乎每个* nix平台上的标准二进制安装最终看起来都像freeze所期望的那样,但Windows上的标准二进制安装看起来完全不同。

使用Windows符号链接(至少如果你有Vista或更高版本以及带有现代版NTFS的驱动器)来解决所有问题并不是不可能的,以freeze期望的方式组织所有事情(I发现了一个博客,其中有人用2.7.1 ...),但实际上,我认为它不值得尝试。这将是很多工作(特别是如果你只是学习这些东西),并且不能保证你不会立即遇到另一个问题。

*这实际上并非如此。在Mac上,Apple预装的Python和python.org上的二进制安装程序实际上都为您提供了组织为Mac框架的文件 - 但是它们提供了一组模拟传统布局的符号链接,这足够好了。在大多数Linux发行版和许多其他平台上,二进制python包根本不包含任何开发文件 - 但是一旦你安装了一个名为python-devel的附加二进制包,那么你就可以了。我得到了正确的布局。无论如何,这对你来说都不重要,因为如果你想了解dpkg依赖项或框架构建,你就不会使用Windows,对吗?