最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡單介紹一下pyinstaller打包以及安全性的實(shí)現(xiàn)

 更新時(shí)間:2020年06月02日 10:55:19   作者:༺北海以北的等待༻꧂  
這篇文章主要介紹了簡單介紹一下pyinstaller打包以及安全性的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

pyinstaller打包問題

簡單介紹一下pyinstaller常用的參數(shù):

可選參數(shù) 示例 說明
-F pyinstaller -F demo.py 只在dist文件夾中生成一個(gè)程序demo.exe文件,適用于一個(gè)模塊沒有多依賴.py文件
-D pyinstaller -D demo.py 默認(rèn)選項(xiàng),除了主程序demo.exe外,還會(huì)在在dist文件夾中生成很多依賴文件,推薦使用這個(gè)
-c pyinstaller -c demo.py 默認(rèn)選項(xiàng),只對windows有效,使用控制臺(tái)
-w pyinstaller -w demo.py 只對windows有效,不使用控制臺(tái)
-p pyinstaller -p D:\project\demo.py 設(shè)置導(dǎo)入路徑
-i pyinstaller -i D:\icons\demo.ico demo.py 給生成的demo.exe文件設(shè)置一個(gè)自定義的圖標(biāo)

部分參數(shù)可組合使用,比如打包成一個(gè).exe,不使用控制臺(tái):

pyinstaller -w -F demo.py

關(guān)于pyinstaller如何把圖片,音樂,字體等素材文件也打包進(jìn)exe文件中。這里就不整那些花里胡哨的東西了,直接講講我們該怎么做才能實(shí)現(xiàn)這個(gè)功能吧,先聲明一下,其實(shí)這東西官網(wǎng)里就有教程,不明白且想明白為什么這么做的自己看官網(wǎng)的介紹吧:

https://pyinstaller.readthedocs.io/en/v3.3.1/runtime-information.html

用表白小軟件為例,有用的就這三個(gè)文件:


其中love.py是主程序,cfg.py是配置文件,resources文件夾里是一些類似字體,音樂等的素材文件。
先直接試試運(yùn)行如下命令打包:

pyinstaller -Fw love.py

打包結(jié)束后根目錄變成了這樣:

dist文件夾里有打包好的exe文件。打開文件夾,直接雙擊運(yùn)行一下,會(huì)發(fā)現(xiàn)報(bào)錯(cuò):


原因很簡單,因?yàn)槟銢]把相關(guān)的素材文件打包進(jìn)這個(gè)exe文件,而在該目錄下根據(jù)程序本身的設(shè)定是無法讀取到這些素材文件的。你需要先把該exe文件移動(dòng)到love.py這個(gè)主程序所在的目錄,然后雙擊運(yùn)行:


想要把素材文件也打包進(jìn)exe文件的話,得先修改下程序,把程序中關(guān)于素材資源加載路徑的相關(guān)代碼從(在cfg.py文件里):

# 背景音樂路徑
BGM_PATH = os.path.join(os.getcwd(), 'resources/music/bgm.mp3')
# 字體路徑
FONT_PATH = os.path.join(os.getcwd(), 'resources/font/STXINGKA.TTF')
# 背景圖片路徑
BG_IMAGE_PATH = os.path.join(os.getcwd(), 'resources/images/bg.png')
# ICON路徑
ICON_IMAGE_PATH = os.path.join(os.getcwd(), 'resources/images/icon.png')

改成:

if getattr(sys, 'frozen', False):
 cur_path = sys._MEIPASS
else:
 cur_path = os.path.dirname(__file__)
# 背景音樂路徑
BGM_PATH = os.path.join(cur_path, 'resources/music/bgm.mp3')
# 字體路徑
FONT_PATH = os.path.join(cur_path, 'resources/font/STXINGKA.TTF')
# 背景圖片路徑
BG_IMAGE_PATH = os.path.join(cur_path, 'resources/images/bg.png')
# ICON路徑
ICON_IMAGE_PATH = os.path.join(cur_path, 'resources/images/icon.png')

然后新建一個(gè).spec文件,當(dāng)然,為了方便,你可以直接打開剛剛生成的那個(gè).spec文件(就是運(yùn)行最前面那個(gè)打包命令時(shí),也會(huì)根據(jù)你的命令來生成一個(gè)love.spec文件),類似這樣:


打開該文件,可以發(fā)現(xiàn)該文件里的內(nèi)容是這樣的(為了方便某些懶癌患者復(fù)制粘貼,我就不截圖而是直接把內(nèi)容copy下來了):

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['love.py'],
       pathex=['C:\\Users\\xx\\Desktop\\NaughtyConfession'],
       binaries=[],
       datas=[],
       hiddenimports=[],
       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='love',
     debug=False,
     bootloader_ignore_signals=False,
     strip=False,
     upx=True,
     upx_exclude=[],
     runtime_tmpdir=None,
     console=False )

通過修改該文件,可以將指定的素材資源全部打包進(jìn)exe文件中,具體而言,修改后的文件如下:

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


added_files = [('C:\\Users\\xx\\Desktop\\NaughtyConfession\\resources', 'resources')]
a = Analysis(['love.py'],
       pathex=['C:\\Users\\xx\\Desktop\\NaughtyConfession'],
       binaries=[],
       datas=added_files,
       hiddenimports=[],
       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='love',
     debug=False,
     bootloader_ignore_signals=False,
     strip=False,
     upx=True,
     upx_exclude=[],
     runtime_tmpdir=None,
     console=False )

其實(shí)就加了一行代碼(第六行):

added_files = [('C:\\Users\\xx\\Desktop\\NaughtyConfession\\resources', 'resources')]

然后把(第十行)datas=[],改成了datas=added_files,

就這么簡單就完事了,最后在命令行運(yùn)行:

pyinstaller -F love.spec

同樣地,在dist文件夾里會(huì)生成打包好的exe文件,雙擊運(yùn)行一下,可以發(fā)現(xiàn)這個(gè)exe文件竟然可以直接運(yùn)行啦:


至此,我們輕松地實(shí)現(xiàn)了將python程序的素材文件一起打包進(jìn)exe文件的目標(biāo)。當(dāng)然,上面只是介紹了一種個(gè)人比較習(xí)慣且相對簡單方便的解決方案,想了解更多相關(guān)內(nèi)容以及原理,各位小伙伴還是自己去查閱官方文檔吧:
https://pyinstaller.readthedocs.io/en/v3.3.1/index.html

pyinstaller安全性問題

以我們剛剛打包好的exe文件為例,就是它:


假設(shè)我們只把這個(gè)exe文件發(fā)給了心儀的小姐姐/小哥哥(然后人家拉黑了你)。那么對方能不能通過這個(gè)exe文件來獲得你的源代碼呢?可以。讓我們一步步操作下去來實(shí)現(xiàn)這個(gè)目的。

先到這下載個(gè)解包工具:
https://sourceforge.net/projects/pyinstallerextractor/

下載后長這樣:


再下載個(gè)十六進(jìn)制編輯器,一會(huì)要用到:
https://wxmedit.github.io/downloads.html

然后運(yùn)行如下命令:

python pyinstxtractor.py love.exe

運(yùn)行后發(fā)現(xiàn)根目錄變成了這樣:


多了一個(gè)文件夾,打開后發(fā)現(xiàn)里面一堆ddl,pyd文件:


在這里面我們可以找到三個(gè)比較關(guān)鍵的文件:


其中l(wèi)ove就是你之前打包的那個(gè)py文件對應(yīng)的pyc文件。注意,如果exe文件名被改動(dòng)過,比如一開始打包好的love.exe被改成了pig.exe,那么你找到的文件仍然是love.exe.manifest,而不是pig.exe.manifest

struct也是一個(gè)pyc文件。于是我們現(xiàn)在只需要反編譯這些pyc文件就行了,隨便搜索下就可以發(fā)現(xiàn)一堆相關(guān)的網(wǎng)站:


隨便選一個(gè)就OK了:
http://tools.bugscaner.com/decompyle/

打開lovestruct文件(重命名一下加個(gè)后綴就變成pyc文件):


struct.pyc文件里的前12個(gè)字節(jié)復(fù)制到love.pyc文件里,love.pyc文件變成了這樣:


保存,然后拿去在線反編譯,即可拿到源碼。
可以發(fā)現(xiàn)我們已經(jīng)成功地通過exe文件獲得了程序的源代碼。

不過pyinstaller提供了–key這個(gè)選項(xiàng),可以實(shí)現(xiàn)加密打包,但實(shí)際上它只對依賴庫進(jìn)行了加密,并沒有對主程序做加密處理。

到此這篇關(guān)于簡單介紹一下pyinstaller打包以及安全性的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)pyinstaller打包及安全性內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用python Django做網(wǎng)頁

    使用python Django做網(wǎng)頁

    python Django網(wǎng)頁的四個(gè)步驟,很簡單的圖文學(xué)習(xí)。學(xué)習(xí)python Django做網(wǎng)頁的第一步。
    2013-11-11
  • Python3.4解釋器用法簡單示例

    Python3.4解釋器用法簡單示例

    這篇文章主要介紹了Python3.4解釋器用法,結(jié)合簡單實(shí)例形式分析了Windows與Linux系統(tǒng)環(huán)境中Python3.4解釋器的簡單使用方法,需要的朋友可以參考下
    2019-03-03
  • python測試mysql寫入性能完整實(shí)例

    python測試mysql寫入性能完整實(shí)例

    這篇文章主要介紹了python測試mysql寫入性能完整實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Python中通用的文本相似度計(jì)算方法詳解

    Python中通用的文本相似度計(jì)算方法詳解

    這篇文章主要為大家詳細(xì)介紹了三種Python中通用的文本相似度計(jì)算方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • 5分鐘教會(huì)你用Docker部署一個(gè)Python應(yīng)用

    5分鐘教會(huì)你用Docker部署一個(gè)Python應(yīng)用

    Docker是一個(gè)開源項(xiàng)目,為開發(fā)人員和系統(tǒng)管理員提供了一個(gè)開放平臺(tái),可以將應(yīng)用程序構(gòu)建、打包為一個(gè)輕量級(jí)容器,并在任何地方運(yùn)行,下面這篇文章主要給大家介紹了關(guān)于如何通過5分鐘教會(huì)你用Docker部署一個(gè)Python應(yīng)用,需要的朋友可以參考下
    2022-06-06
  • Python時(shí)間序列數(shù)據(jù)的預(yù)處理方法總結(jié)

    Python時(shí)間序列數(shù)據(jù)的預(yù)處理方法總結(jié)

    這篇文章主要介紹了Python時(shí)間序列數(shù)據(jù)的預(yù)處理方法總結(jié),時(shí)間序列數(shù)據(jù)隨處可見,要進(jìn)行時(shí)間序列分析,我們必須先對數(shù)據(jù)進(jìn)行預(yù)處理。時(shí)間序列預(yù)處理技術(shù)對數(shù)據(jù)建模的準(zhǔn)確性有重大影響
    2022-07-07
  • M1 mac安裝PyTorch的實(shí)現(xiàn)步驟

    M1 mac安裝PyTorch的實(shí)現(xiàn)步驟

    本文將介紹如何在M1機(jī)器上本地安裝和運(yùn)行PyTorch。你使用的M1機(jī)型(Air、Pro、Mini或iMac)沒有區(qū)別。感興趣的可以了解一下
    2021-08-08
  • 在Django admin中編輯ManyToManyField的實(shí)現(xiàn)方法

    在Django admin中編輯ManyToManyField的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇在Django admin中編輯ManyToManyField的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python網(wǎng)絡(luò)編程之ftplib模塊

    Python網(wǎng)絡(luò)編程之ftplib模塊

    這篇文章介紹了Python網(wǎng)絡(luò)編程之ftplib模塊,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • python 三元運(yùn)算符使用解析

    python 三元運(yùn)算符使用解析

    這篇文章主要介紹了python 三元運(yùn)算符使用解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評論

全南县| 岳阳县| 同仁县| 岳西县| 大洼县| 甘谷县| 图片| 饶河县| 图木舒克市| 新竹县| 威海市| 龙泉市| 普定县| 铜山县| 安国市| 临泽县| 扶绥县| 五台县| 迁安市| 通海县| 澜沧| 木兰县| 逊克县| 屏山县| 文山县| 太湖县| 山丹县| 晋江市| 宕昌县| 永康市| 呼图壁县| 平和县| 小金县| 光泽县| 花莲县| 平邑县| 清原| 赤峰市| 阳西县| 太仓市| 西华县|