当前位置 主页 > 网站技术 > 代码类 >

    Cython编译python为so 代码加密示例

    栏目:代码类 时间:2019-12-23 18:06

    1. 编译出来的so比网上流传的其他方法小很多。

    2. language_level  是python的主版本号,如果python版本是2.x,目前的版本Cython需要人工指定language_level.

    3. python setup.py build_ext --inplace  执行脚本

    4. 以下是代码片段

    from distutils.core import Extension, setup
     
    from Cython.Build import cythonize
    from Cython.Compiler import Options
     
     
    # __file__ 含有魔术变量的应当排除,Cython虽有个编译参数,但只能设置静态。
    exclude_so = ['__init__.py', "mixins.py"]
    sources = ['core', 'libs']
     
     
    extensions = []
    for source in sources:
      for dirpath, foldernames, filenames in os.walk(source):
        for filename in filter(lambda x: re.match(r'.*[.]py$', x), filenames):
          file_path = os.path.join(dirpath, filename)
          if filename not in exclude_so:
            extensions.append(
                Extension(file_path[:-3].replace('/', '.'), [file_path], extra_compile_args = ["-Os", "-g0"],
                     extra_link_args = ["-Wl,--strip-all"]))
     
     
    Options.docstrings = False
    compiler_directives = {'optimize.unpack_method_calls': False}
    setup( 
        # cythonize的exclude全路径匹配,不灵活,不如在上一步排除。
        ext_modules = cythonize(extensions, exclude = None, nthreads = 20, quiet = True, build_dir = './build',
                    language_level = 2 或者3 , compiler_directives = compiler_directives))

    以上这篇Cython编译python为so 代码加密示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持IIS7站长之家。