Python:程序发布方式简介一(打包为可执行文件EXE)
本文介绍如何使用py2exe来将python源程序打包成文件。以上一篇文章《Python:一个多功能的抓图工具开发(附源码)》中的源程序为例进行讲述。1、下载并安装py2exe,可在www.py2exe.org上下载最新版本。
2、编写安装脚本,比较简单,不过多解释,如下:
Screenshot_setup.py
#!/usr/bin/env python# -*- coding: utf-8 -*-from distutils.core import setup import py2exe includes = ["encodings", "encodings.*"]data_files = ['CameraDll.dll'] options = {"py2exe": { "compressed": 1, "optimize": 2, "bundle_files": 1, "includes": includes} } setup( version = "1.0", description = "Screenshot Tool", name = "ScreenshotTool", options = options, zipfile=None,data_files = data_files,console=[{"script": "Screenshot.py", "icon_resources": [(1, "Screenshot.ico")] }]) 各参数含义见第5小节或执行python命令行下执行help(py2exe)查看。
3、打包程序:
a、将要找包的程序、文件和打包脚本放在同一目录下,如下:
E:\tmp\pyexe_tmp>tree /F文件夹 PATH 列表卷序列号码为 0007F240 101F:F68DE:.CameraDll.dllscreenshot.icoScreenshot.pyscreenshot_setup.py没有子文件夹E:\tmp\pyexe_tmp> b、执行打包脚本:E:\tmp\pyexe_tmp>python screenshot_setup.py py2exepython screenshot_setup.py py2exerunning py2execreating E:\tmp\pyexe_tmp\buildcreating E:\tmp\pyexe_tmp\build\bdist.win32creating E:\tmp\pyexe_tmp\build\bdist.win32\winexecreating E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6creating E:\tmp\pyexe_tmp\build\bdist.win32\winexe\bundle-2.6creating E:\tmp\pyexe_tmp\build\bdist.win32\winexe\tempcreating E:\tmp\pyexe_tmp\dist*** searching for required modules ****** parsing results ****** finding dlls needed ****** create binaries ****** byte compile python files ***writing byte-compilation script 'e:\tmp\tmp1ecbcw.py'C:\Python26\python.exe -OO e:\tmp\tmp1ecbcw.pybyte-compiling C:\Python26\lib\StringIO.py to StringIO.pyobyte-compiling C:\Python26\lib\UserDict.py to UserDict.pyobyte-compiling C:\Python26\lib\__future__.py to __future__.pyobyte-compiling C:\Python26\lib\_abcoll.py to _abcoll.pyobyte-compiling C:\Python26\lib\_strptime.py to _strptime.pyobyte-compiling C:\Python26\lib\_threading_local.py to _threading_local.pyobyte-compiling C:\Python26\lib\abc.py to abc.pyobyte-compiling C:\Python26\lib\atexit.py to atexit.pyobyte-compiling C:\Python26\lib\base64.py to base64.pyobyte-compiling C:\Python26\lib\bdb.py to bdb.pyobyte-compiling C:\Python26\lib\bisect.py to bisect.pyobyte-compiling C:\Python26\lib\calendar.py to calendar.pyobyte-compiling C:\Python26\lib\cmd.py to cmd.pyobyte-compiling C:\Python26\lib\codecs.py to codecs.pyobyte-compiling C:\Python26\lib\collections.py to collections.pyobyte-compiling C:\Python26\lib\colorsys.py to colorsys.pyobyte-compiling C:\Python26\lib\copy.py to copy.pyobyte-compiling C:\Python26\lib\copy_reg.py to copy_reg.pyobyte-compiling C:\Python26\lib\ctypes\__init__.py to ctypes\__init__.pyobyte-compiling C:\Python26\lib\ctypes\_endian.py to ctypes\_endian.pyobyte-compiling C:\Python26\lib\ctypes\wintypes.py to ctypes\wintypes.pyobyte-compiling C:\Python26\lib\difflib.py to difflib.pyobyte-compiling C:\Python26\lib\dis.py to dis.pyobyte-compiling C:\Python26\lib\doctest.py to doctest.pyobyte-compiling C:\Python26\lib\dummy_thread.py to dummy_thread.pyobyte-compiling C:\Python26\lib\encodings\__init__.py to encodings\__init__.pyobyte-compiling C:\Python26\lib\encodings\aliases.py to encodings\aliases.pyobyte-compiling C:\Python26\lib\encodings\ascii.py to encodings\ascii.pyobyte-compiling C:\Python26\lib\encodings\base64_codec.py to encodings\base64_codec.pyobyte-compiling C:\Python26\lib\encodings\big5.py to encodings\big5.pyobyte-compiling C:\Python26\lib\encodings\big5hkscs.py to encodings\big5hkscs.pyobyte-compiling C:\Python26\lib\encodings\bz2_codec.py to encodings\bz2_codec.pyobyte-compiling C:\Python26\lib\encodings\charmap.py to encodings\charmap.pyobyte-compiling C:\Python26\lib\encodings\cp037.py to encodings\cp037.pyobyte-compiling C:\Python26\lib\encodings\cp1006.py to encodings\cp1006.pyobyte-compiling C:\Python26\lib\encodings\cp1026.py to encodings\cp1026.pyobyte-compiling C:\Python26\lib\encodings\cp1140.py to encodings\cp1140.pyobyte-compiling C:\Python26\lib\encodings\cp1250.py to encodings\cp1250.pyobyte-compiling C:\Python26\lib\encodings\cp1251.py to encodings\cp1251.pyobyte-compiling C:\Python26\lib\encodings\cp1252.py to encodings\cp1252.pyobyte-compiling C:\Python26\lib\encodings\cp1253.py to encodings\cp1253.pyobyte-compiling C:\Python26\lib\encodings\cp1254.py to encodings\cp1254.pyobyte-compiling C:\Python26\lib\encodings\cp1255.py to encodings\cp1255.pyobyte-compiling C:\Python26\lib\encodings\cp1256.py to encodings\cp1256.pyobyte-compiling C:\Python26\lib\encodings\cp1257.py to encodings\cp1257.pyobyte-compiling C:\Python26\lib\encodings\cp1258.py to encodings\cp1258.pyobyte-compiling C:\Python26\lib\encodings\cp424.py to encodings\cp424.pyobyte-compiling C:\Python26\lib\encodings\cp437.py to encodings\cp437.pyobyte-compiling C:\Python26\lib\encodings\cp500.py to encodings\cp500.pyobyte-compiling C:\Python26\lib\encodings\cp737.py to encodings\cp737.pyobyte-compiling C:\Python26\lib\encodings\cp775.py to encodings\cp775.pyobyte-compiling C:\Python26\lib\encodings\cp850.py to encodings\cp850.pyobyte-compiling C:\Python26\lib\encodings\cp852.py to encodings\cp852.pyobyte-compiling C:\Python26\lib\encodings\cp855.py to encodings\cp855.pyobyte-compiling C:\Python26\lib\encodings\cp856.py to encodings\cp856.pyobyte-compiling C:\Python26\lib\encodings\cp857.py to encodings\cp857.pyobyte-compiling C:\Python26\lib\encodings\cp860.py to encodings\cp860.pyobyte-compiling C:\Python26\lib\encodings\cp861.py to encodings\cp861.pyobyte-compiling C:\Python26\lib\encodings\cp862.py to encodings\cp862.pyobyte-compiling C:\Python26\lib\encodings\cp863.py to encodings\cp863.pyobyte-compiling C:\Python26\lib\encodings\cp864.py to encodings\cp864.pyobyte-compiling C:\Python26\lib\encodings\cp865.py to encodings\cp865.pyobyte-compiling C:\Python26\lib\encodings\cp866.py to encodings\cp866.pyobyte-compiling C:\Python26\lib\encodings\cp869.py to encodings\cp869.pyobyte-compiling C:\Python26\lib\encodings\cp874.py to encodings\cp874.pyobyte-compiling C:\Python26\lib\encodings\cp875.py to encodings\cp875.pyobyte-compiling C:\Python26\lib\encodings\cp932.py to encodings\cp932.pyobyte-compiling C:\Python26\lib\encodings\cp949.py to encodings\cp949.pyobyte-compiling C:\Python26\lib\encodings\cp950.py to encodings\cp950.pyobyte-compiling C:\Python26\lib\encodings\euc_jis_2004.py to encodings\euc_jis_2004.pyobyte-compiling C:\Python26\lib\encodings\euc_jisx0213.py to encodings\euc_jisx0213.pyobyte-compiling C:\Python26\lib\encodings\euc_jp.py to encodings\euc_jp.pyobyte-compiling C:\Python26\lib\encodings\euc_kr.py to encodings\euc_kr.pyobyte-compiling C:\Python26\lib\encodings\gb18030.py to encodings\gb18030.pyobyte-compiling C:\Python26\lib\encodings\gb2312.py to encodings\gb2312.pyobyte-compiling C:\Python26\lib\encodings\gbk.py to encodings\gbk.pyobyte-compiling C:\Python26\lib\encodings\hex_codec.py to encodings\hex_codec.pyobyte-compiling C:\Python26\lib\encodings\hp_roman8.py to encodings\hp_roman8.pyobyte-compiling C:\Python26\lib\encodings\hz.py to encodings\hz.pyobyte-compiling C:\Python26\lib\encodings\idna.py to encodings\idna.pyobyte-compiling C:\Python26\lib\encodings\iso2022_jp.py to encodings\iso2022_jp.pyobyte-compiling C:\Python26\lib\encodings\iso2022_jp_1.py to encodings\iso2022_jp_1.pyobyte-compiling C:\Python26\lib\encodings\iso2022_jp_2.py to encodings\iso2022_jp_2.pyobyte-compiling C:\Python26\lib\encodings\iso2022_jp_2004.py to encodings\iso2022_jp_2004.pyobyte-compiling C:\Python26\lib\encodings\iso2022_jp_3.py to encodings\iso2022_jp_3.pyobyte-compiling C:\Python26\lib\encodings\iso2022_jp_ext.py to encodings\iso2022_jp_ext.pyobyte-compiling C:\Python26\lib\encodings\iso2022_kr.py to encodings\iso2022_kr.pyobyte-compiling C:\Python26\lib\encodings\iso8859_1.py to encodings\iso8859_1.pyobyte-compiling C:\Python26\lib\encodings\iso8859_10.py to encodings\iso8859_10.pyobyte-compiling C:\Python26\lib\encodings\iso8859_11.py to encodings\iso8859_11.pyobyte-compiling C:\Python26\lib\encodings\iso8859_13.py to encodings\iso8859_13.pyobyte-compiling C:\Python26\lib\encodings\iso8859_14.py to encodings\iso8859_14.pyobyte-compiling C:\Python26\lib\encodings\iso8859_15.py to encodings\iso8859_15.pyobyte-compiling C:\Python26\lib\encodings\iso8859_16.py to encodings\iso8859_16.pyobyte-compiling C:\Python26\lib\encodings\iso8859_2.py to encodings\iso8859_2.pyobyte-compiling C:\Python26\lib\encodings\iso8859_3.py to encodings\iso8859_3.pyobyte-compiling C:\Python26\lib\encodings\iso8859_4.py to encodings\iso8859_4.pyobyte-compiling C:\Python26\lib\encodings\iso8859_5.py to encodings\iso8859_5.pyobyte-compiling C:\Python26\lib\encodings\iso8859_6.py to encodings\iso8859_6.pyobyte-compiling C:\Python26\lib\encodings\iso8859_7.py to encodings\iso8859_7.pyobyte-compiling C:\Python26\lib\encodings\iso8859_8.py to encodings\iso8859_8.pyobyte-compiling C:\Python26\lib\encodings\iso8859_9.py to encodings\iso8859_9.pyobyte-compiling C:\Python26\lib\encodings\johab.py to encodings\johab.pyobyte-compiling C:\Python26\lib\encodings\koi8_r.py to encodings\koi8_r.pyobyte-compiling C:\Python26\lib\encodings\koi8_u.py to encodings\koi8_u.pyobyte-compiling C:\Python26\lib\encodings\latin_1.py to encodings\latin_1.pyobyte-compiling C:\Python26\lib\encodings\mac_arabic.py to encodings\mac_arabic.pyobyte-compiling C:\Python26\lib\encodings\mac_centeuro.py to encodings\mac_centeuro.pyobyte-compiling C:\Python26\lib\encodings\mac_croatian.py to encodings\mac_croatian.pyobyte-compiling C:\Python26\lib\encodings\mac_cyrillic.py to encodings\mac_cyrillic.pyobyte-compiling C:\Python26\lib\encodings\mac_farsi.py to encodings\mac_farsi.pyobyte-compiling C:\Python26\lib\encodings\mac_greek.py to encodings\mac_greek.pyobyte-compiling C:\Python26\lib\encodings\mac_iceland.py to encodings\mac_iceland.pyobyte-compiling C:\Python26\lib\encodings\mac_latin2.py to encodings\mac_latin2.pyobyte-compiling C:\Python26\lib\encodings\mac_roman.py to encodings\mac_roman.pyobyte-compiling C:\Python26\lib\encodings\mac_romanian.py to encodings\mac_romanian.pyobyte-compiling C:\Python26\lib\encodings\mac_turkish.py to encodings\mac_turkish.pyobyte-compiling C:\Python26\lib\encodings\mbcs.py to encodings\mbcs.pyobyte-compiling C:\Python26\lib\encodings\palmos.py to encodings\palmos.pyobyte-compiling C:\Python26\lib\encodings\ptcp154.py to encodings\ptcp154.pyobyte-compiling C:\Python26\lib\encodings\punycode.py to encodings\punycode.pyobyte-compiling C:\Python26\lib\encodings\quopri_codec.py to encodings\quopri_codec.pyobyte-compiling C:\Python26\lib\encodings\raw_unicode_escape.py to encodings\raw_unicode_escape.pyobyte-compiling C:\Python26\lib\encodings\rot_13.py to encodings\rot_13.pyobyte-compiling C:\Python26\lib\encodings\shift_jis.py to encodings\shift_jis.pyobyte-compiling C:\Python26\lib\encodings\shift_jis_2004.py to encodings\shift_jis_2004.pyobyte-compiling C:\Python26\lib\encodings\shift_jisx0213.py to encodings\shift_jisx0213.pyobyte-compiling C:\Python26\lib\encodings\string_escape.py to encodings\string_escape.pyobyte-compiling C:\Python26\lib\encodings\tis_620.py to encodings\tis_620.pyobyte-compiling C:\Python26\lib\encodings\undefined.py to encodings\undefined.pyobyte-compiling C:\Python26\lib\encodings\unicode_escape.py to encodings\unicode_escape.pyobyte-compiling C:\Python26\lib\encodings\unicode_internal.py to encodings\unicode_internal.pyobyte-compiling C:\Python26\lib\encodings\utf_16.py to encodings\utf_16.pyobyte-compiling C:\Python26\lib\encodings\utf_16_be.py to encodings\utf_16_be.pyobyte-compiling C:\Python26\lib\encodings\utf_16_le.py to encodings\utf_16_le.pyobyte-compiling C:\Python26\lib\encodings\utf_32.py to encodings\utf_32.pyobyte-compiling C:\Python26\lib\encodings\utf_32_be.py to encodings\utf_32_be.pyobyte-compiling C:\Python26\lib\encodings\utf_32_le.py to encodings\utf_32_le.pyobyte-compiling C:\Python26\lib\encodings\utf_7.py to encodings\utf_7.pyobyte-compiling C:\Python26\lib\encodings\utf_8.py to encodings\utf_8.pyobyte-compiling C:\Python26\lib\encodings\utf_8_sig.py to encodings\utf_8_sig.pyobyte-compiling C:\Python26\lib\encodings\uu_codec.py to encodings\uu_codec.pyobyte-compiling C:\Python26\lib\encodings\zlib_codec.py to encodings\zlib_codec.pyobyte-compiling C:\Python26\lib\functools.py to functools.pyobyte-compiling C:\Python26\lib\genericpath.py to genericpath.pyobyte-compiling C:\Python26\lib\getopt.py to getopt.pyobyte-compiling C:\Python26\lib\gettext.py to gettext.pyobyte-compiling C:\Python26\lib\heapq.py to heapq.pyobyte-compiling C:\Python26\lib\inspect.py to inspect.pyobyte-compiling C:\Python26\lib\keyword.py to keyword.pyobyte-compiling C:\Python26\lib\linecache.py to linecache.pyobyte-compiling C:\Python26\lib\locale.py to locale.pyobyte-compiling C:\Python26\lib\new.py to new.pyobyte-compiling C:\Python26\lib\ntpath.py to ntpath.pyobyte-compiling C:\Python26\lib\opcode.py to opcode.pyobyte-compiling C:\Python26\lib\optparse.py to optparse.pyobyte-compiling C:\Python26\lib\os.py to os.pyobyte-compiling C:\Python26\lib\os2emxpath.py to os2emxpath.pyobyte-compiling C:\Python26\lib\pdb.py to pdb.pyobyte-compiling C:\Python26\lib\pickle.py to pickle.pyobyte-compiling C:\Python26\lib\posixpath.py to posixpath.pyobyte-compiling C:\Python26\lib\pprint.py to pprint.pyobyte-compiling C:\Python26\lib\pyhk.py to pyhk.pyobyte-compiling C:\Python26\lib\quopri.py to quopri.pyobyte-compiling C:\Python26\lib\random.py to random.pyobyte-compiling C:\Python26\lib\re.py to re.pyobyte-compiling C:\Python26\lib\repr.py to repr.pyobyte-compiling C:\Python26\lib\shlex.py to shlex.pyobyte-compiling C:\Python26\lib\site-packages\PIL\BmpImagePlugin.py to PIL\BmpImagePlugin.pyobyte-compiling C:\Python26\lib\site-packages\PIL\GifImagePlugin.py to PIL\GifImagePlugin.pyobyte-compiling C:\Python26\lib\site-packages\PIL\GimpGradientFile.py to PIL\GimpGradientFile.pyobyte-compiling C:\Python26\lib\site-packages\PIL\GimpPaletteFile.py to PIL\GimpPaletteFile.pyobyte-compiling C:\Python26\lib\site-packages\PIL\Image.py to PIL\Image.pyobyte-compiling C:\Python26\lib\site-packages\PIL\ImageChops.py to PIL\ImageChops.pyobyte-compiling C:\Python26\lib\site-packages\PIL\ImageColor.py to PIL\ImageColor.pyobyte-compiling C:\Python26\lib\site-packages\PIL\ImageFile.py to PIL\ImageFile.pyobyte-compiling C:\Python26\lib\site-packages\PIL\ImageGrab.py to PIL\ImageGrab.pyobyte-compiling C:\Python26\lib\site-packages\PIL\ImageMode.py to PIL\ImageMode.pyobyte-compiling C:\Python26\lib\site-packages\PIL\ImagePalette.py to PIL\ImagePalette.pyobyte-compiling C:\Python26\lib\site-packages\PIL\ImageShow.py to PIL\ImageShow.pyobyte-compiling C:\Python26\lib\site-packages\PIL\JpegImagePlugin.py to PIL\JpegImagePlugin.pyobyte-compiling C:\Python26\lib\site-packages\PIL\PaletteFile.py to PIL\PaletteFile.pyobyte-compiling C:\Python26\lib\site-packages\PIL\PngImagePlugin.py to PIL\PngImagePlugin.pyobyte-compiling C:\Python26\lib\site-packages\PIL\PpmImagePlugin.py to PIL\PpmImagePlugin.pyobyte-compiling C:\Python26\lib\site-packages\PIL\TiffImagePlugin.py to PIL\TiffImagePlugin.pyobyte-compiling C:\Python26\lib\site-packages\PIL\TiffTags.py to PIL\TiffTags.pyobyte-compiling C:\Python26\lib\site-packages\PIL\__init__.py to PIL\__init__.pyobyte-compiling C:\Python26\lib\site-packages\pyHook\HookManager.py to pyHook\HookManager.pyobyte-compiling C:\Python26\lib\site-packages\pyHook\__init__.py to pyHook\__init__.pyobyte-compiling C:\Python26\lib\site-packages\pyHook\cpyHook.py to pyHook\cpyHook.pyobyte-compiling C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\__init__.py to wx\__init__.pyobyte-compiling C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\__version__.py to wx\__version__.pyobyte-compiling C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_controls.py to wx\_controls.pyobyte-compiling C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_core.py to wx\_core.pyobyte-compiling C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_gdi.py to wx\_gdi.pyobyte-compiling C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_misc.py to wx\_misc.pyobyte-compiling C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_windows.py to wx\_windows.pyobyte-compiling C:\Python26\lib\site-packages\zipextimporter.py to zipextimporter.pyobyte-compiling C:\Python26\lib\sre.py to sre.pyobyte-compiling C:\Python26\lib\sre_compile.py to sre_compile.pyobyte-compiling C:\Python26\lib\sre_constants.py to sre_constants.pyobyte-compiling C:\Python26\lib\sre_parse.py to sre_parse.pyobyte-compiling C:\Python26\lib\stat.py to stat.pyobyte-compiling C:\Python26\lib\string.py to string.pyobyte-compiling C:\Python26\lib\stringprep.py to stringprep.pyobyte-compiling C:\Python26\lib\struct.py to struct.pyobyte-compiling C:\Python26\lib\subprocess.py to subprocess.pyobyte-compiling C:\Python26\lib\tempfile.py to tempfile.pyobyte-compiling C:\Python26\lib\textwrap.py to textwrap.pyobyte-compiling C:\Python26\lib\threading.py to threading.pyobyte-compiling C:\Python26\lib\token.py to token.pyobyte-compiling C:\Python26\lib\tokenize.py to tokenize.pyobyte-compiling C:\Python26\lib\traceback.py to traceback.pyobyte-compiling C:\Python26\lib\types.py to types.pyobyte-compiling C:\Python26\lib\unittest.py to unittest.pyobyte-compiling C:\Python26\lib\warnings.py to warnings.pyoC:\Python26\lib\site-packages\py2exe\build_exe.py:16: DeprecationWarning: the sets module is deprecatedimport setsremoving e:\tmp\tmp1ecbcw.py*** copy extensions ***copying C:\Python26\DLLs\_ctypes.pyd -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6copying C:\Python26\DLLs\bz2.pyd -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6copying C:\Python26\DLLs\select.pyd -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6copying C:\Python26\DLLs\unicodedata.pyd -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6copying C:\Python26\lib\site-packages\PIL\_imaging.pyd -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6\PILcopying C:\Python26\lib\site-packages\pyHook\_cpyHook.pyd -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6\pyHookcopying C:\Python26\lib\site-packages\win32\_win32sysloader.pyd -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6copying C:\Python26\lib\site-packages\win32\win32gui.pyd -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6copying C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_controls_.pyd -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6\wxcopying C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_core_.pyd -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6\wxcopying C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_gdi_.pyd -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6\wxcopying C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_misc_.pyd -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6\wxcopying C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_windows_.pyd -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6\wx*** copy dlls ***copying C:\WINDOWS\system32\python26.dll -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\bundle-2.6setting sys.winver for 'E:\tmp\pyexe_tmp\build\bdist.win32\winexe\bundle-2.6\python26.dll' to 'ScreenshotTool'copying C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\wxbase28uh_vc.dll -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6copying C:\WINDOWS\system32\pythoncom26.dll -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6copying C:\WINDOWS\system32\pywintypes26.dll -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6copying C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\wxmsw28uh_core_vc.dll -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6copying C:\Python26\w9xpopen.exe -> E:\tmp\pyexe_tmp\distcopying C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\wxbase28uh_net_vc.dll -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6copying C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\wxmsw28uh_adv_vc.dll -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6copying C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\wxmsw28uh_html_vc.dll -> E:\tmp\pyexe_tmp\build\bdist.win32\winexe\collect-2.6*** copy data files ***copying CameraDll.dll -> E:\tmp\pyexe_tmp\distcopying C:\Python26\lib\site-packages\py2exe\run.exe -> E:\tmp\pyexe_tmp\dist\Screenshot.exeAdding python26.dll as resource to E:\tmp\pyexe_tmp\dist\Screenshot.exeThe following modules appear to be missing['ICCProfile', '_grabscreen', '_imaging_gif']*** binary dependencies ***Your executable(s) also depend on these dlls which are not included,you may or may not need to distribute them.Make sure you have the license if you distribute any of them, andmake sure you don't distribute files belonging to the operating system.OLEAUT32.dll - C:\WINDOWS\system32\OLEAUT32.dllUSER32.dll - C:\WINDOWS\system32\USER32.dllSHELL32.dll - C:\WINDOWS\system32\SHELL32.dllole32.dll - C:\WINDOWS\system32\ole32.dllCOMDLG32.dll - C:\WINDOWS\system32\COMDLG32.dllWSOCK32.dll - C:\WINDOWS\system32\WSOCK32.dllCOMCTL32.dll - C:\WINDOWS\system32\COMCTL32.dllWINMM.dll - C:\WINDOWS\system32\WINMM.dllmsvcrt.dll - C:\WINDOWS\system32\msvcrt.dllADVAPI32.dll - C:\WINDOWS\system32\ADVAPI32.dllGDI32.dll - C:\WINDOWS\system32\GDI32.dllRPCRT4.dll - C:\WINDOWS\system32\RPCRT4.dllKERNEL32.dll - C:\WINDOWS\system32\KERNEL32.dllgdiplus.dll - C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\gdiplus.dllMSVCP90.dll - C:\WINDOWS\system32\MSVCP90.dllC:\Python26\lib\site-packages\py2exe\build_exe.py:16: DeprecationWarning: the sets module is deprecatedimport setswarning: install_data: setup script did not provide a directory for 'CameraDll.dll' -- installing right in 'E:\tmp\pyexe_tmp\dist'E:\tmp\pyexe_tmp>
如果打包时提示缺少dll文件,如msvcp90.dll,在网上下载一个放入python安装目录的子目录dlls中即可(如:C:\Python26\DLLs)
c、打包完成后的目录结构如下:
E:\tmp\pyexe_tmp>tree /F文件夹 PATH 列表卷序列号码为 0007F240 101F:F68DE:.│CameraDll.dll│screenshot.ico│screenshot.py│screenshot_setup.py│├─build│└─bdist.win32│ └─winexe│ ├─bundle-2.6│ │ python26.dll│ ││ ├─collect-2.6│ ││abc.pyo│ ││atexit.pyo│ ││base64.pyo│ ││bdb.pyo│ ││bisect.pyo│ ││bz2.pyd│ ││calendar.pyo│ ││cmd.pyo│ ││codecs.pyo│ ││collections.pyo│ ││colorsys.pyo│ ││copy.pyo│ ││copy_reg.pyo│ ││difflib.pyo│ ││dis.pyo│ ││doctest.pyo│ ││dummy_thread.pyo│ ││functools.pyo│ ││genericpath.pyo│ ││getopt.pyo│ ││gettext.pyo│ ││heapq.pyo│ ││inspect.pyo│ ││keyword.pyo│ ││linecache.pyo│ ││locale.pyo│ ││new.pyo│ ││ntpath.pyo│ ││opcode.pyo│ ││optparse.pyo│ ││os.pyo│ ││os2emxpath.pyo│ ││pdb.pyo│ ││pickle.pyo│ ││posixpath.pyo│ ││pprint.pyo│ ││pyhk.pyo│ ││pythoncom26.dll│ ││pywintypes26.dll│ ││quopri.pyo│ ││random.pyo│ ││re.pyo│ ││repr.pyo│ ││select.pyd│ ││shlex.pyo│ ││sre.pyo│ ││sre_compile.pyo│ ││sre_constants.pyo│ ││sre_parse.pyo│ ││stat.pyo│ ││string.pyo│ ││StringIO.pyo│ ││stringprep.pyo│ ││struct.pyo│ ││subprocess.pyo│ ││tempfile.pyo│ ││textwrap.pyo│ ││threading.pyo│ ││token.pyo│ ││tokenize.pyo│ ││traceback.pyo│ ││types.pyo│ ││unicodedata.pyd│ ││unittest.pyo│ ││UserDict.pyo│ ││warnings.pyo│ ││win32gui.pyd│ ││wxbase28uh_net_vc.dll│ ││wxbase28uh_vc.dll│ ││wxmsw28uh_adv_vc.dll│ ││wxmsw28uh_core_vc.dll│ ││wxmsw28uh_html_vc.dll│ ││zipextimporter.pyo│ ││_abcoll.pyo│ ││_ctypes.pyd│ ││_strptime.pyo│ ││_threading_local.pyo│ ││_win32sysloader.pyd│ ││__future__.pyo│ │││ │├─ctypes│ ││ wintypes.pyo│ ││ _endian.pyo│ ││ __init__.pyo│ │││ │├─encodings│ ││ aliases.pyo│ ││ ascii.pyo│ ││ base64_codec.pyo│ ││ big5.pyo│ ││ big5hkscs.pyo│ ││ bz2_codec.pyo│ ││ charmap.pyo│ ││ cp037.pyo│ ││ cp1006.pyo│ ││ cp1026.pyo│ ││ cp1140.pyo│ ││ cp1250.pyo│ ││ cp1251.pyo│ ││ cp1252.pyo│ ││ cp1253.pyo│ ││ cp1254.pyo│ ││ cp1255.pyo│ ││ cp1256.pyo│ ││ cp1257.pyo│ ││ cp1258.pyo│ ││ cp424.pyo│ ││ cp437.pyo│ ││ cp500.pyo│ ││ cp737.pyo│ ││ cp775.pyo│ ││ cp850.pyo│ ││ cp852.pyo│ ││ cp855.pyo│ ││ cp856.pyo│ ││ cp857.pyo│ ││ cp860.pyo│ ││ cp861.pyo│ ││ cp862.pyo│ ││ cp863.pyo│ ││ cp864.pyo│ ││ cp865.pyo│ ││ cp866.pyo│ ││ cp869.pyo│ ││ cp874.pyo│ ││ cp875.pyo│ ││ cp932.pyo│ ││ cp949.pyo│ ││ cp950.pyo│ ││ euc_jisx0213.pyo│ ││ euc_jis_2004.pyo│ ││ euc_jp.pyo│ ││ euc_kr.pyo│ ││ gb18030.pyo│ ││ gb2312.pyo│ ││ gbk.pyo│ ││ hex_codec.pyo│ ││ hp_roman8.pyo│ ││ hz.pyo│ ││ idna.pyo│ ││ iso2022_jp.pyo│ ││ iso2022_jp_1.pyo│ ││ iso2022_jp_2.pyo│ ││ iso2022_jp_2004.pyo│ ││ iso2022_jp_3.pyo│ ││ iso2022_jp_ext.pyo│ ││ iso2022_kr.pyo│ ││ iso8859_1.pyo│ ││ iso8859_10.pyo│ ││ iso8859_11.pyo│ ││ iso8859_13.pyo│ ││ iso8859_14.pyo│ ││ iso8859_15.pyo│ ││ iso8859_16.pyo│ ││ iso8859_2.pyo│ ││ iso8859_3.pyo│ ││ iso8859_4.pyo│ ││ iso8859_5.pyo│ ││ iso8859_6.pyo│ ││ iso8859_7.pyo│ ││ iso8859_8.pyo│ ││ iso8859_9.pyo│ ││ johab.pyo│ ││ koi8_r.pyo│ ││ koi8_u.pyo│ ││ latin_1.pyo│ ││ mac_arabic.pyo│ ││ mac_centeuro.pyo│ ││ mac_croatian.pyo│ ││ mac_cyrillic.pyo│ ││ mac_farsi.pyo│ ││ mac_greek.pyo│ ││ mac_iceland.pyo│ ││ mac_latin2.pyo│ ││ mac_roman.pyo│ ││ mac_romanian.pyo│ ││ mac_turkish.pyo│ ││ mbcs.pyo│ ││ palmos.pyo│ ││ ptcp154.pyo│ ││ punycode.pyo│ ││ quopri_codec.pyo│ ││ raw_unicode_escape.pyo│ ││ rot_13.pyo│ ││ shift_jis.pyo│ ││ shift_jisx0213.pyo│ ││ shift_jis_2004.pyo│ ││ string_escape.pyo│ ││ tis_620.pyo│ ││ undefined.pyo│ ││ unicode_escape.pyo│ ││ unicode_internal.pyo│ ││ utf_16.pyo│ ││ utf_16_be.pyo│ ││ utf_16_le.pyo│ ││ utf_32.pyo│ ││ utf_32_be.pyo│ ││ utf_32_le.pyo│ ││ utf_7.pyo│ ││ utf_8.pyo│ ││ utf_8_sig.pyo│ ││ uu_codec.pyo│ ││ zlib_codec.pyo│ ││ __init__.pyo│ │││ │├─PIL│ ││ BmpImagePlugin.pyo│ ││ GifImagePlugin.pyo│ ││ GimpGradientFile.pyo│ ││ GimpPaletteFile.pyo│ ││ Image.pyo│ ││ ImageChops.pyo│ ││ ImageColor.pyo│ ││ ImageFile.pyo│ ││ ImageGrab.pyo│ ││ ImageMode.pyo│ ││ ImagePalette.pyo│ ││ ImageShow.pyo│ ││ JpegImagePlugin.pyo│ ││ PaletteFile.pyo│ ││ PngImagePlugin.pyo│ ││ PpmImagePlugin.pyo│ ││ TiffImagePlugin.pyo│ ││ TiffTags.pyo│ ││ _imaging.pyd│ ││ __init__.pyo│ │││ │├─pyHook│ ││ cpyHook.pyo│ ││ HookManager.pyo│ ││ _cpyHook.pyd│ ││ __init__.pyo│ │││ │└─wx│ │ _controls.pyo│ │ _controls_.pyd│ │ _core.pyo│ │ _core_.pyd│ │ _gdi.pyo│ │ _gdi_.pyd│ │ _misc.pyo│ │ _misc_.pyd│ │ _windows.pyo│ │ _windows_.pyd│ │ __init__.pyo│ │ __version__.pyo│ ││ └─temp└─distCameraDll.dllRCXBC.tmpScreenshot.exew9xpopen.exeE:\tmp\pyexe_tmp> 我们只需要发布dist 子目录下的Screenshot.exe和CameraDLL.dll即可,包含dll的原因是screenshot.py中调用了这个dll文件。
4、附一个功能完整的打包程序,原文件见:http://www.blog.pythonlibrary.org/2010/07/31/a-py2exe-tutorial-build-a-binary-series/
from distutils.core import setupimport py2exeincludes = []excludes = ['_gtkagg', '_tkagg', 'bsddb', 'curses', 'email', 'pywin.debugger','pywin.debugger.dbgcon', 'pywin.dialogs', 'tcl','Tkconstants', 'Tkinter']packages = []dll_excludes = ['libgdk-win32-2.0-0.dll', 'libgobject-2.0-0.dll', 'tcl84.dll','tk84.dll']setup(options = {"py2exe": {"compressed": 2,"optimize": 2,"includes": includes,"excludes": excludes,"packages": packages,"dll_excludes": dll_excludes,"bundle_files": 3,"dist_dir": "dist","xref": False,"skip_archive": False,"ascii": False,"custom_boot_script": '',}},windows=['sampleApp.py']) 5、各参数简介:
E:\tmp\pyexe_tmp>python screenshot_setup.py --help py2exeC:\Python26\lib\site-packages\py2exe\build_exe.py:16: DeprecationWarning: the sets module is deprecatedimport setsCommon commands: (see '--help-commands' for more)setup.py build will build the package underneath 'build/'setup.py install will install the packageGlobal options:--verbose (-v)run verbosely (default)--quiet (-q) run quietly (turns verbosity off)--dry-run (-n)don't actually do anything--help (-h) show detailed help messageOptions for 'py2exe' command:--optimize (-O) optimization level: -O1 for "python -O", -O2 for"python -OO", and -O0 to disable --dist-dir (-d) directory to put final built distributions in (defaultis dist)--excludes (-e) comma-separated list of modules to exclude--dll-excludes comma-separated list of DLLs to exclude--ignores comma-separated list of modules to ignore if they arenot found--includes (-i) comma-separated list of modules to include--packages (-p) comma-separated list of packages to include--compressed (-c) create a compressed zipfile--xref (-x) create and show a module cross reference--bundle-files (-b) bundle dlls in the zipfile or the exe. Valid levelsare 1, 2, or 3 (default)--skip-archive do not place Python bytecode files in an archive, putthem directly in the file system--ascii (-a) do not automatically include encodings and codecs--custom-boot-scriptPython file that will be run when setting up theruntime environmentusage: screenshot_setup.py cmd1 ...]or: screenshot_setup.py --help or: screenshot_setup.py --help-commandsor: screenshot_setup.py cmd --helpE:\tmp\pyexe_tmp>
下一篇文章讲解如何使python源文件打包为windows服务。
页:
[1]