pyinstaller打包文件

打包命令

pyinstaller能夠將python代碼打包爲可執行的exe文件,通常應用只須要使用以下命令: python

C:\Python27\python.exe C:\pyinstaller-2.0\pyinstaller.py src\wgClient.py
執行該命令後將在當前目錄下生成build和dist文件夾,另外還會生成一個wgClient.spec文件,用於描述pyinstall的打包過程,若是對打包有特殊要求時,能夠直接編輯spec文件,而後將spec文件做爲打包時的輸入對象:
C:\Python27\python.exe C:\pyinstaller-2.0\pyinstaller.py wgClient.spec

spec文件

下面附上一段spec文件的示例代碼,結合示例說明一些打包過程當中的一些特殊要求: shell

# -*- mode: python -*-
a = Analysis(['src\\wgClient.py'],
             pathex=['D:\\PycharmProjects\\wgClientPy'],
             hiddenimports=[],
             hookspath=None)
pyz = PYZ(a.pure)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [('logging.conf', 'src/logging.conf', 'DATA')],
          [('clr.pyd', 'C:\\Python27\DLLs\\clr.pyd', 'EXTENSION'),
            ('Python.Runtime.dll', 'C:\\Python27\DLLs\\Python.Runtime.dll', 'BINARY'),
            ('Python.Runtime.pdb', 'C:\\Python27\DLLs\\Python.Runtime.pdb', 'BINARY'),
            ('n3kAdrtB.dll', 'src\\n3kAdrtB.dll', 'BINARY') ],
          name=os.path.join('build\\pyi.win32\\wgClient', 'wgClient.exe'),
          debug=False,
          strip=None,
          upx=True,
          console=True )
coll = COLLECT(exe,
               [('config.ini', 'src/config.ini', 'DATA')],
               strip=None,
               upx=True,
               name='dist')

上面的Analysis、PYZ、EXE、COLLECT都是事先定義的子任務。 字體

Analysis

用於定義python源文件,包括搜索路徑,源文件名稱等。Analysis有5個輸出項,可供其餘子任務引用: ui

  • scripts:在Analysis中定義的源文件
  • pure:python模塊
  • binaries:動態庫
  • datas:數據文件,能夠是任意文件類型,例如ini配置文件、字體文件、圖片等
  • zipfiles:zip格式的依賴文件,通常是egg格式的庫文件

PYZ

將python文件壓縮打包,輸入通常是Analysis.pure. spa

EXE

打包生成exe文件,從上面的例子中能夠看出,EXE子任務包含了Analysis的全部5個輸出項(pure被PYZ打包了),另外還包含程序運行所需的一些配置文件和動態庫,這些不在Analysis輸出項中的文件是經過TOC格式來配置的,TOC(Table Of Contents),TPC其實就是一個tuple,格式爲(name, path, typecode),其中typecode能夠爲如下值: debug

  • 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

用來構建最終的生成目錄,能夠複製其餘子任務生成的結果,並拷貝到指定目錄,造成最終的打包結果。 code

示例中的spec文件,會在dist目錄下生成一個wgClient.exe的能夠執行文件,裏面包含全部的依賴項,能夠獨立運行,同時該目錄下還有config.ini配置文件。 對象

文件路徑

上例中,將logging.conf文件直接打包在exe內部了,python在讀取時應使用如下方式讀取文件路徑: 圖片

if getattr(sys, 'frozen', None):
    basedir = sys._MEIPASS
else:
    basedir = os.path.dirname(__file__)

logging.config.fileConfig(os.path.join(basedir, 'logging.conf'))
相關文章
相關標籤/搜索