zoukankan      html  css  js  c++  java
  • 编译python源码

    编译python源码

     

     

    参考链接:

    https://blog.csdn.net/feijiges/article/details/77932382

    https://www.icode9.com/content-1-644421.html

    https://www.cnblogs.com/jclian91/p/10289820.html

    https://mp.weixin.qq.com/s/TTUFQRQ_DiKktJ5-J8O8Pg

     

    前提说明

    仅可加密.py结尾的python文件。

     

    由于windows版本执行加密源码的命令会存在一定的问题,所以以下场景都是在linux环境上做的。

    windows上执行源码加密出现的问题:

    1、无法加密__init__.py文件,如果要加密会报错。

    2、无法加密django的数据迁移文件,即migrations目录下的0***_initial.py等

    3、批量加密目录下的文件时默认输出是无序的(不是按照原目录结构方式输出)。

     

     

    加密

    依赖

    pip3 install cython

     

    加密命令

    python setup.py build_ext

    加密单个文件

    # setup.py
    from distutils.core import setup
    from Cython.Build import cythonize
    
    # 相对路径:task.py和setup.py隶属于同一目录
    setup(ext_modules=cythonize('task.py'))
    
    # 相对路径:task.py和src在同一目录
    #setup(ext_modules=cythonize('src/task.py'))
    
    # 绝对路径:task.py和src在同一目录
    #setup(ext_modules=cythonize('/var/mycode/src/task.py'))

    加密的结果就是在当前目录下生成build文件夹,在linux系统下生成的加密文件是以so结尾的,而在windows下生成的是以pyd结尾的文件。

    目录结构如下:

     

    加密单个文件

    # setup.py
    
    import os
    
    # 获取当前文件父目录下的子目录
    src_path = []
    path = os.path.dirname(os.path.abspath(__file__))
    for p in os.listdir(path):
        p_inner = os.path.join(path, p)
        if os.path.isdir(p_inner):
            src_path.append(p_inner)
    
    # 递归获取src_path里每个目录里的要编译的py文件
    py_files = [os.path.join(path, file_name)
                for compile_path in src_path
                for path, _, file_list in os.walk(compile_path)
                for file_name in file_list if file_name.endswith('.py')]
    print(py_files)
    
    from distutils.core import setup
    from Cython.Build import cythonize
    
    setup(ext_modules=cythonize(py_files))

    加密整个项目(例如:Django)

    src_dir = '/home/liuwei/mycode/project'
    to_encrypt = [os.path.join(path, file_name)
                  for path, _, file_list in os.walk(src_dir)
                  for file_name in file_list if file_name.endswith('.py')]
    
    setup(ext_modules=cythonize(to_encrypt))
    python setup.py build_ext

     

    前进时,请别遗忘了身后的脚印。
  • 相关阅读:
    EXCEL自动导出HTML
    亡灵序曲超清
    支持国产动画-唐伯卿和曾小兰
    中国表情
    logging 日志
    datetime库运用
    hashlib 加密
    os2
    python json数据处理
    python操作redis
  • 原文地址:https://www.cnblogs.com/liudaihuablogs/p/13463230.html
Copyright © 2011-2022 走看看