Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2339349
  • 博文数量: 321
  • 博客积分: 3440
  • 博客等级: 中校
  • 技术积分: 2992
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-24 09:08
个人简介

我就在这里

文章分类

全部博文(321)

文章存档

2015年(9)

2014年(84)

2013年(101)

2012年(25)

2011年(29)

2010年(21)

2009年(6)

2008年(23)

2007年(23)

分类: Python/Ruby

2013-11-11 23:48:02

打包命令

pyinstaller可以将python代码打包为可执行的exe文件,一般应用只需要使用如下命令:

  1. C:\Python27\python.exe C:\pyinstaller-2.0\pyinstaller.py src\wgClient.py


执行该命令后将在当前目录下生成build和dist文件夹,另外还会生成一个wgClient.spec文件,用于描述pyinstall的打包过程,如果对打包有特殊要求时,可以直接编辑spec文件,然后将spec文件作为打包时的输入对象:

  1. C:\Python27\python.exe C:\pyinstaller-2.0\pyinstaller.py wgClient.spec


spec文件


下面附上一段spec文件的示例代码,结合示例说明一些打包过程中的一些特殊要求:

  1. # -*- mode: python -*-
  2.     a = Analysis(['src\\wgClient.py'],
  3.      pathex=['D:\\PycharmProjects\\wgClientPy'],
  4.      hiddenimports=[],
  5.      hookspath=None)
  6.     pyz = PYZ(a.pure)
  7.     exe = EXE(pyz,
  8.      a.scripts,
  9.      a.binaries,
  10.      a.zipfiles,
  11.      a.datas,
  12.      [('logging.conf', 'src/logging.conf', 'DATA')],
  13.      [('clr.pyd', 'C:\\Python27\DLLs\\clr.pyd', 'EXTENSION'),
  14.      ('Python.Runtime.dll', 'C:\\Python27\DLLs\\Python.Runtime.dll', 'BINARY'),
  15.      ('Python.Runtime.pdb', 'C:\\Python27\DLLs\\Python.Runtime.pdb', 'BINARY'),
  16.      ('n3kAdrtB.dll', 'src\\n3kAdrtB.dll', 'BINARY') ],
  17.      name=os.path.join('build\\pyi.win32\\wgClient', 'wgClient.exe'),
  18.      debug=False,
  19.      strip=None,
  20.      upx=True,
  21.      console=True )
  22.     coll = COLLECT(exe,
  23.      [('config.ini', 'src/config.ini', 'DATA')],
  24.      strip=None,
  25.      upx=True,
  26.      name='dist')


上面的Analysis、PYZ、EXE、COLLECT都是事先定义的子任务。


Analysis

用于定义python源文件,包括搜索路径,源文件名称等。Analysis有5个输出项,可供其他子任务引用:

  • scripts:在Analysis中定义的源文件
  • pure:python模块
  • binaries:动态库
  • datas:数据文件,可以是任意文件类型,例如ini配置文件、字体文件、图片等
  • zipfiles:zip格式的依赖文件,一般是egg格式的库文件

PYZ

将python文件压缩打包,输入一般是Analysis.pure.

EXE

打包生成exe文件,从上面的例子中可以看出,EXE子任务包含了Analysis的所有5个输出项(pure被PYZ打包了),另外还包含程序运行所需的一些配置文件和动态库,这些不在Analysis输出项中的文件是通过TOC格式来配置的,TOC(Table Of Contents),TPC其实就是一个tuple,格式为(name, path, typecode),其中typecode可以为以下值:

  • EXTENSION:python的扩展库
  • PYSOURCE:python脚本
  • PYMODULE:A pure Python module (including __init__modules).
  • PYZ:A .pyz archive (archive_rt.ZlibArchive)
  • PKG:A pkg archive (carchive4.CArchive)
  • BINARY:动态库
  • DATA:数据文件
  • OPTION:A runtime runtime option (frozen into theexecutable).

COLLECT

用来构建最终的生成目录,可以复制其他子任务生成的结果,并拷贝到指定目录,形成最终的打包结果。

示例中的spec文件,会在dist目录下生成一个wgClient.exe的可以执行文件,里面包含所有的依赖项,可以独立运行,同时该目录下还有config.ini配置文件。

文件路径

上例中,将logging.conf文件直接打包在exe内部了,python在读取时应使用以下方式读取文件路径:

  1. if getattr(sys, 'frozen', None):
  2.      basedir = sys._MEIPASS
  3. else:
  4.      basedir = os.path.dirname(__file__)
  5. logging.config.fileConfig(os.path.join(basedir, 'logging.conf'))

阅读(7898) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~