python代码打包与加密

文章目录

    • pyinstaller
    • PyPI
    • cython(Linux环境)
    • 混淆
    • PyArmor

pyinstaller

  1. 安装pyinstaller

    pip install pyinstaller
    
       
       
         
         
         
         
    • 1
  2. 打包

    1. 打包成单个文件
      pyinstaller -F --clean *.py
      
           
           
             
             
             
             
      • 1
    2. 打包成多个文件
      pyinstaller -D --clean *.py
      
           
           
             
             
             
             
      • 1

    注意: 为了避免打包文件过大, 强烈建议将代码中的import *之类的语法改成按需引入, 不然可能会把整个package打包进来.

PyPI

待更新

 
 
   
   
   
   
  • 1

cython(Linux环境)

  1. 安装cython

    pip install cython
    
       
       
         
         
         
         
    • 1
  2. 用cython将python代码转换成c语言代码: 在对应的目录进入终端

    cython *.py
    
       
       
         
         
         
         
    • 1

    如果*处提供了具体的文件名, 那么只会产生一个c语言文件, 否则会将目录下的所有python代码转换成c语言并输出.

  3. 利用GCC进行编译

    gcc -c  -fPIC -I/PATH/  *.c
    gcc -shared *.o -o *.so
    
       
       
         
         
         
         
    • 1
    • 2
    1. 其中PATH为系统中Python.h所在的目录, 一般在系统python目录中的include中. 如使用Anaconda的话目录为home/USERNAME/anaconda3/include/python3.7m/(仅供参考, 可能与具体情况不同)
    2. 其中*为具体的c语言文件名字
  4. 随后便可得到多个编译好的动态库so文件, 使用时像正常python包import进入代码随后调用各方法即可(可以无损替换).


以下为顺带一提的加密方法

混淆

如oxyry等网站可以在线混淆代码, 大大降低代码的可读性, 而不影响代码的实际业务功能, 但其实没有特别大的加密作用.

# 混淆前
a = 'a'
_b = 'b'
def foo():
    print(a)
def _bar():
    print(_b)
foo()
_bar()

 
 
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
# 混淆后
a ='a'#line:1
_OO0OO000O00OO0OOO ='b'#line:2
def foo ():#line:4
    print (a )#line:5
def _OOOOOO0O00000OOO0 ():#line:7
    print (_OO0OO000O00OO0OOO )#line:8
foo ()#line:10
_OOOOOO0O00000OOO0 ()#line:11

 
 
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

其实还可以根据混淆后的结果再一次手动对部分函数名, 变量名进行混淆, 但一定要随时保存副本不然很难还原回去.

PyArmor

  1. 首先安装PyArmor

    pip install pyarmor
    
       
       
         
         
         
         
    • 1
  2. 命令 obfuscate 用来加密脚本。最常用的一种情况是切换到脚本 myscript.py 所在 的路径,然后执行:

    pyarmor obfuscate myscript.py
    
       
       
         
         
         
         
    • 1

    *PyArmor 会加密 myscript.py 和相同目录下面的所有 .py 文件:

     * 在用户根目录下面创建 .pyarmor_capsule.zip (仅当不存在的时候创建)
     * 创建输出子目录 dist
     * 生成加密的主脚本 myscript.py 保存在输出目录 dist
     * 加密相同目录下其他所有 *.py 文件,保存到输出目录 dist
     * 生成运行加密脚本所需要的全部辅助文件,保存到输出目录 dist
    
       
       
         
         
         
         
    • 1
    • 2
    • 3
    • 4
    • 5

具体使用方式可以参见PyArmor文档

你可能感兴趣的:(python)