把python文件打包成二进制文件,封装代码,达到保护代码的目的

通过cpython把python的文件转换为二进制文件,达到代码保护的目的

参考文档  http://docs.cython.org/en/latest/


1、下载Cython-0.28.2.tar.gz 
    python setup.py install安装


2、创建你需要打包成二进制的python文件
    test.py
    def hello(s):
        print(s)


3、创建一个setup.py文件,内如如下:
    from distutils.core import setup
    from Cython.Build import cythonize


    setup(
        name = "test",
        ext_modules = cythonize("test.py")
    )


4、运行编译程序
    python setup.py build_ext --inplace


5、得到的test.so文件可以直接当成模块,通过python调用 

注意:

      1、编译的时候,如果执行命令的目录是python包(里面有__init__.py),则编译的路径会改变

      2、当文件改变,或者so文件被删除掉了,重复运行编译命令会重新编译,如果原py文件大小没有改变,so依旧存在,则重新编译不会编译

附带代码:

    

def py2so(root_dir,file_path):
    u"""
    @root_dir 应用的上级
    @file_path文件的路径
    把指定的py文件编译成so文件,如果so文件存在,原py文件没有改变大小,则不编译。
    """
    COMPILE_S = u"""
from distutils.core import setup
from Cython.Build import cythonize

setup(
    name = "temp",
    ext_modules = cythonize("{path}")
)"""
    if not os.path.exists(file_path):
        return False
    setup_file = COMPILE_S.format(path=file_path)
    so_file = file_path.replace(".py",".so")
    t = tempfile.NamedTemporaryFile(suffix='.py',delete = False)
    path = t.name
    t.write(setup_file)
    t.close()
    command = "python {path} build_ext --inplace".format(path=path)
    logger.info("command='%s'"%command)
    os.chdir(root_dir) #编译的时候,会在这个目录下面生成按照文件路径的so
    os.system(command)
    os.remove(path) #删除临时文件
    if os.path.exists(so_file):#编译好了so之后,删除py文件
        os.remove(file_path)
    return True





  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值