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

yipeiwu_com6年前Python基础

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 代码加密示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

Python字符串的一些操作方法总结

Python字符串的一些操作方法总结

我们在进行编程学习的时候,不管学习什么编程语言都会用到字符串,对于字符串的一些操作,我们很有必要学的精通一点。 我们在操作字符串的时候用到split用法,主要用来将字符串根据某些特殊要求...

Python之两种模式的生产者消费者模型详解

第一种使用queue队列实现: #生产者消费者模型 其实服务器集群就是这个模型 # 这里介绍的是非yield方法实现过程 import threading,time import...

基于Python的XSS测试工具XSStrike使用方法

基于Python的XSS测试工具XSStrike使用方法

简介 XSStrike 是一款用于探测并利用XSS漏洞的脚本 XSStrike目前所提供的产品特性: 对参数进行模糊测试之后构建合适的payload 使用payload对参数进行穷举匹配...

python基础教程之字典操作详解

字典dictionary 1.键值对的集合(map) 2.字典是以大括号“{}”包围的数据集合 3.字典是无序的,在字典中通过键来访问成员。 可变的,可嵌套,可以原处修改扩展等,不产生新...

python并发编程之多进程、多线程、异步和协程详解

最近学习python并发,于是对多进程、多线程、异步和协程做了个总结。 一、多线程 多线程就是允许一个进程内存在多个控制权,以便让多个函数同时处于激活状态,从而让多个函数的操作同时运行...