Cython编译python为so 代码加密示例
1.编译出来的so比网上流传的其他方法小很多。
2.language_level 是python的主版本号,如果python版本是2.x,目前的版本Cython需要人工指定language_level.
3.pythonsetup.pybuild_ext--inplace 执行脚本
4.以下是代码片段
fromdistutils.coreimportExtension,setup
fromCython.Buildimportcythonize
fromCython.CompilerimportOptions
#__file__含有魔术变量的应当排除,Cython虽有个编译参数,但只能设置静态。
exclude_so=['__init__.py',"mixins.py"]
sources=['core','libs']
extensions=[]
forsourceinsources:
fordirpath,foldernames,filenamesinos.walk(source):
forfilenameinfilter(lambdax:re.match(r'.*[.]py$',x),filenames):
file_path=os.path.join(dirpath,filename)
iffilenamenotinexclude_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代码加密示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。