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

使用Cython加密Python代碼防止反編譯

 更新時(shí)間:2024年05月09日 14:54:22   作者:Lorin洛林  
本文我們主要介紹如何使用 Cython 加密源代碼,雖然 Cython 的作用主要是為了提高代碼的運(yùn)行效率,但是也對(duì)源代碼有一定的加密效果,需要的朋友可以參考下

前言

  • 本文我們主要介紹如何使用 Cython 加密源代碼,雖然 Cython 的作用主要是為了提高代碼的運(yùn)行效率,但是也對(duì)源代碼有一定的加密效果。

使用 Cython 加密 Python 代碼

環(huán)境

  • win11
  • Python 3.x

Python 源代碼

# dependency.py
def some_function(x, y):
    return x * y


# example.py
from dependency import some_function


def add(x, y):
    return x + y + some_function(x, y)


if __name__ == '__main__':
    print(add(3, 4))

編寫(xiě) Cython 編譯配置文件

# setup.py
from distutils.core import setup
from Cython.Build import cythonize

setup(
    # 程序名
    name='test',
    # 需要編譯的腳本列表
    ext_modules=cythonize(
        [
            "dependency.py",
            "example.py",
            # ...
        ],
        # Python 版本
        language_level=3
    ),
)

編譯

  • python setup.py build_ext --inplace 命令的作用是在當(dāng)前目錄中構(gòu)建 C/C++ 擴(kuò)展模塊,并將編譯后的模塊放置在當(dāng)前目錄中,以便在開(kāi)發(fā)過(guò)程中進(jìn)行測(cè)試和調(diào)試。
# 執(zhí)行成功日志

版權(quán)所有(C) Microsoft Corporation。保留所有權(quán)利。
[1/2] Cythonizing dependency.py
[2/2] Cythonizing example.py
dependency.c
  正在創(chuàng)建庫(kù) build\temp.win-amd64-cpython-312\Release\dependency.cp312-win_amd64.lib 和對(duì)象 build\temp.win-amd64-cpython-312\Release\dependency.cp312-win_amd64.exp
正在生成代碼
已完成代碼的生成
example.c
  正在創(chuàng)建庫(kù) build\temp.win-amd64-cpython-312\Release\example.cp312-win_amd64.lib 和對(duì)象 build\temp.win-amd64-cpython-312\Release\example.cp312-win_amd64.exp
正在生成代碼
已完成代碼的生成

查看輸出文件

  • 可以看到編譯完成后,我們?cè)诋?dāng)前目錄生成了 .c 源文件和 .pyd 的二進(jìn)制 windows 動(dòng)態(tài)鏈接庫(kù)文件,在 linux 環(huán)境下生成的是 .so 為后綴的共享對(duì)象文件。

使用

  • .so 文件和 .pyd 文件 使用和原 .py 文件使用方式一致,但 .pyd 文件名需要和原文件名保持一致。
# run.py

import example

if __name__ == '__main__':
    print(example.add(3, 4))

問(wèn)題

  • 下面是實(shí)踐過(guò)程中遇到的一些問(wèn)題,可以參考:

error: Microsoft Visual C++ 14.0 or greater is required

pyconfig.h(59): fatal error C1083: 無(wú)法打開(kāi)包括文件: “io.h”: No such file or directory

  • 這是因?yàn)槲覀冞€需要另外兩個(gè)組件,繼續(xù)使用 visualstudio 工具進(jìn)行安裝:

  • 由于電腦系統(tǒng)是 win11,所有選擇 win11 SDK0。

dynamic module does not define module export function

  • 在 run.py 中使用 .pyd 時(shí),需要和原文件名稱(chēng)保持一致,否則會(huì)出現(xiàn)如上錯(cuò)誤,比如上面的示例中原文件為 example.py 則生成的鏈接文件應(yīng)該為 example.pyd

拓展

.py .pyc .pyd .so .pyx 的區(qū)別

.py 文件

  • 標(biāo)準(zhǔn)的 Python 源代碼文件,包含 Python 代碼。你可以使用文本編輯器(如Notepad++、Sublime Text、Atom等)來(lái)編輯這些文件。

.pyc 文件

  • Python 編譯后的字節(jié)碼文件。當(dāng)你運(yùn)行一個(gè) .py 文件時(shí),Python 解釋器會(huì)將其編譯成字節(jié)碼,然后將字節(jié)碼保存到 .pyc 文件中,以便下次運(yùn)行時(shí)可以更快地加載。這些文件是平臺(tái)無(wú)關(guān)的,因此可以在不同的操作系統(tǒng)上共享。

.pyd 文件

  • Windows 平臺(tái)上的 Python DLL 文件。它們包含編譯后的 Python 模塊,通常是用C、C++或其他語(yǔ)言編寫(xiě)的擴(kuò)展模塊。這些文件允許 Python 與底層操作系統(tǒng)或硬件進(jìn)行交互,例如,訪(fǎng)問(wèn)操作系統(tǒng)的API或使用硬件設(shè)備。

.so 文件

  • 類(lèi)Unix系統(tǒng)(如Linux)上的共享對(duì)象文件,類(lèi)似于 Windows 上的 DLL 文件。它們通常是使用 C 或 C++ 編寫(xiě)的 Python 模塊的編譯版本。這些文件通常用于擴(kuò)展 Python 的功能,以便與底層系統(tǒng)進(jìn)行交互或提高性能。

.pyx 文件

  • Cython 代碼文件。Cython 是一種使 Python 代碼能夠與 C 語(yǔ)言進(jìn)行混合編程的工具。.pyx 文件包含了同時(shí)具有 Python 和 C 語(yǔ)法的代碼,可以通過(guò) Cython 編譯器轉(zhuǎn)換為 C 代碼,然后編譯成 Python 可執(zhí)行模塊(.pyd 或 .so 文件)。

以上就是使用Cython加密Python代碼防止反編譯的詳細(xì)內(nèi)容,更多關(guān)于Cython加密Python代碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Flask應(yīng)用部署與多端口管理實(shí)踐全指南

    Flask應(yīng)用部署與多端口管理實(shí)踐全指南

    在開(kāi)發(fā)和部署Web應(yīng)用時(shí),開(kāi)發(fā)者常常需要處理多端口服務(wù),防火墻配置以及生產(chǎn)環(huán)境優(yōu)化等問(wèn)題,下面小編就來(lái)和大家簡(jiǎn)單講講Flask應(yīng)用部署與多端口管理實(shí)踐的相關(guān)知識(shí)吧
    2025-04-04
  • 使用selenium+chromedriver+xpath爬取動(dòng)態(tài)加載信息

    使用selenium+chromedriver+xpath爬取動(dòng)態(tài)加載信息

    這篇文章主要介紹了使用selenium+chromedriver+xpath爬取動(dòng)態(tài)加載信息
    2022-02-02
  • Python實(shí)現(xiàn)SICP賦值和局部狀態(tài)

    Python實(shí)現(xiàn)SICP賦值和局部狀態(tài)

    這篇文章主要介紹了Python實(shí)現(xiàn)SICP 賦值和局部狀態(tài)的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Python中bisect的用法

    Python中bisect的用法

    這篇文章主要介紹了Python中bisect的用法,主要講述了針對(duì)數(shù)組的插入及排序操作,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-09-09
  • 簡(jiǎn)單理解Python中基于生成器的狀態(tài)機(jī)

    簡(jiǎn)單理解Python中基于生成器的狀態(tài)機(jī)

    這篇文章主要介紹了簡(jiǎn)單理解Python中基于生成器的狀態(tài)機(jī),來(lái)自于IBM官方技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • Python簡(jiǎn)單調(diào)用MySQL存儲(chǔ)過(guò)程并獲得返回值的方法

    Python簡(jiǎn)單調(diào)用MySQL存儲(chǔ)過(guò)程并獲得返回值的方法

    這篇文章主要介紹了Python調(diào)用MySQL存儲(chǔ)過(guò)程并獲得返回值的方法,涉及Python操作MySQL存儲(chǔ)過(guò)程的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • 跟老齊學(xué)Python之集合(set)

    跟老齊學(xué)Python之集合(set)

    本文主要內(nèi)容是要向各位介紹一種新的數(shù)據(jù)類(lèi)型:集合(set).徹底暈倒了,到底python有多少個(gè)數(shù)據(jù)類(lèi)型呢?又多出來(lái)了一個(gè).
    2014-09-09
  • PyTorch基本數(shù)據(jù)類(lèi)型(一)

    PyTorch基本數(shù)據(jù)類(lèi)型(一)

    這篇文章主要為大家詳細(xì)介紹了PyTorch基本數(shù)據(jù)類(lèi)型,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • pytorch鎖死在dataloader(訓(xùn)練時(shí)卡死)

    pytorch鎖死在dataloader(訓(xùn)練時(shí)卡死)

    這篇文章主要介紹了pytorch鎖死在dataloader(訓(xùn)練時(shí)卡死),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python隨機(jī)數(shù)模塊詳情

    Python隨機(jī)數(shù)模塊詳情

    這篇文章主要介紹了Python隨機(jī)數(shù)模塊,隨機(jī)數(shù)模塊實(shí)現(xiàn)了各種分布的偽隨機(jī)數(shù)生成器。對(duì)于整數(shù),從范圍中有統(tǒng)一的選擇。 對(duì)于序列,存在隨機(jī)元素的統(tǒng)一選擇、用于生成列表的隨機(jī)排列的函數(shù)、以及用于隨機(jī)抽樣而無(wú)需替換的函數(shù),下文來(lái)看看詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-11-11

最新評(píng)論

台湾省| 扶沟县| 龙海市| 青田县| 交城县| 左云县| 阜城县| 赣州市| 和林格尔县| 汉川市| 新泰市| 行唐县| 西和县| 芦溪县| 迁安市| 蒙阴县| 陇南市| 平乐县| 雅安市| 邳州市| 鄄城县| 色达县| 沧源| 渭南市| 金堂县| 万州区| 凯里市| 宁强县| 同仁县| 宁晋县| 凤冈县| 贺州市| 郑州市| 文安县| 泽库县| 上杭县| 泸定县| 肥东县| 绵阳市| 抚松县| 华蓥市|