900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 【转载】用cx_Freeze把Python代码打包成单个独立的exe可执行文件

【转载】用cx_Freeze把Python代码打包成单个独立的exe可执行文件

时间:2023-03-25 11:11:02

相关推荐

【转载】用cx_Freeze把Python代码打包成单个独立的exe可执行文件

链接:用cx_Freeze把Python代码打包成单个独立的exe可执行文件

【记录】用cx_Freeze把Python代码打包成单个独立的exe可执行文件

背景

之前已经折腾过:

【记录】用PyInstaller把Python代码打包成单个独立的exe可执行文件

了,虽然已经,成功的,完美的,把对应的BlogsToWordpress打包成单个exe了。

但是貌似有人说cx_Freeze打包处理的文件会更小些,所以接着打算再去试试cx_Freeze。

cx_Freeze简介

将Python打包成可执行文件,cx_Freeze算是其中一个。

另外两个是py2exe和PyInstaller。

cx_Freeze的特点

其最大特点,目前看来,是只有cx_Freeze支持Python 3.x版本(py2exe和PyInstaller都暂不支持)。

下载cx_Freeze

找到

/projects/cx-freeze/files/

中的

最新的

/projects/cx-freeze/files/4.3.1/

下载和我当前环境:

win7 x64 + Python 2.7

所对应的:

cx_Freeze-4.3.1.win-amd64-py2.7.msi

得到688KB的

cx_Freeze-4.3.1.win-amd64-py2.7.msi

安装cx_Freeze

双击cx_Freeze-4.3.1.win-amd64-py2.7.msi去安装:

然后就完成了。

使用cx_Freeze去打包exe

1.想去官网:

cx-

找文档,结果很悲催的,此刻打不开。。。

2.找到一个readme:

/crew/atuining/cx_Freeze/README.txt

然后去cmd中运行

FreezePython –help

结果都失败了:

?

3.继续找参考资料。

在安装目录中:

D:\tmp\dev_install_root\Python27_x64\Lib\site-packages\cx_Freeze

也没有找到相关文档。

4.后来终于找到之前就看到过的这个:

Welcome to cx_Freeze’s documentation!

cx_Freeze使用方法简介

cx_Freeze的三种用法

按照教程说法,cx_Freeze有三种用法:

使用内含的cxfreeze script:用于简单的python脚本 创建distutils setup script:用于稍微复杂的Python脚本,或为以后预留一定的配置 直接使用cx_Freeze内部相关的类和模块:用于很复杂的Python脚本,或用于扩展,嵌入

cx_Freeze可生成三种可执行文件

产生的可执行文件,也有三种:

把脚本用zip压缩成可执行文件:早期的cx_Freeze只支持此种单一方法 创建出一个私有的zip压缩文件,但是文件名和前者一样,且以.zip结尾 创建一个名为library.zip的压缩文件,把所有的模块都放到此文件里面:默认使用此种方法

后两种方法,对于Linux下面的RPM包,是必须要有的过程。

生成单一可执行文件的方法

cx_Freeze默认情况下,是会生成,一个可执行文件,加上一堆运行所需的(.dll或.so等)库文件。

如果想要生成单一的可执行文件:

Windows下的exe:使用(方法2的)setup script,且加上参数bdist_msi 更高的打包,可使用:Inno Setup Mac下的dmg:使用(方法2的)setup script,且加上参数bdist_dmg

针对Windows要注意的

Windows下的Python 2.6+,需要Microsoft Visual C++ Redistributable Package

cx_Freeze目前策略是,不自动拷贝相关所依赖的dll库文件。

关于其所说的:

自己此处win7 x64中只找到:

不过,应该是一样可以用的。

另外,也看到了,与这些文件对应的,还有些是针对x64的,wow64之类的。

估计是用于发布x64版本的可执行文件时,需要用到。

此处,顺便贴上

C:\Windows\winsxs\Manifests\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_bcb86ed6ac711f91.manifest

的内容

?

用cx_Freeze中的distutils setup script的方法去生成可执行文件

1.参考:

distutils setup script

/anthony_tuininga/cx_freeze/src

中的示例代码:

/anthony_tuininga/cx_freeze/src/8913025af703028dfa7cc019c482be920f491dba/samples?at=default

去试试。

创建了一个:

D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\cs_Freeze\setup.py

内容如下:

?

其中:

此处故意没有把所有的模块都加到packages,否则单独一个个拷贝模块,也就累死了。看看脚本能否自动添加进去;

试试运行结果,结果出错:

ImportError: No module named ‘traceback’

详见:

【已解决】Python中通过cx_Freeze去打包exe出错:ImportError: No module named ‘traceback’

果然不够智能和好用啊。。。

2.最后,是如下配置:

?

然后运行正常:

?

生成的结果是:

和setup.py同目录下,生成dist和build:

build\exe.win-amd64-2.7下面,生成对应的:

exe文件,相关的一堆库文件和pyd

dist下面生成对应的msi文件:

BlogsToWordpress-16.8-amd64.msi

3.此时,才明白,此处,使用

setup.py bdist_msi

是生成的installer,而不是单个的,独立的exe。。。。

接着就是想办法去生成,独立的,单个的,exe可执行文件。

4.先不去弄了。

因为先去试试exe是否可以正常运行,结果果然不能:

?

很明显,缺少对应的库。

所以,还是要先去添加对应的path。

所以改为:

?

运行结果是:

结果就出现了,上面的那个:

ImportError: No module named ‘traceback’

错误。

很明显,此处就是setup的options,无法识别所导致的。

5.然后去运行了build:

?

然后发现了,对应的会生成

exe.win-amd64-2.7

极其下所有文件,即exe相关的所有文件。

6.因此也就很明显了:

setup.py bdist_msi

是在

setup.py build

的基础上,将其生成的exe和对应的库文件等内容,集成为对应的msi的installer。

7.但是,弄到现在为止,还是没有看到,有任何选项,是可以生成,独立的,单一的exe的。

且不说,即使生成exe加上库文件,也还是需要:

手动添加path便于搜索所依赖的库

仍需手动,一个个添加对应的库的名字。

8.所以,至此,虽然上述问题,可以花时间解决,但是都还是无法最终生成单一的exe,所以,直接放弃此cx_Freeze了。

和PyInstaller相比,可以叫做,极度的,不好用。

其唯一的相对的优势就是,支持Python 3.x。

总结

cx_Freeze,可以生成:

exe文件 + 运行时所依赖的其他多个(dll库等)文件 但不是单一的,独立的,exe可执行文件 单独的msi安装文件包 比如:BlogsToWordpress-16.8-amd64.msi

和PyInstaller相比:

缺点 需要手动自己输入,所依赖的库的名字,而无法自动识别 像我这里的项目,单是依赖的库,就N多个,如果需要手动输入,累都累屎了 还需要添加对应的path,供其搜索依赖的库 此处会出错解决上述的错误:ImportError: No module named ‘traceback’,目前懒得去解决了。 优点 支持Python 3.x

结论

如果是想要生成:

单个的,独立的exe可执行文件 或者 exe + 相关的dll库

等,都可以使用,极其方便好用的PyInstaller;

用法可参考:

【记录】用cx_Freeze把Python代码打包成单个独立的exe可执行文件

如果是想要生成:

msi安装文件 或者 必须用到Python 3.x版本

那么再去用,相对来说非常不好用的,cx_Freeze。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。