使用Cython把py转成pyd文件

介绍

对于python这门语言来说,本身没有很好的加密方法,就算是pyc和pyo字节码文件也可以很轻松的用软件反编译出来。推荐反编译软件是Easy Python Decompiler。软件的下载地址是:https://sourceforge.net/projects/easypythondecompiler/

可以把pyc和pyo字节码文件全部反编译成原来的py文件。所以要想加密py文件有的办法是把py文件用cython转成c语言的文件然后再用编译成pyd文件,这样就可以很好的保护源代码。

软件的安装

Cython准确说Cython是单独的一门语言,专门用来写在Python里面import用的扩展库。实际上Cython的语法基本上跟Python一致,而Cython有专门的编译器先将 Cython代码转变成C(自动加入了一大堆的C-Python API),然后使用C编译器编译出最终的Python可调用的模块。官方的网址:http://cython.org/#documentation

首先得清楚自己安装的python的版本,如果是2.7的版本,那么对应的vs的编译版本就是vs2008,所有的python扩展库都要用同一种vs版本的编译器编译,不可以使用mingw32

来编译,因为python本身就是用vs来编译的。那么如果是3.0以上的版本,就会用vs2010以上的版本,要安装对应的版本。因为使用cython需要c编译器来编译代码。如果使用的2.7的版本,微软提供了专门用来编译python扩展库的工具。地址:https://www.microsoft.com/en-us/download/details.aspx?id=44266

如果你已经安装了vs2008的话就可以直接使用vs2008.

Cython安装直接用pip安装获取下载安装

pip install cython

下载完后要想使用微软的工具,就要升级setuptools工具,只有新版本的setuptools才可以识别到这个工具。更新命令:pip install setuptools -U

就会卸载以前的版本安装最新的脚本。

实例

首先要写一个配置文件来使cython来执行把py编译成pyd文件,最好把要编译的py文件都换成pyx为扩展名的文件。

参考资料:http://docs.cython.org/en/latest/src/tutorial/cython_tutorial.html

假设这个文件叫setup.py

# -*- coding: utf-8 -*-

#使用微软的那个工具要使用setuptools模块

import setuptools

from Cython.Build import cythonize

from setuptools.extension import Extension

# mit/log.py是文件的位置,比如某个文件夹。mit.log是import的时候模块的名字

extensions = [Extension('mit.log', ['mit/log.py'])]

setuptools.setup(

    # ext_modules = cythonize(extensions)

    ext_modules = cythonize("mit/*.py")

)

以上的数据写在一个文件里面。

如果是对整个文件夹加密,要在文件夹里面放一个__init__.py

主要的话是使用import setuptools来获取vs编译器版本。

可以选择那些文件编译成pyd,也可以对一个目录进行编译。然后执行命令比如  setup.py build_ext --inplace 之后就会生成pyd文件。

如果你想把所有的pyx文件都合成一个文件的话,可以参考一下的方法。

http://stackoverflow.com/questions/19646985/making-one-pyd-for-a-set-of-files-with-cython

在一个文件里面添加其它文件的引用,然后编译成一个文件。

其它实例以后再补充

猜你喜欢

转载自my.oschina.net/u/2000932/blog/840917