欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

pyinstaller打包問題

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

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

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

pyinstaller -w -F demo.py

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

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

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


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

pyinstaller -Fw love.py

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

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


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


想要把素材文件也打包進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')

然后新建一個.spec文件,當然,為了方便,你可以直接打開剛剛生成的那個.spec文件(就是運行最前面那個打包命令時,也會根據(jù)你的命令來生成一個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 )

通過修改該文件,可以將指定的素材資源全部打包進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 )

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

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

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

就這么簡單就完事了,最后在命令行運行:

pyinstaller -F love.spec

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


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

pyinstaller安全性問題

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


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

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

下載后長這樣:


再下載個十六進制編輯器,一會要用到:
https://wxmedit.github.io/downloads.html

然后運行如下命令:

python pyinstxtractor.py love.exe

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


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


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


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

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


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

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


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


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

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

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

相關(guān)文章

  • 淺析Python 中整型對象存儲的位置

    淺析Python 中整型對象存儲的位置

    下面小編就為大家?guī)硪黄獪\析Python 中整型對象存儲的位置。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考,一起跟隨小編過來看看吧
    2016-05-05
  • Django實現(xiàn)隨機圖形驗證碼的示例

    Django實現(xiàn)隨機圖形驗證碼的示例

    這篇文章主要介紹了Django實現(xiàn)隨機圖形驗證碼的示例,幫助大家更好的學(xué)習和使用django框架,感興趣的朋友可以了解下
    2020-10-10
  • Scrapy基于Python構(gòu)建強大網(wǎng)絡(luò)爬蟲框架實例探究

    Scrapy基于Python構(gòu)建強大網(wǎng)絡(luò)爬蟲框架實例探究

    這篇文章主要為大家介紹了Scrapy基于Python構(gòu)建強大網(wǎng)絡(luò)爬蟲框架實例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • 遍歷python字典幾種方法總結(jié)(推薦)

    遍歷python字典幾種方法總結(jié)(推薦)

    下面小編就為大家?guī)硪黄闅vpython字典幾種方法總結(jié)(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • python在指定目錄下查找gif文件的方法

    python在指定目錄下查找gif文件的方法

    這篇文章主要介紹了python在指定目錄下查找gif文件的方法,涉及Python操作文件的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-05-05
  • Python實現(xiàn)打磚塊小游戲代碼實例

    Python實現(xiàn)打磚塊小游戲代碼實例

    這篇文章主要介紹了Python打磚塊小游戲,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2019-05-05
  • python缺失值的解決方法總結(jié)

    python缺失值的解決方法總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于python缺失值的解決方法總結(jié),有需要的朋友們可以跟著學(xué)習下。
    2021-06-06
  • Python實現(xiàn)雙因素驗證2FA的示例代碼

    Python實現(xiàn)雙因素驗證2FA的示例代碼

    雙因素認證(2FA)作為額外安全層為賬號登錄添加了第二層身份驗證。確保賬號持有人是可以訪問數(shù)字身份的唯-用戶。如果不使用雙因表認證,企業(yè)將承擔巨大的安全風險。本文將用Python實現(xiàn)雙因素驗證2FA,需要的可以參考一下
    2022-07-07
  • python實現(xiàn)微信接口(itchat)詳細介紹

    python實現(xiàn)微信接口(itchat)詳細介紹

    這篇文章主要介紹了python實現(xiàn)微信接口(itchat)詳細介紹,小編覺得挺不錯的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • python容器的內(nèi)置通用函數(shù)操作

    python容器的內(nèi)置通用函數(shù)操作

    容器是一種把多個元素組織在一起的數(shù)據(jù)結(jié)構(gòu),容器中的元素可以逐個地迭代獲取,可以用in, not in關(guān)鍵字判斷元素是否包含在容器中。接下來通過本文給大家介紹python容器的內(nèi)置通用函數(shù)操作,感興趣的朋友一起看看吧
    2021-11-11

最新評論