conda虛擬環(huán)境下使用pyinstaller打包程序為exe文件全過程
一、為什么要用conda虛擬環(huán)境
第一點是,pyinstaller打包需要指定程序中使用的庫的路徑,新手在這一點上很容易出現(xiàn)問題,導致打包后的exe程序執(zhí)行的時候顯示缺少模塊。這個問題可能并不能通過簡單地指定路徑來解決。
第二點就是使用虛擬環(huán)境本身的好處了:
- 可以創(chuàng)建多個不同的Python環(huán)境,每個環(huán)境可以安裝不同版本的Python和不同的包,避免了包之間的沖突和依賴問題。
- 可以方便地切換和管理不同的Python環(huán)境,只需要使用activate和deactivate命令即可。
- 可以使用conda命令來安裝和更新包,不需要使用pip或其他工具。conda還可以安裝一些非Python的包,比如gcc,nodejs,cuda等。
- 可以使用conda-forge等第三方源來獲取更多的包,或者使用自定義的源來安裝私有的包。
- 可以使用conda export和conda env create命令來導出和導入環(huán)境配置文件,方便在不同的機器上復制相同的環(huán)境。
當你進入一個conda虛擬環(huán)境后(conda activate xxx),可以使用
conda install
和pip install
安裝不同的包,因為某些包可能在conda源中沒有。
虛擬環(huán)境的創(chuàng)建和使用很簡單,不是本文的主題,這里不贅述了。
二、pyinstaller用法
PyInstaller 是一個用于將 Python 程序打包成可執(zhí)行文件的強大工具。它允許你將你的 Python 代碼、依賴項和解釋器一起打包成一個獨立的可執(zhí)行文件,無需用戶安裝 Python 或其他依賴項。
2.1 安裝 PyInstaller
首先進入項目所在的虛擬環(huán)境:
打開Anaconda Powershell Prompt
(為什么不直接用Powershell?可以,但不建議,你可以從我本專欄前面的文章找到答案),進入項目所在虛擬環(huán)境:
conda activate yt_dlp_env
安裝pyinstaller:
conda install pyinstaller
現(xiàn)在,先看第三節(jié):實際使用示例,然后再回來看第二節(jié)。
2.2 基本用法
打包一個 Python 腳本
假設你有一個名為 my_script.py
的 Python 腳本,想將其打包成可執(zhí)行文件。你可以在命令行中執(zhí)行以下命令:
pyinstaller my_script.py
這將在當前目錄下創(chuàng)建一個 dist
文件夾,其中包含了可執(zhí)行文件。你可以在 dist
文件夾中找到 my_script
(或 my_script.exe
,取決于你的操作系統(tǒng))可執(zhí)行文件。
2.21 打包一個 Python 項目
如果你的項目包含多個文件,你可以將整個項目目錄作為參數(shù)傳遞給 PyInstaller。例如:
pyinstaller my_project_directory
這將在 dist
文件夾中創(chuàng)建一個可執(zhí)行文件,其中包含了整個項目的所有文件和依賴項。
2.22 打包選項
PyInstaller 支持許多選項,以便你根據(jù)需要自定義打包過程。一些常用的選項包括:
打包選項:
-F
或--onefile
:生成單個可執(zhí)行文件。-D
或--onedir
:生成一個包含多個文件的目錄。-w
或--windowed
:創(chuàng)建一個窗口應用程序,沒有控制臺窗口。-c
或--console
:創(chuàng)建一個帶有控制臺窗口的命令行應用程序。-m
或--name
:指定生成的可執(zhí)行文件的名稱。--add-data
:添加額外的數(shù)據(jù)文件到可執(zhí)行文件中。
導入選項:
-p
或--paths
:添加搜索Python模塊的路徑。--hidden-import
:指定需要手動導入但不在源代碼中明確導入的模塊。
打包配置選項:
--name
:指定生成的可執(zhí)行文件的名稱。--icon
:指定可執(zhí)行文件的圖標文件。--version-file
:指定版本信息文件。--upx-dir
:指定UPX可執(zhí)行文件壓縮工具的目錄。
調試選項:
--debug
:生成帶有調試信息的可執(zhí)行文件。
優(yōu)化選項:
-O
或--optimize
:使用優(yōu)化編譯Python文件。--noconfirm
:禁用優(yōu)化編譯確認提示。
其他選項:
-h
或--help
:顯示幫助信息。--clean
:清理臨時文件。--noconfirm
:在覆蓋現(xiàn)有輸出目錄時不進行確認。--noconsole
:不顯示控制臺--python
:指定python解釋器的路徑。
這只是一些常用的PyInstaller參數(shù),實際上有更多選項可用于更復雜的定制。你可以使用pyinstaller --help
命令來查看完整的參數(shù)列表和說明。
例如,要生成一個單獨的可執(zhí)行文件并指定其名稱,你可以使用以下命令:
pyinstaller -F -n my_app my_script.py
這將生成一個名為 my_app
的單獨可執(zhí)行文件。
2.3 打包依賴項
當使用PyInstaller來打包Python應用程序時,你可以使用一系列重要的選項來設置依賴項和配置生成的可執(zhí)行文件。以下是一些關鍵的依賴設置選項:
--hidden-import
:通過該選項,你可以指定需要手動導入但不在源代碼中明確導入的模塊。這對于確保PyInstaller能夠識別和包含所有依賴項非常有用。
pyinstaller --hidden-import module_name script.py
--exclude-module
:使用該選項可以排除特定模塊,不包含在生成的可執(zhí)行文件中。
pyinstaller --exclude-module module_name script.py
--add-binary
:允許將外部二進制文件添加到生成的可執(zhí)行文件中,這對于包含一些外部庫非常有用。
pyinstaller --add-binary "path/to/binary;destination/folder" script.py
--add-data
:類似于--add-binary
,但用于添加外部數(shù)據(jù)文件到生成的可執(zhí)行文件中。
pyinstaller --add-data "path/to/data;destination/folder" script.py
--paths
:通過指定額外的模塊搜索路徑,可以確保PyInstaller能夠找到依賴項的位置。
pyinstaller --paths path/to/modules script.py
你也可以手動????
2.31 導出依賴項列表
你可以使用以下命令導出項目的依賴項列表:
pyinstaller --name=my_app --onefile my_script.py --path=/path/to/dependencies
這將創(chuàng)建一個 my_app.spec
文件,其中包含了項目的依賴項列表。
2.32 配置依賴項
編輯 my_app.spec
文件并添加依賴項的路徑,如下所示:
# ... a = Analysis(['my_script.py'], pathex=['/path/to/project'], binaries=[], datas=[], ... pathex=['/path/to/dependencies'], # 添加依賴項路徑 ... ) # ...
然后,使用以下命令來根據(jù)修改后的 my_app.spec
文件打包項目:
pyinstaller my_app.spec
這將使用指定的依賴項路徑打包項目。
2.4 自定義打包選項
如果你需要更多的自定義選項,可以編輯 my_app.spec
文件并進行更詳細的配置。你可以設置各種選項,包括文件和目錄的排除和包含、運行時選項等。詳細信息可以在 PyInstaller 的官方文檔中找到。
2.5 打包完成后的文件
成功打包后,你將在 dist
目錄中找到生成的可執(zhí)行文件。這個文件可以在沒有安裝 Python 解釋器或其他依賴項的情況下在目標系統(tǒng)上運行。
2.6 注意事項
- 打包大?。嚎蓤?zhí)行文件的大小可能會比原始 Python 代碼大很多,因為它包含了 Python 解釋器和依賴項。你可以通過精簡依賴項來減小可執(zhí)行文件的大小。
- 跨平臺問題:PyInstaller 支持在不同的操作系統(tǒng)上打包應用程序,但需要在相應的操作系統(tǒng)上運行 PyInstaller。
三、打包示例
打包如下程序:
(1)打開Anaconda Powershell Prompt
,進入項目所在虛擬環(huán)境:
conda activate yt_dlp_env
(2)進入程序所在目錄:
cd D:\Python_Study\VideoDownload
(3)打包:
pyinstaller -F --paths=E:\anaconda3\envs\yt_dlp_env\Lib\site-packages --python=E:\anaconda3\envs\yt_dlp_env\python.exe --icon=wx2.ico --name=Downloader DLP_GUI_Perfect.py
參數(shù)說明:
-F
:打包成一個可執(zhí)行文件;-- path
:指定python模塊的搜索路徑;--python
:指定python解釋器路徑;--icon
:可執(zhí)行文件的圖標--name
:可執(zhí)行文件名稱
(3)在文件所在目錄,打開dist文件夾,即可看到打包好的exe文件;
(4)直接打開即可運行,發(fā)送給別人也是如此(跨平臺應該不行)。
打包好的exe程序運行時是會打開一個控制臺窗口的,有時候是不需要的,比如你是一個GUI的程序。
在使用PyInstaller打包時,你可以使用--noconsole
選項來告訴PyInstaller生成一個窗口應用程序而不是控制臺應用程序:
pyinstaller -F --paths=E:\anaconda3\envs\yt_dlp_env\Lib\site-packages --python=E:\anaconda3\envs\yt_dlp_env\python.exe --noconsole --icon=wx2.ico --name=Downloader DLP_GUI_Perfect.py
但不建議第一次就這樣打包,留著控制臺,可以查看程序運行報錯情況,因為依賴很多的情況下,可能存在依賴沒完全指定的情況。
除了依賴問題,還有pyinstaller本身的問題,打包后,可能會改變一些程序的運行邏輯或者某個過程的編碼、或者資源訪問方式等等。不僅需要注意打包參數(shù)的設置,可能還需要修改源代碼。
因此,需要多次調試才能打包好一個程序(復雜一些的),可以使用--debug
參數(shù)打包,進行調試。
總結
到此這篇關于conda虛擬環(huán)境下使用pyinstaller打包程序為exe文件的文章就介紹到這了,更多相關conda虛擬環(huán)境pyinstaller打包exe內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python進程的狀態(tài)、創(chuàng)建及使用方法詳解
這篇文章主要介紹了python進程的狀態(tài)、創(chuàng)建及使用方法,結合實例形式詳細分析了Python進程的概念、原理、工作狀態(tài)、創(chuàng)建以及使用方法,需要的朋友可以參考下2019-12-12python 循環(huán)數(shù)據(jù)賦值實例
今天小編就為大家分享一篇python 循環(huán)數(shù)據(jù)賦值實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12Python之random.sample()和numpy.random.choice()的優(yōu)缺點說明
這篇文章主要介紹了Python之random.sample()和numpy.random.choice()的優(yōu)缺點說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06Python中表達式x += y和x = x+y 的區(qū)別詳解
這篇文章主要跟大家介紹了關于Python中x += y和x = x+y 的區(qū)別的相關資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-06-06Python實現(xiàn)Appium端口檢測與釋放的實現(xiàn)
這篇文章主要介紹了Python實現(xiàn)Appium端口檢測與釋放的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12