python - Python的freeze.py未安装在Windows上

标签 python python-3.x

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

最佳答案

看起来Python的Windows二进制安装没有提供freeze工具。显然有一个很好的理由。根据源树中的freeze README


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


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



同时,我可能应该首先问这个问题,但是……您确定首先要freeze吗?

冻结实用程序已经过时了(您可能已经从自述文件中猜测到有关要求VC ++ 5.0,Windows 95或NT 4.0等的信息)。它在Windows上也从未如此有效(如您从documentation所描述的那样,将其描述为实用程序“…为Unix系统编译可执行文件”)。而且它有很多无法处理或处理不善的地方。在这一点上,应该将其更多地视为示例代码,而不是有用的工具。

那里有许多第三方替代品:cx_freezepy2exePyInstaller等。如果您选择search PyPI for "freeze"(以及其他合理的术语),则会找到许多此类替代品。如果您的目标是用Python脚本创建一个独立的可执行文件(btw,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,它是在JIT编译解释器中的Python 2.7.3的完整实现(并希望不久后实现3.3),它通常提供类似的加速,几乎没有任何取舍。或者,您也可能只需要重写慢速代码即可利用已优化的库(numpy而不是在列表上映射,itertools而不是显式循环,lxml而不是html.parse,...)。

如果您希望编写可以直接与C代码进行交互的Python代码,而又不会遇到ctypes的所有麻烦(或手动构建Python绑定),Cython会再次得分。 Cython代码可以有效地本地调用Python代码和C代码,并且编译器使它们都像魔术一样工作。

如果您希望获得可以阅读,维护和改进的C代码,那么您就不走运了。实际上,这可能是不可能的。惯用的Python代码与惯用的C代码是如此不同,以至于很难想象如何将一个代码转换为另一个代码。



如果您想知道潜在的问题是什么:

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

使用Windows符号链接(至少如果您具有Vista或更高版本以及具有现代版本的NTFS的驱动器)进行黑客入侵并非不可能,以使所有内容都按freeze的方式组织(我找到了一个博客,其中有人使用2.7做到了这一点) .1…),但实际上,我认为不值得尝试。这将需要很多工作(特别是如果您只是在学习这些东西),并且不能保证您不会立即遇到另一个问题。

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

关于python - Python的freeze.py未安装在Windows上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16199613/

相关文章:

python - 你如何将一个列表(无限长)随机分成 3 个子组?

c# - 将 C# 中的值作为参数传递给 python,并从 Python 接收处理后的值并显示在 C# 表单上

python - Keras 中局部连接层的维度

python - Python 究竟是如何检查列表的?

python - 如何从列中删除浮点值 - pandas

python - txt 文件的字数统计并输出到文件

python - 我写了一行在 pygamezero 中显示 hello,但它显示白色 block 而不是文本

python - OpenCV 从 url 加载视频

python-3.x - 属性错误: module 'tensorflow' has no attribute 'streaming_accuracy'

arrays - numpy 搜索多个值的数组,并返回它们的索引