亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > 總結(jié)Pyinstaller打包的高級用法

總結(jié)Pyinstaller打包的高級用法

熱門標(biāo)簽:如何地圖標(biāo)注公司 電銷機器人錄音要學(xué)習(xí)什么 外賣地址有什么地圖標(biāo)注 銀川電話機器人電話 長春極信防封電銷卡批發(fā) 預(yù)覽式外呼系統(tǒng) 企業(yè)彩鈴地圖標(biāo)注 上海正規(guī)的外呼系統(tǒng)最新報價 煙臺電話外呼營銷系統(tǒng)

一、安裝pyinstaller

PyInstaller是一個用來將Python程序打包成一個獨立可執(zhí)行文件的第三方包。

因是第三方包,所以需要安裝一下:

pip install pyinstaller

或者升級到最新版本:

pip install --upgrade pyinstaller

或者安裝開發(fā)者版本:

pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz

當(dāng)然了,也可以下載whl文件,然后pip install安裝

更多可參考官網(wǎng)指引:

http://www.pyinstaller.org/downloads.html

二、打包初體驗

我們簡單試下打包python代碼為exe可執(zhí)行文件,測試代碼如下:

# 測試.py
import os

path = os.getcwd()
print(f'當(dāng)前文件路徑:{path}')
os.system('pause')

這段代碼是打印文件所在的目錄,我們用pyinstaller簡單打包的命令如下:

pyinstaller -F 測試.py

這個命令,執(zhí)行過程如下:

(env_test) F:\PythonCool\pyinstaller>pyinstaller -F 測試.py    
403 INFO: PyInstaller: 4.3
403 INFO: Python: 3.8.10 (conda)
434 INFO: Platform: Windows-10-10.0.19042-SP0
436 INFO: wrote F:\PythonCool\pyinstaller\測試.spec
455 INFO: UPX is not available.
468 INFO: Extending PYTHONPATH with paths
['F:\\PythonCool\\pyinstaller', 'F:\\PythonCool\\pyinstaller']
501 INFO: checking Analysis
...
...
15006 INFO: Appending archive to EXE F:\PythonCool\pyinstaller\dist\測試.exe
18999 INFO: Building EXE from EXE-00.toc completed successfully.

成功后會在同級目錄下生成一個dist文件,里面就是一個和代碼文件名同名的可執(zhí)行文件:

雙擊該可執(zhí)行文件,我們可以看到直接在python解釋器里運行測試.py文件時一樣的結(jié)果:

這里需要注意的是,我們在進(jìn)行打包的時候,有必要指定被打包的py文件的路徑,兩種方式供選擇:

方式一:先切換到被打包py文件目錄,再執(zhí)行打包指令

(base) C:\Users\Gdc>cd F:\PythonCool\pyinstaller
(base) C:\Users\Gdc>F:
(base) F:\PythonCool\pyinstaller>pyinstaller -F 測試.py

方式二:打包指令中指定py文件的絕對路徑

(base) C:\Users\Gdc>pyinstaller -F F:\PythonCool\pyinstaller\測試.py

關(guān)于成功打包的測試.exe可執(zhí)行文件,我們發(fā)現(xiàn)其圖標(biāo)是默認(rèn)的,且啟動時會顯示命令行窗口。那么,我們可以怎么自定義exe圖標(biāo),又或者去掉命令行窗口呢?

三、打包進(jìn)階體驗

好了,接下來,我們先看看關(guān)于pyinstaller打包時候的一些別的參數(shù)都有哪些,如何自定義exe圖標(biāo)以及如何去掉命令行窗口等等。

(env_test) F:\PythonCool\pyinstaller>pyinstaller -h

pyinstaller -h可以查看其參數(shù)說明,由于較多這里不做完整展示,摘取部分常用參數(shù)做簡要介紹:

參數(shù) 說明
-F 產(chǎn)生單個的可執(zhí)行文件
-D 產(chǎn)生一個目錄(包含多個文件)作為可執(zhí)行程序
-a 不包含 Unicode 字符集支持
-d debug 版本的可執(zhí)行文件
-w 指定程序運行時不顯示命令行窗口(僅對 Windows 有效)
-c 指定使用命令行窗口運行程序(僅對 Windows 有效)
-o 指定 spec 文件的生成目錄。如果沒有指定,則默認(rèn)使用當(dāng)前目錄來生成 spec 文件
-p 設(shè)置 Python 導(dǎo)入模塊的路徑(和設(shè)置 PYTHONPATH 環(huán)境變量的作用相似)。也可使用路徑分隔符(Windows 使用分號,Linux 使用冒號)來分隔多個路徑
-n 指定項目(產(chǎn)生的 spec)名字。如果省略該選項,那么第一個腳本的主文件名將作為 spec 的名字

打包一個帶自定義icon的exe可執(zhí)行文件

我們可以去這里下載icon文件:

https://www.iconfont.cn/

可以去這里將圖片轉(zhuǎn)化為icon文件:

https://www.bitbug.net/

然后,用一下命令可以自定義exe圖標(biāo):

(env_test) F:\PythonCool\pyinstaller>pyinstaller -F -i icon.ico 測試.py 

成功后,我們可以看到圖標(biāo)變成了我們自定義的這個:

打包去掉命令行彈窗的exe可執(zhí)行文件

如果我們是有GUI的程序,想在啟動的時候去掉命令行窗口,那么可以用以下指令進(jìn)行打包,這里以tkinter內(nèi)置GUI庫為例展示:

# 測試.py
import tkinter

top = tkinter.Tk()
# 進(jìn)入消息循環(huán)
top.mainloop()

以上測試代碼,如果用初體驗中的方式,在GUI界面出現(xiàn)的同時也會出現(xiàn)命令行彈窗,我們想去掉命令行彈窗可以:

(env_test) F:\PythonCool\pyinstaller>pyinstaller -F -w -i icon.ico 測試.py  

雙擊打包后的exe文件,可以看到只會出現(xiàn)GUI界面,命令行窗口并沒有出現(xiàn)。

四、帶配置文件打包

所謂帶配置文件打包,這里是指打包的時候除了py文件、依賴的庫之外,還存在需要引用的其他資源文件。直接用以上方式打包的時候,這些資源是無法被打進(jìn)包的,我們需要進(jìn)行修改打包時的spec文件來實現(xiàn)。

spec文件是告訴Pyinstaller怎么打包py文件,比如路徑、資源、動態(tài)庫、隱式調(diào)用的模塊等等。一般來說,我們不需要對它進(jìn)行修改…

這里我用此前《詞云繪制小工具》的案例來進(jìn)行介紹。

我們直接用打包進(jìn)階體驗中的命令可以進(jìn)行成功打包,不過這里我們發(fā)現(xiàn)有兩個問題:①包體很大,比此前案例里大了10倍左右;②啟動exe文件的時候報錯了。

關(guān)于包體較大的情況,可以試著創(chuàng)建虛擬環(huán)境,然后只安裝程序里需要調(diào)用的庫即可,這里只簡單介紹:

# 創(chuàng)建虛擬環(huán)境
conda create -n your_env_name python=3.8.10
# 啟動虛擬環(huán)境
activate your_env_name

關(guān)于啟動報錯的情況,由于比較復(fù)雜,我們一步一步來看:

①由于無命令行彈窗,無法查看到具體的報錯,這里先去帶命令行窗口形式看下報錯信息,我們看報錯如下:

提示缺少這個文件,我們可以在打包生成的詞云繪制工具.spec配置文件里將這個資源放上

# -*- mode: python ; coding: utf-8 -*-
# 詞云繪制工具.spec

block_cipher = None

a = Analysis(['詞云繪制工具.py'],
             pathex=['F:\\PythonCool\\pyinstaller'],
             binaries=[],
             datas=[], # 這里帶上資源文件地址
             hiddenimports=[], # 動態(tài)引入的庫或模塊
             hookspath=[],
             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='詞云繪制工具',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True , icon='icon.ico')

通過在wordcloud模塊目錄里查到了stopwords文件,我們將其放到data中。

datas=[('C:\\Users\\Gdc\\anaconda3\\envs\\env_test\\Lib\\site-packages\\wordcloud\\stopwords','wordcloud')],

前者是資源文件在本機的位置,后者為打包后文件調(diào)用的相對路徑,編輯好spec文件后,通過以下命令進(jìn)行打包:

(env_test) F:\PythonCool\pyinstaller>pyinstaller -D 詞云繪制工具.spec  

好吧,還有一些文件未被打進(jìn)包,所以又出現(xiàn)同樣的問題了。所以,我們是需要把全部的資源文件都加到spec文件里的data中。

我們找到全部的資源文件全部加上吧,然后再執(zhí)行打包命令。

datas=[('C:\\Users\\Gdc\\anaconda3\\envs\\env_test\\Lib\\site-packages\\stylecloud\\static','stylecloud\\static'),
    ('C:\\Users\\Gdc\\anaconda3\\envs\\env_test\\Lib\\site-packages\\wordcloud\\stopwords','wordcloud'),
    ('C:\\Users\\Gdc\\anaconda3\\envs\\env_test\\Lib\\site-packages\\jieba\\analyse\\idf.txt','jieba\\analyse'),
    ('C:\\Users\\Gdc\\anaconda3\\envs\\env_test\\Lib\\site-packages\\jieba\\dict.txt','jieba')]

我們將配置資源打進(jìn)包后可以正常啟動exe可執(zhí)行文件了。

但是,又發(fā)現(xiàn)在執(zhí)行詞云繪制的時候,也會出現(xiàn)報錯。不過看報錯的情況是提示不存在xx模塊,那么這是什么情況呢?!

五、添加隱式調(diào)用庫

我們找到報錯的地方代碼如下,采用了__import__()函數(shù)用于動態(tài)加載類和函數(shù)palettable模塊。

def gen_palette(palette: str):
    """Generates the corresponding palette function from `palettable`."""
    palette_split = palette.split(".")
    palette_name = palette_split[-1]

    # https://stackoverflow.com/a/6677505
    palette_func = getattr(
        __import__(
            "palettable.{}".format(".".join(palette_split[:-1])),
            fromlist=[palette_name],
        ),
        palette_name,
    )
    return palette_func

對于這個問題,我試過兩種方案,大家可以參考一下。

方案一:在spec文件中hiddenimports中添加動態(tài)引用的模塊

hiddenimports=['palettable'], # 動態(tài)引入的庫或模塊

這種情況下,palettable庫里也有一些配置文件需要添加到spec文件里的data中

('C:\\Users\\Gdc\\anaconda3\\envs\\env_test\\Lib\\site-packages\\palettable\\colorbrewer\\data','palettable\\colorbrewer\\data')

方案二:修改stylecloud庫中調(diào)用palettable模塊的代碼部分

import palettable
def gen_palette(palette: str):
    palette_func = getattr(palettable.tableau,'BlueRed_6')
    return palette_func
 
    # """Generates the corresponding palette function from `palettable`."""
    # palette_split = palette.split(".")
    # palette_name = palette_split[-1]

    #    https://stackoverflow.com/a/6677505
    # palette_func = getattr(
        # __import__(
            # "palettable.{}".format(".".join(palette_split[:-1])),
            # fromlist=[palette_name],
        # ),
        # palette_name,
    # )

通過第4和5部分,我們用pyinstaller終于成功打包且正常運行使用了。

以上就是本次全部內(nèi)容,大家如果遇到打包時涉及到配置文件的或者隱式調(diào)用的,可以采用這兩個2技巧進(jìn)行特殊打包!

不過,關(guān)于pyinstaller打包其實還有更多操作,大家可以多看看官方文檔了解,主要是命令行參數(shù)spec文件里的配置要點

到此這篇關(guān)于總結(jié)Pyinstaller打包的高級用法的文章就介紹到這了,更多相關(guān)Pyinstaller打包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python之pyinstaller組件打包命令和異常解析實戰(zhàn)
  • 教你使用pyinstaller打包Python教程
  • 如何利用pyinstaller打包Python程序為exe可執(zhí)行文件
  • Pyinstaller打包文件太大的解決方案
  • 解決Pyinstaller打包軟件失敗的一個坑
  • python3.9實現(xiàn)pyinstaller打包python文件成exe
  • 解決pyinstaller 打包exe文件太大,用pipenv 縮小exe的問題
  • 使用pyinstaller打包python PyQt5程序

標(biāo)簽:佳木斯 盤錦 潮州 湖北 宜昌 西寧 上饒 珠海

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《總結(jié)Pyinstaller打包的高級用法》,本文關(guān)鍵詞  總結(jié),Pyinstaller,打包,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《總結(jié)Pyinstaller打包的高級用法》相關(guān)的同類信息!
  • 本頁收集關(guān)于總結(jié)Pyinstaller打包的高級用法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    可以免费看毛片的网站| 国产成人啪精品| 一本高清在线| 午夜久久网| 国产视频网站在线观看| 国产不卡在线播放| 欧美激情在线精品video| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产福利免费观看| 欧美日本国产| 精品视频免费在线| 成人免费福利片在线观看| 黄视频网站在线看| 九九国产| 亚洲www美色| 久草免费资源| 日本在线不卡免费视频一区| 高清一级片| 国产高清视频免费| 黄色福利片| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 欧美国产日韩在线| 国产精品12| 可以免费看污视频的网站| 国产伦久视频免费观看视频| 99久久精品国产片| 一级女性全黄生活片免费| 黄视频网站在线看| 国产网站在线| 免费一级片在线观看| 毛片的网站| 日韩免费在线视频| 精品在线观看一区| 可以免费看毛片的网站| 国产成人精品在线| 日韩免费在线观看视频| 99色视频在线观看| 国产亚洲精品aaa大片| 国产激情视频在线观看| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 青青青草影院| 久久99青青久久99久久| 久久福利影视| 国产麻豆精品hdvideoss| 精品久久久久久综合网| 午夜家庭影院| 国产不卡在线看| 久久久久久久久综合影视网| 日本免费看视频| 91麻豆国产福利精品| 国产一区二区高清视频| 一级片片| 国产91精品一区| 国产麻豆精品免费视频| 国产网站在线| a级黄色毛片免费播放视频| 91麻豆爱豆果冻天美星空| 日韩在线观看视频黄| 精品毛片视频| 成人免费高清视频| 欧美一级视频免费| 天天做日日爱夜夜爽| 国产网站免费在线观看| 日韩中文字幕在线观看视频| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 台湾毛片| 国产91精品系列在线观看| 国产91丝袜在线播放0| 色综合久久天天综合绕观看| 欧美1卡一卡二卡三新区| 午夜在线亚洲| 精品国产一区二区三区久久久狼 | 亚洲 欧美 91| 亚洲天堂在线播放| 日本在线www| 日日爽天天| 国产视频一区二区在线播放| 午夜在线亚洲| 国产精品1024永久免费视频 | 亚洲第一页乱| 日韩专区第一页| 天天做日日爱夜夜爽| 亚洲不卡一区二区三区在线| 麻豆网站在线免费观看| 午夜欧美成人香蕉剧场| 免费国产在线视频| 精品国产一区二区三区免费| 久草免费在线色站| 一级女性全黄久久生活片| 黄视频网站免费看| 成人a级高清视频在线观看| 欧美大片一区| 久久久久久久网| 黄视频网站免费| 午夜欧美成人香蕉剧场| 韩国三级香港三级日本三级la| 成人免费观看的视频黄页| 国产高清视频免费| 成人免费网站久久久| 国产高清在线精品一区二区 | 午夜激情视频在线播放| 国产伦精品一区三区视频| 国产a免费观看| 99色吧| 国产精品自拍亚洲| 日日日夜夜操| 亚欧乱色一区二区三区| 天天做日日爱夜夜爽| 日日爽天天| 四虎久久影院| 国产国产人免费视频成69堂| 日韩字幕在线| 午夜在线观看视频免费 成人| 国产91精品一区| 欧美激情一区二区三区视频| 亚欧乱色一区二区三区| 亚洲精品久久玖玖玖玖| 国产a视频| 国产亚洲精品aaa大片| 97视频免费在线| 久久国产影院| 精品国产香蕉在线播出 | 日本免费看视频| 美女免费精品视频在线观看| 午夜在线观看视频免费 成人| 亚欧成人乱码一区二区| 久久成人亚洲| 麻豆网站在线看| 亚洲精品影院一区二区| 国产91精品一区二区| 欧美大片aaaa一级毛片| 色综合久久久久综合体桃花网| 日本在线www| 国产不卡在线观看| 日韩中文字幕一区二区不卡| 超级乱淫黄漫画免费| 久久精品免视看国产成人2021| 久久久久久久免费视频| a级毛片免费全部播放| 国产一区二区精品在线观看| 亚州视频一区二区| 99久久精品国产高清一区二区| a级毛片免费全部播放| 99色精品| 91麻豆精品国产自产在线观看一区 | 91麻豆精品国产自产在线| 九九精品久久| 成人免费观看的视频黄页| 日本免费乱人伦在线观看 | 黄色免费三级| 色综合久久手机在线| 青青久久精品| a级毛片免费全部播放| 91麻豆精品国产综合久久久| 国产网站在线| 国产一区精品| 国产麻豆精品高清在线播放| 国产伦久视频免费观看视频| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 欧美激情在线精品video| 香蕉视频久久| 色综合久久天天综合观看| 亚洲精品中文字幕久久久久久| 国产韩国精品一区二区三区| 二级片在线观看| 二级片在线观看| 日韩中文字幕一区| 日日夜夜婷婷| 日韩avdvd| 一本伊大人香蕉高清在线观看| 国产一区免费观看| 国产91精品一区二区| 精品久久久久久中文字幕2017| 一级毛片视频免费| 天天色成人网| 国产视频一区二区三区四区| 国产亚洲精品aaa大片| 日本免费看视频| 国产综合91天堂亚洲国产| 麻豆午夜视频| 成人a大片高清在线观看| 韩国毛片 免费| 免费一级片网站| 精品国产香蕉在线播出| 国产亚洲精品aaa大片| 日韩在线观看免费完整版视频| 成人在免费观看视频国产| 99久久精品费精品国产一区二区| 亚洲精品影院久久久久久| 91麻豆精品国产自产在线观看一区 | 精品视频一区二区| 免费的黄色小视频| 成人免费观看视频| 精品国产三级a| 高清一级毛片一本到免费观看| 国产韩国精品一区二区三区| 亚洲第一页乱| 台湾美女古装一级毛片| 免费一级片网站|