我一直在寻找freeze.py它应该来在Python 3.3的Windows与Python 3捆绑安装(虽然实用性distribute和pip安装),并没有发现它.该实用程序可以直接下载了Python的svn库的位置,但我想知道:是否freeze配备了标准的Windows的Python 3安装?
看起来像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上也没有那么好用(你可以从描述它作为实用程序的文档中看出来......"为Unix系统编译可执行文件").而且只有很多事情无法处理或处理不当.此时应该更多地将其视为示例代码而不是有用的工具.
有一些第三方的替代品在那里:cx_freeze,py2exe,PyInstaller等,如果你搜索的PyPI的"冻结"(这似乎是合理的其他条款),你会发现一堆这些替代品.如果您的目标是使用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),它通常提供类似的加速,几乎没有任何权衡.或者,您可能只需要重写慢速代码以利用已经优化的库(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,对吧?
| 归档时间: |
|
| 查看次数: |
979 次 |
| 最近记录: |