【转载】用cx_Freeze把Python代码打包成单个独立的exe可执行文件
来源:互联网 发布:马自达睿翼轮毂数据 编辑:程序博客网 时间:2024/06/05 13:26
链接:用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
找到
http://sourceforge.net/projects/cx-freeze/files/
中的
最新的
http://sourceforge.net/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-freeze.sourceforge.net
找文档,结果很悲催的,此刻打不开。。。
2.找到一个readme:
http://python.net/crew/atuining/cx_Freeze/README.txt
然后去cmd中运行
FreezePython –help
结果都失败了:
D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\cs_Freeze>FreezePython --help
'FreezePython'
is not recognized as an internal or external
command
,
operable program or batch
file
.
D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\cs_Freeze>FreezePython.py --help
'FreezePython.py'
is not recognized as an internal or external
command
,
operable program or batch
file
.
D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\cs_Freeze>
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++ 2008 Redistributable Package
cx_Freeze目前策略是,不自动拷贝相关所依赖的dll库文件。
关于其所说的:
C:\WINDOWS\WinSxS\Manifests\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375.manifest
C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375\msvcm90.dll
C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375\msvcp90.dll
C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375\msvcr90.dll
自己此处win7 x64中只找到:
C:\Windows\winsxs\Manifests\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_bcb86ed6ac711f91.manifest
C:\Windows\winsxs\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_bcb86ed6ac711f91\msvcm90.dll
C:\Windows\winsxs\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_bcb86ed6ac711f91\msvcp90.dll
C:\Windows\winsxs\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_bcb86ed6ac711f91\msvcr90.dll
不过,应该是一样可以用的。
另外,也看到了,与这些文件对应的,还有些是针对x64的,wow64之类的。
估计是用于发布x64版本的可执行文件时,需要用到。
此处,顺便贴上
C:\Windows\winsxs\Manifests\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_bcb86ed6ac711f91.manifest
的内容
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
standalone
=
"yes"
?>
<
assembly
xmlns
=
"urn:schemas-microsoft-com:asm.v1"
manifestVersion
=
"1.0"
>
<
noInheritable
></
noInheritable
>
<
assemblyIdentity
type
=
"win32"
name
=
"Microsoft.VC90.CRT"
version
=
"9.0.21022.8"
processorArchitecture
=
"x86"
publicKeyToken
=
"1fc8b3b9a1e18e3b"
></
assemblyIdentity
>
<
file
name
=
"msvcr90.dll"
hashalg
=
"SHA1"
hash
=
"e0dcdcbfcb452747da530fae6b000d47c8674671"
><
asmv2:hash
xmlns:asmv2
=
"urn:schemas-microsoft-com:asm.v2"
xmlns:dsig
=
"http://www.w3.org/2000/09/xmldsig#"
><
dsig:Transforms
><
dsig:Transform
Algorithm
=
"urn:schemas-microsoft-com:HashTransforms.Identity"
></
dsig:Transform
></
dsig:Transforms
><
dsig:DigestMethod
Algorithm
=
"http://www.w3.org/2000/09/xmldsig#sha1"
></
dsig:DigestMethod
><
dsig:DigestValue
>KSaO8M0iCtPF6YEr79P1dZsnomY=</
dsig:DigestValue
></
asmv2:hash
></
file
> <
file
name
=
"msvcp90.dll"
hashalg
=
"SHA1"
hash
=
"81efe890e4ef2615c0bb4dda7b94bea177c86ebd"
><
asmv2:hash
xmlns:asmv2
=
"urn:schemas-microsoft-com:asm.v2"
xmlns:dsig
=
"http://www.w3.org/2000/09/xmldsig#"
><
dsig:Transforms
><
dsig:Transform
Algorithm
=
"urn:schemas-microsoft-com:HashTransforms.Identity"
></
dsig:Transform
></
dsig:Transforms
><
dsig:DigestMethod
Algorithm
=
"http://www.w3.org/2000/09/xmldsig#sha1"
></
dsig:DigestMethod
><
dsig:DigestValue
>ojDmTgpYMFRKJYkPcM6ckpYkWUU=</
dsig:DigestValue
></
asmv2:hash
></
file
> <
file
name
=
"msvcm90.dll"
hashalg
=
"SHA1"
hash
=
"5470081b336abd7b82c6387567a661a729483b04"
><
asmv2:hash
xmlns:asmv2
=
"urn:schemas-microsoft-com:asm.v2"
xmlns:dsig
=
"http://www.w3.org/2000/09/xmldsig#"
><
dsig:Transforms
><
dsig:Transform
Algorithm
=
"urn:schemas-microsoft-com:HashTransforms.Identity"
></
dsig:Transform
></
dsig:Transforms
><
dsig:DigestMethod
Algorithm
=
"http://www.w3.org/2000/09/xmldsig#sha1"
></
dsig:DigestMethod
><
dsig:DigestValue
>tVogb8kezDre2mXShlIqpp8ErIg=</
dsig:DigestValue
></
asmv2:hash
></
file
>
</
assembly
>
用cx_Freeze中的distutils setup script的方法去生成可执行文件
1.参考:
distutils setup script
和
https://bitbucket.org/anthony_tuininga/cx_freeze/src
中的示例代码:
https://bitbucket.org/anthony_tuininga/cx_freeze/src/8913025af703028dfa7cc019c482be920f491dba/samples?at=default
去试试。
创建了一个:
D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\cs_Freeze\setup.py
内容如下:
#!/usr/bin/python
# -*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
# Name: 【记录】用cx_Freeze把Python代码打包成单个独立的exe可执行文件
# Purpose: http://www.crifan.com/use_cx_freeze_to_package_python_to_single_executable_exe
# Author: Crifan Li
#
# Created: 06/01/2013
# Copyright: (c) Crifan Li 2013
# Licence: www.crifan.com
#-------------------------------------------------------------------------------
import
sys;
from
cx_Freeze
import
setup, Executable;
# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options
=
{
"packages"
: [
"os"
],
#"includes": ["PIL"],
"path"
:
"D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs,D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\crifan,D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\crifan\blogModules,D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\thirdparty,D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\thirdparty\chardet,"
,
"icon"
:
"../../BlogsToWordpress\BlogsToWordpress.ico"
,
};
# GUI applications require a different base on Windows (the default is for a
# console application).
base
=
None
if
sys.platform
=
=
"win32"
:
base
=
"Win32GUI"
setup( name
=
"BlogsToWordpress"
,
version
=
"16.8"
,
description
=
u
"将百度空间(新版和旧版),网易163,新浪sina,QQ空间,人人网,CSDN,搜狐Sohu,博客大巴Blogbus,天涯博客,点点轻博客等博客搬家到WordPress"
,
options
=
{
"build_exe"
: build_exe_options},
executables
=
[Executable(
"../../BlogsToWordpress/BlogsToWordpress.py"
, base
=
base)])
其中:
- 此处故意没有把所有的模块都加到packages,否则单独一个个拷贝模块,也就累死了。看看脚本能否自动添加进去;
试试运行结果,结果出错:
ImportError: No module named ‘traceback’
详见:
【已解决】Python中通过cx_Freeze去打包exe出错:ImportError: No module named ‘traceback’
果然不够智能和好用啊。。。
2.最后,是如下配置:
#!/usr/bin/python
# -*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
# Name: 【记录】用cx_Freeze把Python代码打包成单个独立的exe可执行文件
# Purpose: http://www.crifan.com/use_cx_freeze_to_package_python_to_single_executable_exe
# Author: Crifan Li
#
# Created: 06/01/2013
# Copyright: (c) Crifan Li 2013
# Licence: www.crifan.com
#-------------------------------------------------------------------------------
# import sys;
# import traceback;
from
cx_Freeze
import
setup, Executable;
# # Dependencies are automatically detected, but it might need fine tuning.
# build_exe_options = {
# "packages" : ["os"],
# "includes" : [
# "PIL",
# #"traceback",
# ],
# "path" : "D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs,D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\crifan,D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\crifan\blogModules,D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\thirdparty,D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\thirdparty\chardet,",
# "icon" : "../../BlogsToWordpress\BlogsToWordpress.ico",
# };
# GUI applications require a different base on Windows (the default is for a
# console application).
# base = None;
# if sys.platform == "win32":
# base = "Win32GUI"
setup( name
=
"BlogsToWordpress"
,
version
=
"16.8"
,
description
=
u
"将百度空间(新版和旧版),网易163,新浪sina,QQ空间,人人网,CSDN,搜狐Sohu,博客大巴Blogbus,天涯博客,点点轻博客等博客搬家到WordPress"
,
#options = {"build_exe": build_exe_options},
#executables = [Executable("..\BlogsToWordpress\BlogsToWordpress.py", base=base)])
executables
=
[Executable(
"..\BlogsToWordpress\BlogsToWordpress.py"
)])
然后运行正常:
D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\cx_Freeze>setup.py bdist_msi
running bdist_msi
running build
running build_exe
creating directory build\exe.win-amd64-2.7
copying D:\tmp\dev_install_root\Python27_x64\lib\site-packages\cx_Freeze\bases\Console.exe -> build\exe.win-amd64-2.7\BlogsToWordpress.exe
copying C:\Windows\system32\python27.dll -> build\exe.win-amd64-2.7\python27.dll
Stamped: build\exe.win-amd64-2.7\BlogsToWordpress.exe
writing zip
file
build\exe.win-amd64-2.7\library.zip
Name File
---- ----
m BUILD_CONSTANTS
m StringIO
m UserDict
m __builtin__
m __future__ D:\tmp\dev_install_root\Python27_x64\lib\__future__.py
m __main__
m _abcoll
m _bisect
m _codecs
m _codecs_cn
m _codecs_hk
m _codecs_iso2022
m _codecs_jp
m _codecs_kr
m _codecs_tw
m _collections
m _functools
m _hashlib D:\tmp\dev_install_root\Python27_x64\DLLs\_hashlib.pyd
m _heapq
m _locale
m _md5
m _multibytecodec
m _random
m _sha
m _sha256
m _sha512
m _socket D:\tmp\dev_install_root\Python27_x64\DLLs\_socket.pyd
m _sre
m _ssl D:\tmp\dev_install_root\Python27_x64\DLLs\_ssl.pyd
m _strptime D:\tmp\dev_install_root\Python27_x64\lib\_strptime.py
m _struct
m _threading_local D:\tmp\dev_install_root\Python27_x64\lib\_threading_local.py
m _warnings
m _weakref
m _weakrefset
m _winreg
m abc
m array
m atexit D:\tmp\dev_install_root\Python27_x64\lib\atexit.py
m base64
m bdb D:\tmp\dev_install_root\Python27_x64\lib\bdb.py
m binascii
m bisect D:\tmp\dev_install_root\Python27_x64\lib\bisect.py
m blogstowordpress__main__ ..\BlogsToWordpress\BlogsToWordpress.py
m bz2 D:\tmp\dev_install_root\Python27_x64\DLLs\bz2.pyd
m cPickle
m cStringIO
m calendar D:\tmp\dev_install_root\Python27_x64\lib\calendar.py
m cmd D:\tmp\dev_install_root\Python27_x64\lib\cmd.py
m codecs
m collections D:\tmp\dev_install_root\Python27_x64\lib\collections.py
m copy
m copy_reg
m cx_Freeze__init__ D:\tmp\dev_install_root\Python27_x64\lib\site-packages\cx_Freeze\initscripts\Console.py
m datetime
m difflib D:\tmp\dev_install_root\Python27_x64\lib\difflib.py
m dis D:\tmp\dev_install_root\Python27_x64\lib\dis.py
m doctest D:\tmp\dev_install_root\Python27_x64\lib\doctest.py
m dummy_thread D:\tmp\dev_install_root\Python27_x64\lib\dummy_thread.py
P email D:\tmp\dev_install_root\Python27_x64\lib\email\__init__.py
m email._parseaddr D:\tmp\dev_install_root\Python27_x64\lib\email\_parseaddr.py
m email.base64mime D:\tmp\dev_install_root\Python27_x64\lib\email\base64mime.py
m email.charset D:\tmp\dev_install_root\Python27_x64\lib\email\charset.py
m email.encoders D:\tmp\dev_install_root\Python27_x64\lib\email\encoders.py
m email.errors D:\tmp\dev_install_root\Python27_x64\lib\email\errors.py
m email.feedparser D:\tmp\dev_install_root\Python27_x64\lib\email\feedparser.py
m email.generator D:\tmp\dev_install_root\Python27_x64\lib\email\generator.py
m email.header D:\tmp\dev_install_root\Python27_x64\lib\email\header.py
m email.iterators D:\tmp\dev_install_root\Python27_x64\lib\email\iterators.py
m email.message D:\tmp\dev_install_root\Python27_x64\lib\email\message.py
P email.mime D:\tmp\dev_install_root\Python27_x64\lib\email\mime\__init__.py
m email.parser D:\tmp\dev_install_root\Python27_x64\lib\email\parser.py
m email.quoprimime D:\tmp\dev_install_root\Python27_x64\lib\email\quoprimime.py
m email.utils D:\tmp\dev_install_root\Python27_x64\lib\email\utils.py
P encodings
m encodings.aliases
m encodings.ascii
m encodings.base64_codec
m encodings.big5
m encodings.big5hkscs
m encodings.bz2_codec
m encodings.charmap
m encodings.cp037
m encodings.cp1006
m encodings.cp1026
m encodings.cp1140
m encodings.cp1250
m encodings.cp1251
m encodings.cp1252
m encodings.cp1253
m encodings.cp1254
m encodings.cp1255
m encodings.cp1256
m encodings.cp1257
m encodings.cp1258
m encodings.cp424
m encodings.cp437
m encodings.cp500
m encodings.cp720
m encodings.cp737
m encodings.cp775
m encodings.cp850
m encodings.cp852
m encodings.cp855
m encodings.cp856
m encodings.cp857
m encodings.cp858
m encodings.cp860
m encodings.cp861
m encodings.cp862
m encodings.cp863
m encodings.cp864
m encodings.cp865
m encodings.cp866
m encodings.cp869
m encodings.cp874
m encodings.cp875
m encodings.cp932
m encodings.cp949
m encodings.cp950
m encodings.euc_jis_2004
m encodings.euc_jisx0213
m encodings.euc_jp
m encodings.euc_kr
m encodings.gb18030
m encodings.gb2312
m encodings.gbk
m encodings.hex_codec
m encodings.hp_roman8
m encodings.hz
m encodings.idna
m encodings.iso2022_jp
m encodings.iso2022_jp_1
m encodings.iso2022_jp_2
m encodings.iso2022_jp_2004
m encodings.iso2022_jp_3
m encodings.iso2022_jp_ext
m encodings.iso2022_kr
m encodings.iso8859_1
m encodings.iso8859_10
m encodings.iso8859_11
m encodings.iso8859_13
m encodings.iso8859_14
m encodings.iso8859_15
m encodings.iso8859_16
m encodings.iso8859_2
m encodings.iso8859_3
m encodings.iso8859_4
m encodings.iso8859_5
m encodings.iso8859_6
m encodings.iso8859_7
m encodings.iso8859_8
m encodings.iso8859_9
m encodings.johab
m encodings.koi8_r
m encodings.koi8_u
m encodings.latin_1
m encodings.mac_arabic
m encodings.mac_centeuro
m encodings.mac_croatian
m encodings.mac_cyrillic
m encodings.mac_farsi
m encodings.mac_greek
m encodings.mac_iceland
m encodings.mac_latin2
m encodings.mac_roman
m encodings.mac_romanian
m encodings.mac_turkish
m encodings.mbcs
m encodings.palmos
m encodings.ptcp154
m encodings.punycode
m encodings.quopri_codec
m encodings.raw_unicode_escape
m encodings.rot_13
m encodings.shift_jis
m encodings.shift_jis_2004
m encodings.shift_jisx0213
m encodings.string_escape
m encodings.tis_620
m encodings.undefined
m encodings.unicode_escape
m encodings.unicode_internal
m encodings.utf_16
m encodings.utf_16_be
m encodings.utf_16_le
m encodings.utf_32
m encodings.utf_32_be
m encodings.utf_32_le
m encodings.utf_7
m encodings.utf_8
m encodings.utf_8_sig
m encodings.uu_codec
m encodings.zlib_codec
m errno
m exceptions
m fnmatch D:\tmp\dev_install_root\Python27_x64\lib\fnmatch.py
m ftplib D:\tmp\dev_install_root\Python27_x64\lib\ftplib.py
m functools D:\tmp\dev_install_root\Python27_x64\lib\functools.py
m genericpath
m getopt D:\tmp\dev_install_root\Python27_x64\lib\getopt.py
m getpass D:\tmp\dev_install_root\Python27_x64\lib\getpass.py
m gettext D:\tmp\dev_install_root\Python27_x64\lib\gettext.py
m hashlib D:\tmp\dev_install_root\Python27_x64\lib\hashlib.py
m heapq D:\tmp\dev_install_root\Python27_x64\lib\heapq.py
m httplib D:\tmp\dev_install_root\Python27_x64\lib\httplib.py
m imp
m inspect D:\tmp\dev_install_root\Python27_x64\lib\inspect.py
m itertools
m keyword D:\tmp\dev_install_root\Python27_x64\lib\keyword.py
m linecache
m locale D:\tmp\dev_install_root\Python27_x64\lib\locale.py
P logging D:\tmp\dev_install_root\Python27_x64\lib\logging\__init__.py
m math
m mimetools D:\tmp\dev_install_root\Python27_x64\lib\mimetools.py
m mimetypes D:\tmp\dev_install_root\Python27_x64\lib\mimetypes.py
m msvcrt
m nt
m ntpath
m nturl2path D:\tmp\dev_install_root\Python27_x64\lib\nturl2path.py
m opcode D:\tmp\dev_install_root\Python27_x64\lib\opcode.py
m operator
m optparse D:\tmp\dev_install_root\Python27_x64\lib\optparse.py
m os
m pdb D:\tmp\dev_install_root\Python27_x64\lib\pdb.py
m platform D:\tmp\dev_install_root\Python27_x64\lib\platform.py
m plistlib D:\tmp\dev_install_root\Python27_x64\lib\plistlib.py
m posixpath
m pprint D:\tmp\dev_install_root\Python27_x64\lib\pprint.py
m pyexpat D:\tmp\dev_install_root\Python27_x64\DLLs\pyexpat.pyd
m pywintypes C:\Windows\system32\pywintypes27.dll
m quopri
m random D:\tmp\dev_install_root\Python27_x64\lib\random.py
m re D:\tmp\dev_install_root\Python27_x64\lib\re.py
m repr
m rfc822 D:\tmp\dev_install_root\Python27_x64\lib\rfc822.py
m shlex D:\tmp\dev_install_root\Python27_x64\lib\shlex.py
m signal
m socket D:\tmp\dev_install_root\Python27_x64\lib\socket.py
m sre_compile D:\tmp\dev_install_root\Python27_x64\lib\sre_compile.py
m sre_constants D:\tmp\dev_install_root\Python27_x64\lib\sre_constants.py
m sre_parse D:\tmp\dev_install_root\Python27_x64\lib\sre_parse.py
m ssl D:\tmp\dev_install_root\Python27_x64\lib\ssl.py
m stat
m string
m stringprep
m strop
m struct
m sys
m tempfile D:\tmp\dev_install_root\Python27_x64\lib\tempfile.py
m textwrap D:\tmp\dev_install_root\Python27_x64\lib\textwrap.py
m thread
m threading D:\tmp\dev_install_root\Python27_x64\lib\threading.py
m
time
m token D:\tmp\dev_install_root\Python27_x64\lib\token.py
m tokenize D:\tmp\dev_install_root\Python27_x64\lib\tokenize.py
m traceback
m types
m unicodedata D:\tmp\dev_install_root\Python27_x64\DLLs\unicodedata.pyd
P unittest D:\tmp\dev_install_root\Python27_x64\lib\unittest\__init__.py
m unittest.
case
D:\tmp\dev_install_root\Python27_x64\lib\unittest\
case
.py
m unittest.loader D:\tmp\dev_install_root\Python27_x64\lib\unittest\loader.py
m unittest.main D:\tmp\dev_install_root\Python27_x64\lib\unittest\main.py
m unittest.result D:\tmp\dev_install_root\Python27_x64\lib\unittest\result.py
m unittest.runner D:\tmp\dev_install_root\Python27_x64\lib\unittest\runner.py
m unittest.signals D:\tmp\dev_install_root\Python27_x64\lib\unittest\signals.py
m unittest.suite D:\tmp\dev_install_root\Python27_x64\lib\unittest\suite.py
m unittest.util D:\tmp\dev_install_root\Python27_x64\lib\unittest\util.py
m urllib D:\tmp\dev_install_root\Python27_x64\lib\urllib.py
m urlparse D:\tmp\dev_install_root\Python27_x64\lib\urlparse.py
m uu D:\tmp\dev_install_root\Python27_x64\lib\uu.py
m warnings
m weakref
m win32api D:\tmp\dev_install_root\Python27_x64\lib\site-packages\win32\win32api.pyd
m win32con D:\tmp\dev_install_root\Python27_x64\lib\site-packages\win32\lib\win32con.py
m win32pipe D:\tmp\dev_install_root\Python27_x64\lib\site-packages\win32\win32pipe.pyd
P xml D:\tmp\dev_install_root\Python27_x64\lib\xml\__init__.py
P xml.parsers D:\tmp\dev_install_root\Python27_x64\lib\xml\parsers\__init__.py
m xml.parsers.expat D:\tmp\dev_install_root\Python27_x64\lib\xml\parsers\expat.py
P xml.sax D:\tmp\dev_install_root\Python27_x64\lib\xml\sax\__init__.py
m xml.sax._exceptions D:\tmp\dev_install_root\Python27_x64\lib\xml\sax\_exceptions.py
m xml.sax.expatreader D:\tmp\dev_install_root\Python27_x64\lib\xml\sax\expatreader.py
m xml.sax.handler D:\tmp\dev_install_root\Python27_x64\lib\xml\sax\handler.py
m xml.sax.saxutils D:\tmp\dev_install_root\Python27_x64\lib\xml\sax\saxutils.py
m xml.sax.xmlreader D:\tmp\dev_install_root\Python27_x64\lib\xml\sax\xmlreader.py
m zipimport
m zlib
Missing modules:
? BlogBaidu imported from blogstowordpress__main__
? BlogBlogbus imported from blogstowordpress__main__
? BlogCsdn imported from blogstowordpress__main__
? BlogDiandian imported from blogstowordpress__main__
? BlogNetease imported from blogstowordpress__main__
? BlogQQ imported from blogstowordpress__main__
? BlogRenren imported from blogstowordpress__main__
? BlogSina imported from blogstowordpress__main__
? BlogSohu imported from blogstowordpress__main__
? BlogTianya imported from blogstowordpress__main__
? crifanLib imported from blogstowordpress__main__
copying D:\tmp\dev_install_root\Python27_x64\DLLs\_hashlib.pyd -> build\exe.win-amd64-2.7\_hashlib.pyd
copying D:\tmp\dev_install_root\Python27_x64\DLLs\_socket.pyd -> build\exe.win-amd64-2.7\_socket.pyd
copying D:\tmp\dev_install_root\Python27_x64\DLLs\_ssl.pyd -> build\exe.win-amd64-2.7\_ssl.pyd
copying D:\tmp\dev_install_root\Python27_x64\DLLs\bz2.pyd -> build\exe.win-amd64-2.7\bz2.pyd
copying D:\tmp\dev_install_root\Python27_x64\DLLs\pyexpat.pyd -> build\exe.win-amd64-2.7\pyexpat.pyd
copying C:\Windows\system32\pywintypes27.dll -> build\exe.win-amd64-2.7\pywintypes27.dll
copying D:\tmp\dev_install_root\Python27_x64\DLLs\unicodedata.pyd -> build\exe.win-amd64-2.7\unicodedata.pyd
copying D:\tmp\dev_install_root\Python27_x64\lib\site-packages\win32\win32api.pyd -> build\exe.win-amd64-2.7\win32api.pyd
copying D:\tmp\dev_install_root\Python27_x64\lib\site-packages\win32\win32pipe.pyd -> build\exe.win-amd64-2.7\win32pipe.pyd
installing to build\bdist.win-amd64\msi
running install_exe
creating build\bdist.win-amd64
creating build\bdist.win-amd64\msi
copying build\exe.win-amd64-2.7\BlogsToWordpress.exe -> build\bdist.win-amd64\msi
copying build\exe.win-amd64-2.7\bz2.pyd -> build\bdist.win-amd64\msi
copying build\exe.win-amd64-2.7\library.zip -> build\bdist.win-amd64\msi
copying build\exe.win-amd64-2.7\pyexpat.pyd -> build\bdist.win-amd64\msi
copying build\exe.win-amd64-2.7\python27.dll -> build\bdist.win-amd64\msi
copying build\exe.win-amd64-2.7\pywintypes27.dll -> build\bdist.win-amd64\msi
copying build\exe.win-amd64-2.7\unicodedata.pyd -> build\bdist.win-amd64\msi
copying build\exe.win-amd64-2.7\win32api.pyd -> build\bdist.win-amd64\msi
copying build\exe.win-amd64-2.7\win32pipe.pyd -> build\bdist.win-amd64\msi
copying build\exe.win-amd64-2.7\_hashlib.pyd -> build\bdist.win-amd64\msi
copying build\exe.win-amd64-2.7\_socket.pyd -> build\bdist.win-amd64\msi
copying build\exe.win-amd64-2.7\_ssl.pyd -> build\bdist.win-amd64\msi
creating dist
removing
'build\bdist.win-amd64\msi'
(and everything under it)
D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\cx_Freeze>setup.py bdist_msi
生成的结果是:
和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是否可以正常运行,结果果然不能:
D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\cx_Freeze\build\exe.win-amd64-2.7>BlogsToWordpress.exe
Traceback (most recent call last):
File
"D:\tmp\dev_install_root\Python27_x64\lib\site-packages\cx_Freeze\initscripts\Console.py"
, line 27,
in
<module>
exec
code
in
m.__dict__
File
"..\BlogsToWordpress\BlogsToWordpress.py"
, line 127,
in
<module>
ImportError: No module named crifanLib
很明显,缺少对应的库。
所以,还是要先去添加对应的path。
所以改为:
#!/usr/bin/python
# -*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
# Name: 【记录】用cx_Freeze把Python代码打包成单个独立的exe可执行文件
# Purpose: http://www.crifan.com/use_cx_freeze_to_package_python_to_single_executable_exe
# Author: Crifan Li
#
# Created: 06/01/2013
# Copyright: (c) Crifan Li 2013
# Licence: www.crifan.com
#-------------------------------------------------------------------------------
# import sys;
# import traceback;
from
cx_Freeze
import
setup, Executable;
# # Dependencies are automatically detected, but it might need fine tuning.
build_exe_options
=
{
# "packages" : ["os"],
# "includes" : [
# "PIL",
# #"traceback",
# ],
"path"
:
"D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs,D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\crifan,D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\crifan\blogModules,D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\thirdparty,D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\thirdparty\chardet,"
,
# "icon" : "../../BlogsToWordpress\BlogsToWordpress.ico",
};
# GUI applications require a different base on Windows (the default is for a
# console application).
# base = None;
# if sys.platform == "win32":
# base = "Win32GUI"
setup( name
=
"BlogsToWordpress"
,
version
=
"16.8"
,
description
=
u
"将百度空间(新版和旧版),网易163,新浪sina,QQ空间,人人网,CSDN,搜狐Sohu,博客大巴Blogbus,天涯博客,点点轻博客等博客搬家到WordPress"
,
options
=
{
"build_exe"
: build_exe_options},
#executables = [Executable("..\BlogsToWordpress\BlogsToWordpress.py", base=base)])
executables
=
[Executable(
"..\BlogsToWordpress\BlogsToWordpress.py"
)])
运行结果是:
结果就出现了,上面的那个:
ImportError: No module named ‘traceback’
错误。
很明显,此处就是setup的options,无法识别所导致的。
5.然后去运行了build:
D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\cx_Freeze>setup.py build
running build
running build_exe
creating directory build\exe.win-amd64-2.7
copying D:\tmp\dev_install_root\Python27_x64\lib\site-packages\cx_Freeze\bases\Console.exe -> build\exe.win-amd64-2.7\BlogsToWordpress.exe
copying C:\Windows\system32\python27.dll -> build\exe.win-amd64-2.7\python27.dll
Stamped: build\exe.win-amd64-2.7\BlogsToWordpress.exe
writing zip
file
build\exe.win-amd64-2.7\library.zip
Name File
---- ----
m BUILD_CONSTANTS
m StringIO
m UserDict
m __builtin__
m __future__ D:\tmp\dev_install_root\Python27_x64\lib\__future__.py
m __main__
m _abcoll
m _bisect
m _codecs
m _codecs_cn
m _codecs_hk
m _codecs_iso2022
m _codecs_jp
m _codecs_kr
m _codecs_tw
m _collections
m _functools
m _hashlib D:\tmp\dev_install_root\Python27_x64\DLLs\_hashlib.pyd
m _heapq
m _locale
m _md5
m _multibytecodec
m _random
m _sha
m _sha256
m _sha512
m _socket D:\tmp\dev_install_root\Python27_x64\DLLs\_socket.pyd
m _sre
m _ssl D:\tmp\dev_install_root\Python27_x64\DLLs\_ssl.pyd
m _strptime D:\tmp\dev_install_root\Python27_x64\lib\_strptime.py
m _struct
m _threading_local D:\tmp\dev_install_root\Python27_x64\lib\_threading_local.py
m _warnings
m _weakref
m _weakrefset
m _winreg
m abc
m array
m atexit D:\tmp\dev_install_root\Python27_x64\lib\atexit.py
m base64
m bdb D:\tmp\dev_install_root\Python27_x64\lib\bdb.py
m binascii
m bisect D:\tmp\dev_install_root\Python27_x64\lib\bisect.py
m blogstowordpress__main__ ..\BlogsToWordpress\BlogsToWordpress.py
m bz2 D:\tmp\dev_install_root\Python27_x64\DLLs\bz2.pyd
m cPickle
m cStringIO
m calendar D:\tmp\dev_install_root\Python27_x64\lib\calendar.py
m cmd D:\tmp\dev_install_root\Python27_x64\lib\cmd.py
m codecs
m collections D:\tmp\dev_install_root\Python27_x64\lib\collections.py
m copy
m copy_reg
m cx_Freeze__init__ D:\tmp\dev_install_root\Python27_x64\lib\site-packages\cx_Freeze\initscripts\Console.py
m datetime
m difflib D:\tmp\dev_install_root\Python27_x64\lib\difflib.py
m dis D:\tmp\dev_install_root\Python27_x64\lib\dis.py
m doctest D:\tmp\dev_install_root\Python27_x64\lib\doctest.py
m dummy_thread D:\tmp\dev_install_root\Python27_x64\lib\dummy_thread.py
P email D:\tmp\dev_install_root\Python27_x64\lib\email\__init__.py
m email._parseaddr D:\tmp\dev_install_root\Python27_x64\lib\email\_parseaddr.py
m email.base64mime D:\tmp\dev_install_root\Python27_x64\lib\email\base64mime.py
m email.charset D:\tmp\dev_install_root\Python27_x64\lib\email\charset.py
m email.encoders D:\tmp\dev_install_root\Python27_x64\lib\email\encoders.py
m email.errors D:\tmp\dev_install_root\Python27_x64\lib\email\errors.py
m email.feedparser D:\tmp\dev_install_root\Python27_x64\lib\email\feedparser.py
m email.generator D:\tmp\dev_install_root\Python27_x64\lib\email\generator.py
m email.header D:\tmp\dev_install_root\Python27_x64\lib\email\header.py
m email.iterators D:\tmp\dev_install_root\Python27_x64\lib\email\iterators.py
m email.message D:\tmp\dev_install_root\Python27_x64\lib\email\message.py
P email.mime D:\tmp\dev_install_root\Python27_x64\lib\email\mime\__init__.py
m email.parser D:\tmp\dev_install_root\Python27_x64\lib\email\parser.py
m email.quoprimime D:\tmp\dev_install_root\Python27_x64\lib\email\quoprimime.py
m email.utils D:\tmp\dev_install_root\Python27_x64\lib\email\utils.py
P encodings
m encodings.aliases
m encodings.ascii
m encodings.base64_codec
m encodings.big5
m encodings.big5hkscs
m encodings.bz2_codec
m encodings.charmap
m encodings.cp037
m encodings.cp1006
m encodings.cp1026
m encodings.cp1140
m encodings.cp1250
m encodings.cp1251
m encodings.cp1252
m encodings.cp1253
m encodings.cp1254
m encodings.cp1255
m encodings.cp1256
m encodings.cp1257
m encodings.cp1258
m encodings.cp424
m encodings.cp437
m encodings.cp500
m encodings.cp720
m encodings.cp737
m encodings.cp775
m encodings.cp850
m encodings.cp852
m encodings.cp855
m encodings.cp856
m encodings.cp857
m encodings.cp858
m encodings.cp860
m encodings.cp861
m encodings.cp862
m encodings.cp863
m encodings.cp864
m encodings.cp865
m encodings.cp866
m encodings.cp869
m encodings.cp874
m encodings.cp875
m encodings.cp932
m encodings.cp949
m encodings.cp950
m encodings.euc_jis_2004
m encodings.euc_jisx0213
m encodings.euc_jp
m encodings.euc_kr
m encodings.gb18030
m encodings.gb2312
m encodings.gbk
m encodings.hex_codec
m encodings.hp_roman8
m encodings.hz
m encodings.idna
m encodings.iso2022_jp
m encodings.iso2022_jp_1
m encodings.iso2022_jp_2
m encodings.iso2022_jp_2004
m encodings.iso2022_jp_3
m encodings.iso2022_jp_ext
m encodings.iso2022_kr
m encodings.iso8859_1
m encodings.iso8859_10
m encodings.iso8859_11
m encodings.iso8859_13
m encodings.iso8859_14
m encodings.iso8859_15
m encodings.iso8859_16
m encodings.iso8859_2
m encodings.iso8859_3
m encodings.iso8859_4
m encodings.iso8859_5
m encodings.iso8859_6
m encodings.iso8859_7
m encodings.iso8859_8
m encodings.iso8859_9
m encodings.johab
m encodings.koi8_r
m encodings.koi8_u
m encodings.latin_1
m encodings.mac_arabic
m encodings.mac_centeuro
m encodings.mac_croatian
m encodings.mac_cyrillic
m encodings.mac_farsi
m encodings.mac_greek
m encodings.mac_iceland
m encodings.mac_latin2
m encodings.mac_roman
m encodings.mac_romanian
m encodings.mac_turkish
m encodings.mbcs
m encodings.palmos
m encodings.ptcp154
m encodings.punycode
m encodings.quopri_codec
m encodings.raw_unicode_escape
m encodings.rot_13
m encodings.shift_jis
m encodings.shift_jis_2004
m encodings.shift_jisx0213
m encodings.string_escape
m encodings.tis_620
m encodings.undefined
m encodings.unicode_escape
m encodings.unicode_internal
m encodings.utf_16
m encodings.utf_16_be
m encodings.utf_16_le
m encodings.utf_32
m encodings.utf_32_be
m encodings.utf_32_le
m encodings.utf_7
m encodings.utf_8
m encodings.utf_8_sig
m encodings.uu_codec
m encodings.zlib_codec
m errno
m exceptions
m fnmatch D:\tmp\dev_install_root\Python27_x64\lib\fnmatch.py
m ftplib D:\tmp\dev_install_root\Python27_x64\lib\ftplib.py
m functools D:\tmp\dev_install_root\Python27_x64\lib\functools.py
m genericpath
m getopt D:\tmp\dev_install_root\Python27_x64\lib\getopt.py
m getpass D:\tmp\dev_install_root\Python27_x64\lib\getpass.py
m gettext D:\tmp\dev_install_root\Python27_x64\lib\gettext.py
m hashlib D:\tmp\dev_install_root\Python27_x64\lib\hashlib.py
m heapq D:\tmp\dev_install_root\Python27_x64\lib\heapq.py
m httplib D:\tmp\dev_install_root\Python27_x64\lib\httplib.py
m imp
m inspect D:\tmp\dev_install_root\Python27_x64\lib\inspect.py
m itertools
m keyword D:\tmp\dev_install_root\Python27_x64\lib\keyword.py
m linecache
m locale D:\tmp\dev_install_root\Python27_x64\lib\locale.py
P logging D:\tmp\dev_install_root\Python27_x64\lib\logging\__init__.py
m math
m mimetools D:\tmp\dev_install_root\Python27_x64\lib\mimetools.py
m mimetypes D:\tmp\dev_install_root\Python27_x64\lib\mimetypes.py
m msvcrt
m nt
m ntpath
m nturl2path D:\tmp\dev_install_root\Python27_x64\lib\nturl2path.py
m opcode D:\tmp\dev_install_root\Python27_x64\lib\opcode.py
m operator
m optparse D:\tmp\dev_install_root\Python27_x64\lib\optparse.py
m os
m pdb D:\tmp\dev_install_root\Python27_x64\lib\pdb.py
m platform D:\tmp\dev_install_root\Python27_x64\lib\platform.py
m plistlib D:\tmp\dev_install_root\Python27_x64\lib\plistlib.py
m posixpath
m pprint D:\tmp\dev_install_root\Python27_x64\lib\pprint.py
m pyexpat D:\tmp\dev_install_root\Python27_x64\DLLs\pyexpat.pyd
m pywintypes C:\Windows\system32\pywintypes27.dll
m quopri
m random D:\tmp\dev_install_root\Python27_x64\lib\random.py
m re D:\tmp\dev_install_root\Python27_x64\lib\re.py
m repr
m rfc822 D:\tmp\dev_install_root\Python27_x64\lib\rfc822.py
m shlex D:\tmp\dev_install_root\Python27_x64\lib\shlex.py
m signal
m socket D:\tmp\dev_install_root\Python27_x64\lib\socket.py
m sre_compile D:\tmp\dev_install_root\Python27_x64\lib\sre_compile.py
m sre_constants D:\tmp\dev_install_root\Python27_x64\lib\sre_constants.py
m sre_parse D:\tmp\dev_install_root\Python27_x64\lib\sre_parse.py
m ssl D:\tmp\dev_install_root\Python27_x64\lib\ssl.py
m stat
m string
m stringprep
m strop
m struct
m sys
m tempfile D:\tmp\dev_install_root\Python27_x64\lib\tempfile.py
m textwrap D:\tmp\dev_install_root\Python27_x64\lib\textwrap.py
m thread
m threading D:\tmp\dev_install_root\Python27_x64\lib\threading.py
m
time
m token D:\tmp\dev_install_root\Python27_x64\lib\token.py
m tokenize D:\tmp\dev_install_root\Python27_x64\lib\tokenize.py
m traceback
m types
m unicodedata D:\tmp\dev_install_root\Python27_x64\DLLs\unicodedata.pyd
P unittest D:\tmp\dev_install_root\Python27_x64\lib\unittest\__init__.py
m unittest.
case
D:\tmp\dev_install_root\Python27_x64\lib\unittest\
case
.py
m unittest.loader D:\tmp\dev_install_root\Python27_x64\lib\unittest\loader.py
m unittest.main D:\tmp\dev_install_root\Python27_x64\lib\unittest\main.py
m unittest.result D:\tmp\dev_install_root\Python27_x64\lib\unittest\result.py
m unittest.runner D:\tmp\dev_install_root\Python27_x64\lib\unittest\runner.py
m unittest.signals D:\tmp\dev_install_root\Python27_x64\lib\unittest\signals.py
m unittest.suite D:\tmp\dev_install_root\Python27_x64\lib\unittest\suite.py
m unittest.util D:\tmp\dev_install_root\Python27_x64\lib\unittest\util.py
m urllib D:\tmp\dev_install_root\Python27_x64\lib\urllib.py
m urlparse D:\tmp\dev_install_root\Python27_x64\lib\urlparse.py
m uu D:\tmp\dev_install_root\Python27_x64\lib\uu.py
m warnings
m weakref
m win32api D:\tmp\dev_install_root\Python27_x64\lib\site-packages\win32\win32api.pyd
m win32con D:\tmp\dev_install_root\Python27_x64\lib\site-packages\win32\lib\win32con.py
m win32pipe D:\tmp\dev_install_root\Python27_x64\lib\site-packages\win32\win32pipe.pyd
P xml D:\tmp\dev_install_root\Python27_x64\lib\xml\__init__.py
P xml.parsers D:\tmp\dev_install_root\Python27_x64\lib\xml\parsers\__init__.py
m xml.parsers.expat D:\tmp\dev_install_root\Python27_x64\lib\xml\parsers\expat.py
P xml.sax D:\tmp\dev_install_root\Python27_x64\lib\xml\sax\__init__.py
m xml.sax._exceptions D:\tmp\dev_install_root\Python27_x64\lib\xml\sax\_exceptions.py
m xml.sax.expatreader D:\tmp\dev_install_root\Python27_x64\lib\xml\sax\expatreader.py
m xml.sax.handler D:\tmp\dev_install_root\Python27_x64\lib\xml\sax\handler.py
m xml.sax.saxutils D:\tmp\dev_install_root\Python27_x64\lib\xml\sax\saxutils.py
m xml.sax.xmlreader D:\tmp\dev_install_root\Python27_x64\lib\xml\sax\xmlreader.py
m zipimport
m zlib
Missing modules:
? BlogBaidu imported from blogstowordpress__main__
? BlogBlogbus imported from blogstowordpress__main__
? BlogCsdn imported from blogstowordpress__main__
? BlogDiandian imported from blogstowordpress__main__
? BlogNetease imported from blogstowordpress__main__
? BlogQQ imported from blogstowordpress__main__
? BlogRenren imported from blogstowordpress__main__
? BlogSina imported from blogstowordpress__main__
? BlogSohu imported from blogstowordpress__main__
? BlogTianya imported from blogstowordpress__main__
? crifanLib imported from blogstowordpress__main__
copying D:\tmp\dev_install_root\Python27_x64\DLLs\_hashlib.pyd -> build\exe.win-amd64-2.7\_hashlib.pyd
copying D:\tmp\dev_install_root\Python27_x64\DLLs\_socket.pyd -> build\exe.win-amd64-2.7\_socket.pyd
copying D:\tmp\dev_install_root\Python27_x64\DLLs\_ssl.pyd -> build\exe.win-amd64-2.7\_ssl.pyd
copying D:\tmp\dev_install_root\Python27_x64\DLLs\bz2.pyd -> build\exe.win-amd64-2.7\bz2.pyd
copying D:\tmp\dev_install_root\Python27_x64\DLLs\pyexpat.pyd -> build\exe.win-amd64-2.7\pyexpat.pyd
copying C:\Windows\system32\pywintypes27.dll -> build\exe.win-amd64-2.7\pywintypes27.dll
copying D:\tmp\dev_install_root\Python27_x64\DLLs\unicodedata.pyd -> build\exe.win-amd64-2.7\unicodedata.pyd
copying D:\tmp\dev_install_root\Python27_x64\lib\site-packages\win32\win32api.pyd -> build\exe.win-amd64-2.7\win32api.pyd
copying D:\tmp\dev_install_root\Python27_x64\lib\site-packages\win32\win32pipe.pyd -> build\exe.win-amd64-2.7\win32pipe.pyd
D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\cx_Freeze>
然后发现了,对应的会生成
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。
- 【转载】用cx_Freeze把Python代码打包成单个独立的exe可执行文件
- 【转载】用PyInstaller把Python代码打包成单个独立的exe可执行文件
- 【转】python学习--用PyInstaller把Python代码打包成单个独立的exe可执行文件
- 用PyInstaller把Python代码打包成单个独立的exe可执行文件
- 用PyInstaller把Python代码打包成单个独立的exe可执行文件
- 用PyInstaller把Python代码打包成单个独立的exe可执行文件
- [转]【记录】用PyInstaller把Python代码打包成单个独立的exe可执行文件
- 用PyInstaller把Python代码打包成单个独立的exe可执行文件
- 用cx_Freeze把python打包成exe可执行文件
- 用cx_Freeze把python打包成exe可执行文件
- 用cx_Freeze把python打包成exe可执行文件
- 用cx_Freeze把python打包成exe可执行文件
- PyInstaller对python脚本进行代码打包成单个独立的exe可执行文件
- 用cx_Freeze打包python成exe的方法
- 用pyinstaller把python源文件打包成exe可执行文件
- windows下使用cx_freeze将Python程序打包成exe可执行文件
- windows下使用cx_freeze将Python程序打包成exe可执行文件
- Python 3基础教程43-cx_Freeze把py文件打包成exe
- 人生本如是迷茫吗
- Codeforces Gym100650E: Reliable Nets
- Java io流学习总结
- 机器学习案例-Quora
- Expected MultipartHttpServletRequest: is a MultipartResolver configured?
- 【转载】用cx_Freeze把Python代码打包成单个独立的exe可执行文件
- 齐一万物,莫强分别
- Linux Vim 基本操作
- 关于使用handler与BroadcastReceiver机制来处理动态改变U线程组件
- 读书笔记之计算机系统(3)
- 关于matlab中get和set的用法 (2)
- android studio使用中遇到的问题记录
- 真人行世,入火不热,沉水不溺
- SQL Server 建立连接时出现与网络相关的或特定于实例的错误