pyinstaller打包python成exe文件(不同文件夾多文件)


最近需要打包一個python項目成exe文件,里面有3個文件夾,和1個共享文件夾,所以需要打包多個py文件,還需要包含共享文件夾中的py文件。總之就是要將不同文件夾下的多個py文件打包。

通過了解,這里選擇使用pyinstaller庫來打包。

安裝pyinstaller:

pip install pyinstaller

有兩個打包方式:

  1. 使用命令行方式

    pyinstaller [主文件] -p [其他文件1] -p [其他文件2] --hidden-import [自建模塊1] --hidden-import [自建模塊2]
    

    如果在py文件很多的情況下,這個方法並不好。

  2. 使用spec方式

    1. 打開終端進入項目路徑下,輸入 pyinstaller -F -c docx2xml.py(項目主文件) 。執行后,會在當前目錄下生成兩個文件夾(build和dist)和1個文件 docx2xml.spec 。刪除那兩個文件夾,只保留 docx2xml.spec

      做個說明,這里的 pyinstaller -F -c docx2xml.py(項目主文件) 可以寫成 pyinstaller -F -w docx2xml.py(項目主文件)。只不過 -c 的在執行打包后的exe文件時會帶控制台,也就是DOS窗口,而 -w 不帶控制台。在第一次打包時,如果程序打包后有錯誤,用 -c 的可以在執行打包后的exe文件時直觀地看到程序報錯信息。

    2. 根據自己的項目編輯該文件

      # -*- mode: python ; coding: utf-8 -*-
      
      
      block_cipher = None
      
      #此項目中所有的py文件(要打包進去的所有py文件),和主程序不在同一個包中的py文件用絕對路徑。
      a = Analysis(['docx2xml.py','content.py','extract.py','head.py','image.py','processXml.py',
                      'D:/Desktop/PaperSystem-Python/lib/log.py',
                      'D:/Desktop/PaperSystem-Python/lib/misc.py',
                      'D:/Desktop/PaperSystem-Python/lib/procXml.py',
                      'D:/Desktop/PaperSystem-Python/lib/styleEnum.py',
                  ],
                   pathex=['D:/Desktop/PaperSystem-Python/doc2xml'],	# 項目的絕對路徑
                   binaries=[],
                   datas=[],
                   hiddenimports=[],
                   hookspath=[],
                   hooksconfig={},
                   runtime_hooks=[],
                   excludes=[],
                   win_no_prefer_redirects=False,
                   win_private_assemblies=False,
                   cipher=block_cipher,
                   noarchive=False)
      pyz = PYZ(a.pure, a.zipped_data,
                   cipher=block_cipher)
      
      exe = EXE(pyz,
                a.scripts,
                a.binaries,
                a.zipfiles,
                a.datas,  
                [],
                name='docx2xml',	#打包程序的名字
                debug=False,
                bootloader_ignore_signals=False,
                strip=False,
                upx=True,
                upx_exclude=[],
                runtime_tmpdir=None,
                # console=True表示,打包后的可執行文件雙擊運行時屏幕會出現一個cmd窗口,不影響原程序運行
                console=True,
                disable_windowed_traceback=False,
                target_arch=None,
                codesign_identity=None,
                entitlements_file=None )
      
      # 如果想要修改程序圖標,使用在EXE()中加入 icon='xxxxx', 切記:絕對路徑
      
    3. 打包

      執行spec文件:

      pyinstaller -F -c docx2xml.spec
      

      運行結束后,會新增dist文件夾,exe文件就在里面。(該exe文件已將所有的py文件封裝完了,可隨處使用)。

    打包后遇到的一些問題

    1.至此,python程序確實是打包完成了,但是還是有可能在運行時發生一些錯誤。

    比如我在運行時,突然報了個錯誤,是因為在 lib 包中的調用模塊處有問題:

    python程序打包exe_調用模塊錯誤

    因為 log.pyprocXml.py 在同一個包下,所以當時在引用時用了相對路徑。但是在打包后,程序會有錯誤。(可能是失去了相對路徑,找不到所需的模塊)所以要使用完整的調用模塊的語句。

    python程序打包exe_調用模塊錯誤糾正

    2.原本的py程序執行時的參數都是使用命令行參數來傳參的。打包之后的傳參方式其實也一樣,只不過每次執行exe文件時都要手動輸入:

    如何執行:

    ​ 在執行exe文件的語句后加個空格,然后直接輸入所需命令行參數。

參考博文:https://www.cnblogs.com/ronyjay/p/12713078.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM