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

python算法加密 pyarmor與docker

 更新時(shí)間:2022年06月21日 10:42:20   作者:hellobigorange  
這篇文章主要介紹了python算法加密 pyarmor與docker,,PyArmor 是一個(gè)用于加密和保護(hù) Python 腳本的工具。它能夠在運(yùn)行時(shí)刻保護(hù) Python腳本的二進(jìn)制代碼不被泄露,設(shè)置加密后Python源代碼的有效期限,綁 定加密后的Python源代碼到硬盤、網(wǎng)卡等硬件設(shè)備

前言

為了避免代碼泄露的風(fēng)險(xiǎn),我們往往需要對(duì)代碼進(jìn)行加密,PyArmor 是一個(gè)用于加密和保護(hù) Python 腳本的工具。它能夠在運(yùn)行時(shí)刻保護(hù) Python腳本的二進(jìn)制代碼不被泄露,設(shè)置加密后Python源代碼的有效期限,綁 定加密后的Python源代碼到硬盤、網(wǎng)卡等硬件設(shè)備。

一 基礎(chǔ)配置 安裝

pip install pyarmor

更新到最新版本:

pip install --upgrade pyarmor

二 基本語(yǔ)法 2.1 加密 Python 腳本

a) 單個(gè)包,只有單級(jí)目錄

使用命令obfuscate來(lái)加密 python 腳本。在最簡(jiǎn)單的情況下,最常用的一種情況是切換到主函數(shù)腳本algorithm.py所在的路徑,然后執(zhí)行:

pyarmor obfuscate algorithm.py

PyArmor 會(huì)加密 algorithm.py 和相同目錄下面的所有 *.py 文件:

  • 創(chuàng)建輸出子目錄 dist
  • 生成加密的主腳本 algorithm.py 保存在輸出目錄 dist
  • 加密相同目錄下其他所有 *.py 文件,保存到輸出目錄 dist
  • 生成運(yùn)行加密腳本所需要的全部輔助文件,保存到輸出目錄 dist

b) 若有多個(gè)算法包、多級(jí)目錄
默認(rèn)情況下,只有和主腳本相同目錄的其他 *.py 會(huì)被同時(shí)加密。如果想遞歸加密 子目錄下的所有 *.py 文件,使用下面的命令:

pyarmor obfuscate --recursive algorithm.py

注意:只能加密.py文件,如果算法需要調(diào)用.csv,.json文件,直接拷貝到dist文件夾對(duì)應(yīng)的包里就可以了

2.2 運(yùn)行加密腳本

運(yùn)行加密腳本不需要安裝pyarmo

cd dist
python algorithm.py

2.3 發(fā)布加密腳本

執(zhí)行到這一步已經(jīng)可以發(fā)布加密腳本了,發(fā)布加密腳本只需要把輸出路徑的所有dist文件拷貝即可。

三、pyarmor&docker

由于pyarmo加密的腳本對(duì)運(yùn)行環(huán)境比較敏感,因此我們最好把整個(gè)算法打包成鏡像,在啟動(dòng)容器的時(shí)候進(jìn)行加密,并刪除所有的未加密文件,留下dist文件

注:上文也說(shuō)過(guò),pyarmo只能對(duì).py文件加密,對(duì)于.csv.json文件是無(wú)法加密的,自然在生成的dist包里也沒(méi)有非.py后綴的文件,因此我們需要將.csv等文件移入到dist里,不然運(yùn)行dist里的算法時(shí)會(huì)報(bào)錯(cuò)。

由于我本地是windows系統(tǒng),所以生成.dll后綴文件,直接把dist制作成鏡像會(huì)報(bào)錯(cuò),因?yàn)槿萜鬟\(yùn)行需要.so文件,因此考慮在容器中運(yùn)行時(shí)加密,生成.so,再自動(dòng)移除未加密文鍵,只留下dist及所需的非.py后綴文件,其實(shí)也可以用linux系統(tǒng)直接本地運(yùn)行生成dist,但是不要忘記將非.py后綴的文件及文件夾復(fù)制進(jìn)去。

下面將以myprocessor的算法包為例,講述整個(gè)流程:

可以看出,里面是多個(gè)算法包互相調(diào)用的,且有較多的非.py文件

3.1 Dockerfile

FROM python:3.6 # 導(dǎo)入python3.6基礎(chǔ)環(huán)境
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime\
  && echo 'Asia/Shanghai'>/etc/timezone # 同步系統(tǒng)時(shí)間
COPY ./ ./app/ # 將算法里面的所有文件和文件夾復(fù)制到鏡像里
WORKDIR /app/ # 設(shè)置鏡像里的app為主文件夾
RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # 將算法需要的包在鏡像中進(jìn)行安裝
RUN pyarmor obfuscate --recursive myprocessor.py # 對(duì)所有算法遞歸加密
RUN ls # 顯示app內(nèi)的所有文件
CMD ["python3","/app/dist/myprocessor.py"] # 運(yùn)行dist內(nèi)的加密后的主函數(shù)

3.2 requirements.txt

# 這里就是運(yùn)行我的算法依賴的模塊,pyarmor==7.4.2一定要加,其他的根據(jù)自己的算法依賴添加
pyarmor==7.4.2
pandas == 1.1.5
numpy == 1.19.5
requests == 2.25.1

3.3 加密函數(shù)lock_by_pyarmor.py

# -*- coding: utf-8 -*- 
import shutil
import os
class File_lock():
    def __init__(self):
        self.root_path = os.getcwd()  # 當(dāng)前工作路徑

    def remove_and_del_unsecret_dir_f(self):
        '''移除未加密的py和pyc文件,復(fù)制非py,pyc文件到dist'''
        for root, dir, files in os.walk(self.root_path):
            if "dist" not in root:
                for file in files:
                    if os.path.splitext(file)[-1] in ['.py', '.pyc']:
                        # 刪除所有未加密的.py和.pyc文件
                        os.remove(os.path.join(root, file))
                    else:
                        # 由于非py文件無(wú)法加密,因此將非py文件移動(dòng)到同名文件夾下,若找不到同名文件夾就創(chuàng)建同名文件夾
                        if root == self.root_path:
                            dist_same_die_path = os.path.join(self.root_path, 'dist')
                        else:
                            dist_same_die_path = os.path.join(self.root_path, 'dist', os.path.basename(root))
                        if not os.path.exists(dist_same_die_path):
                            os.mkdir(dist_same_die_path)
                        shutil.move(os.path.join(root, file), dist_same_die_path)

        temp_list = os.listdir() # 移除dist外的所有空文件夾
        temp_list.remove('dist')
        for i in temp_list:
            os.rmdir(i)

    def lock_by_pyarmor(self):
        # print("當(dāng)前工作路徑:",self.root_path)
        # print("os.listdir", os.listdir())
        if (not os.path.exists(os.path.join(self.root_path, "dist"))):  # 若dist不存在
            os.system("pyarmor obfuscate --recursive myprocessor.py")  # 加密
            self.remove_and_del_unsecret_dir_f()
        else:
            # print("加密后文件夾:",os.listdir())
            self.remove_and_del_unsecret_dir_f()
            # print("移除未加密文件后:",os.listdir())

3.4 主函數(shù)myprocessor.py

from lock_by_pyarmor import File_lock
def call(arg, model, *args, **kwargs):
    lockf = File_lock()
    lockf.lock_by_pyarmor()
    from deviation_algothrim.get_deviation import Deviation
    from loss_power.get_loss_power import GetPower
    pass
if __name__ == "__main__":

    print(call(arg=None, model=None))

注意:從其他包里導(dǎo)入需要的內(nèi)容,需要放到lockf.lock_by_pyarmor()之后,不然,還沒(méi)有完全構(gòu)建成dist文件,可能會(huì)調(diào)用報(bào)錯(cuò)。

3.5 創(chuàng)建鏡像并驗(yàn)證效果

docker build _t imag1 .建立完鏡像后,app內(nèi)目錄為:

  • docker run -d imag1 /bin/bash -c "tail -f /dev/null"
  • docker ps #找到正在運(yùn)行的容器id
  • docker exec -it 2293ee92f3ca /bin/bash # 進(jìn)入容器
  • python /app/dist/myprocessor.py # 執(zhí)行加密文件

可以看到app內(nèi)只剩下了dist文件。
最后需要將啟動(dòng)的容器重新打包成鏡像,并發(fā)布到harbor上:docker commit 2293ee92f3ca7 new_image,丟棄原本的鏡像。因?yàn)樵剧R像中是有未加密文件的,并且可以訪問(wèn) 。
可以將容器里的加密文件導(dǎo)出到本地D盤: docker cp bf5f2e815b64:/app D:/

ps: 如有問(wèn)題,或者lock_by_pyarmor.py有更好的實(shí)現(xiàn)方法,希望可以指正。

到此這篇關(guān)于python算法加密 pyarmor與docker的文章就介紹到這了,更多相關(guān)python 算法加密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)快速將pdf文件剪切成多個(gè)圖片

    Python實(shí)現(xiàn)快速將pdf文件剪切成多個(gè)圖片

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)快速將pdf文件剪切成多個(gè)圖片,文中的示例代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • pycharm的console輸入實(shí)現(xiàn)換行的方法

    pycharm的console輸入實(shí)現(xiàn)換行的方法

    今天小編就為大家分享一篇pycharm的console輸入實(shí)現(xiàn)換行的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python利用Pydub實(shí)現(xiàn)自動(dòng)分割音頻

    Python利用Pydub實(shí)現(xiàn)自動(dòng)分割音頻

    pydub是一個(gè)輕量級(jí)的音頻處理庫(kù),安裝方便,使用簡(jiǎn)單。而且pydub提供了豐富的音頻處理功能,包括切割、合并、轉(zhuǎn)換等。本文將利用Pydub實(shí)現(xiàn)自動(dòng)分割音頻功能,感興趣的可以了解一下
    2023-05-05
  • 深入了解NumPy 高級(jí)索引

    深入了解NumPy 高級(jí)索引

    這篇文章主要介紹了NumPy 高級(jí)索引的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 零基礎(chǔ)也能看懂的python內(nèi)置csv模塊教程

    零基礎(chǔ)也能看懂的python內(nèi)置csv模塊教程

    這篇博客就為你介紹一個(gè)知識(shí)點(diǎn),python 內(nèi)置模塊 csv 。讓大家一文就看懂csv csv(Comma-Separated Values)文件是什么?以及python 中的 csv 文件清晰解法讀取文件寫入文件 csv 文件其它說(shuō)明
    2021-11-11
  • Python PyCryptodome庫(kù)介紹與實(shí)例教程

    Python PyCryptodome庫(kù)介紹與實(shí)例教程

    PyCryptodome提供了豐富的加密功能,可以滿足多種安全需求,本文介紹了幾個(gè)常見(jiàn)的使用場(chǎng)景,包括對(duì)稱加密、非對(duì)稱加密、哈希函數(shù)和消息認(rèn)證碼,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • 在Python編程過(guò)程中用單元測(cè)試法調(diào)試代碼的介紹

    在Python編程過(guò)程中用單元測(cè)試法調(diào)試代碼的介紹

    這篇文章主要介紹了在Python編程過(guò)程中用單元測(cè)試法調(diào)試代碼的介紹,包括使用斷言等,有助于debug時(shí)的效率提升,需要的朋友可以參考下
    2015-04-04
  • Python的SQLAlchemy框架使用入門

    Python的SQLAlchemy框架使用入門

    這篇文章主要介紹了Python的SQLAlchemy框架使用入門,SQLAlchemy框架是Python中用來(lái)操作數(shù)據(jù)庫(kù)的ORM框架之一,需要的朋友可以參考下
    2015-04-04
  • 在Django框架中編寫Contact表單的教程

    在Django框架中編寫Contact表單的教程

    這篇文章主要介紹了在Django框架中編寫Contact表單的教程,Django是Python特色各異的框架中最有人氣的一個(gè),需要的朋友可以參考下
    2015-07-07
  • 基于OpenCV的圖像邊緣檢測(cè)與輪廓分析

    基于OpenCV的圖像邊緣檢測(cè)與輪廓分析

    本文介紹了圖像處理中的邊緣檢測(cè)和輪廓分析方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-01-01

最新評(píng)論

乐都县| 松桃| 绥芬河市| 巨野县| 前郭尔| 平罗县| 达尔| 北川| 澎湖县| 萨迦县| 西昌市| 白水县| 龙川县| 德安县| SHOW| 庆城县| 革吉县| 高唐县| 团风县| 吴桥县| 通渭县| 宁国市| 清河县| 双牌县| 南宫市| 大冶市| 手机| 南城县| 涿州市| 丹江口市| 余姚市| 彭州市| 昔阳县| 东平县| 万州区| 交口县| 绍兴市| 平果县| 九龙城区| 乌拉特中旗| 铜山县|