目的:使用cpython加密成so文件,达到保密的目的,同时有加速的效果。

    cpython_test.zip

    1、项目根目录创建文件,修改其中的忽略文件

    setup.py

    1. import os
    2. import re
    3. from distutils.core import Extension, setup
    4. from Cython.Build import cythonize
    5. from Cython.Compiler import Options
    6. # 忽略文件
    7. exclude_so = ['__init__.py', "setup.py", "main.py"]
    8. # 目标目录
    9. sources = ['./']
    10. extensions = []
    11. for source in sources:
    12. for dir_path, folder_names, filenames in os.walk(source):
    13. for filename in filter(lambda x: re.match(r'.*[.]py$', x), filenames):
    14. print(filename)
    15. file_path = os.path.join(dir_path, filename)
    16. if filename not in exclude_so:
    17. print("debug point ", file_path[:-3].replace('/', '.')[2:])
    18. extensions.append(
    19. Extension(file_path[:-3].replace('/', '.')[2:], [file_path], extra_compile_args=["-Os", "-g0"],
    20. extra_link_args=["-Wl,--strip-all"]))
    21. print("debug point 1")
    22. Options.docstrings = False
    23. compiler_directives = {'optimize.unpack_method_calls': False}
    24. setup(
    25. ext_modules=cythonize(extensions, exclude=None, nthreads=20, quiet=True, build_dir='./build',
    26. language_level=3, compiler_directives=compiler_directives))
    27. # python3 setup.py build_ext --inplace # 带inplace会把so文件生成到对应的目录,删除py即可。

    2、编译

    1. # 带inplace会把so文件生成到对应的目录,删除py即可。
    2. python3 setup.py build_ext --inplace
    3. # 如果不附带--inplace,会把so生成到build/lib.linux-x86_64-3.7目录下。整体考出来即可。

    3、正常运行

    1. python3 main.py