除了 Cython 和 Pyarmor, Python 还能如何保护源代码 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
bigtear
V2EX    Python

除了 Cython 和 Pyarmor, Python 还能如何保护源代码

  •  
  •   bigtear 150 天前 2975 次点击
    这是一个创建于 150 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为要把程序发布到许多用户可以访问的 Docker 容器中,一些项目可以用 cython 编译成 so ,效果还可以,但是有些用到了 pydantic 、json 转换之类的库的项目用 cython 加密会导致程序运行出错,比如有的类型转换校验会出错。不改动原程序的话,这样的项目不能用 cython 了。好像还有一个 pyarmor 也能加密项目,但是它的授权方案不适合项目场景,请问各位还有其他方案吗?
    15 条回复    2025-05-21 21:30:50 +08:00
    bigtear
        1
    bigtear  
    OP
       150 天前 via Android
    话说没试过 nuitka ,之前用 nuitka 编译带 torch 的项目时间太长了,感觉小项目的话可以试试
    foolishcrab
        2
    foolishcrab  
       150 天前 via iPhone
    你是要发一个 public image 但是其中的 python 程序不想被看到源码?
    理论上没有完全不能逆向的办法,或者需要重新考虑下分发模式
    Riyue
        3
    Riyue  
       150 天前   2
    https://skywind.me/blog/archives/3002
    貌似是在 V2EX 看到并收藏的文章,文章后半部分讲了 python 加密
    icalloy
        4
    vicalloy  
       150 天前
    为什么第三方库也要编译,不管还是 cython 还是 nuitka 都可以只编译自己的代码。
    yb2313
        5
    yb2313  
       150 天前
    用...ai 改成 rust 重写
    iorilu
        6
    iorilu  
       150 天前
    docker 发布还想保护源码, 不太可能

    如果你真有啥牛逼算法, 建议搞成服务器得服务

    否则就算了, 不一定有人关心你的源码, 这年头随便啥功能, 让 ai 写一个能有多难
    312ybj
        7
    312ybj  
       150 天前   1
    nuitka 够你用了,你之前试的时间长,那是因为是第一次打包, 要把所有的都打成 C , 后续打包分钟级别就能完成了。 至于授权方案, 可以自己校验 sn 就行了,很容易扩展的
    Ritter
        8
    Ritter  
       150 天前
    @Riyue 看完才发现是韦易笑的 经常在知乎看到这个大佬
    weijar
        9
    weijar  
       150 天前
    自己写个程序把变量名混淆了。
    十年前我我写 python 程序卖时就自己整过一个 https://pyob.oxyry.com/
    这个小工具开发花了一星期,当然我早就不用 python 所以那个也早已废弃不更新了。
    jettzhang
        10
    jettzhang  
       150 天前
    nuitka 就完事了
    bronyakaka
        11
    bronyakaka  
       150 天前
    混淆+Cython ,又快又简单
    bronyakaka
        12
    bronyakaka  
       150 天前
    @bronyakaka 没注意标题,忽略
    maocat
        13
    maocat  
       149 天前
    巧了, 这两天正在搞 python 代码加密这块
    先说代码混淆
    现在代码混淆意义不大, 扔给 AI 给就能翻译出来, 而且开源的基本都是单文件混淆, 没有工程级别的

    Pyarmor 因为是商业软件, 不太好使用
    最终方案是使用的 Pyarmor 原理加解密.py 文件, 然后 py 文件转为 pyc(目前我试了下 python3.12+ 开源 pyc 反编译的结果不太行)
    加密秘钥和解密代码用 nuitka 做成.so
    bigtear
        14
    bigtear  
    OP
       148 天前
    @maocat 大佬可否细说,用它的原理,先混淆源代码然后转为 pyc ,加解密的话用单独的 so 库?有没有代码可以参考
    rahj
        15
    rahj  
       143 天前
    用的不靠谱
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     951 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 22:52 PVG 06:52 LAX 15:52 JFK 18:52
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86