PyInstaller 帶靜態依賴文件打包教程

做者

Author E-mail Blog
冬酒暖陽 mailto:1067764354@qq.com 博客:www.lifepoem.cn

方法一:經過命令行參數

--add-data "欲打包的源文件路徑(能夠是相對路徑,也能夠是絕對路徑);.(打包後對應的程序內的路徑,一個.表明打包至程序運行時根目錄)"

--add-data 參數 能夠屢次使用,注意格式爲引號裏面有一個文件名,有一個分號,一個點。

例: pyinstaller -F --add-data '.\32x32.ico;.' '.\main.py'
複製代碼

方法二:經過修改 spec 打包配置腳本文件

  1. 經過命令生成 spec 文件python

    1. OneFolder 單文件夾模式
    pyi-makespec filename
    # pyi-makespec 後跟欲打包python文件
    複製代碼
    1. OneFile 單文件文件
    pyi-makespec -F filename
    # 與pyinstaller 打包單文件相同,均使用 -F 參數
    # pyi-makespec -F 後跟欲打包python文件
    複製代碼
  2. 修改生成的 spec 文件git

    # -*- mode: python ; coding: utf-8 -*-
    
    block_cipher = None
    a = Analysis(['main.py'],
                 pathex=[],
                 binaries=[],
                 datas=[],
                 hiddenimports=[],
                 hookspath=[],
                 runtime_hooks=[],
                 excludes=[],
                 win_no_prefer_redirects=False,
                 win_private_assemblies=False,
                 cipher=block_cipher,
                 noarchive=False)
    
    # 在 a 中 datas 列表內添加以下格式配置項
    # ('欲打包的源文件路徑(相對、絕對都可)', '.(打包後對應的程序內的路徑,一個.表明打包至程序運行時根目錄)')
    
    # 例如:
    # a = Analysis(['main.py'],
    # pathex=[],
    # binaries=[],
    # datas=[('.\\excel.ico', '.')],
    # hiddenimports=[],
    # hookspath=[],
    # runtime_hooks=[],
    # excludes=[],
    # win_no_prefer_redirects=False,
    # win_private_assemblies=False,
    # cipher=block_cipher,
    # noarchive=False)
    複製代碼

    注意:路徑中須要用 雙反斜槓!!github

  3. 使用該 spec 文件打包shell

    pyinstaller ***.spec
    複製代碼

調用方法

不能在代碼中直接使用相對路徑調用文件

# 先獲取當前運行時臨時目錄路徑
if getattr(sys, 'frozen', None):
    basedir = sys._MEIPASS
else:
    basedir = path.dirname(__file__)
# 使用 os.path.join() 方法,將 臨時目錄路徑與文件相對路徑拼接
with open(path.join(basedir, 'file.txt'), 'r') as fp:
    pass
複製代碼

備註:

  • 單文件模式下,運行可執行文件時,程序會先將可執行文件進行壓縮,壓縮的位置在 /temp目錄 下,再執行,因此被打包進去的數據文件在被解壓的路徑下,而,程序是在運行的路徑下搜索,便可執行文件的目錄下,因此找不到數據文件
相關文章
相關標籤/搜索