python3源码保护_保护你的Python源代码

自从发现Python的简单之后,一些对效率要求不高的地方博主基本上就懒得用C之类的语言了。但是Python脚本的代码保护就是个问题。

之前会考虑用C与Python混合编程,后来发现一种方法可以直接将.py封装成.so库文件,这是何等骚气的操作。果断分享。

一、准备工作

测试系统:debian 8;python版本:2.7.9。

1. 安装gcc和python-dev:

sudo apt install gcc python-dev

2. 安装cython,建议使用douban源:

sudo pip install cython -i https://pypi.douban.com/simple

二、实施

1. 我先准备了一个脚本:TestHello.py,里面有三个函数hello1(),hello2(),max(x, y)

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

2

3 defhello1():4 print 'Life is short, I use Python.'

5

6

7 defhello2():8 print

9 print 'Zen of Python'

10 print 'Beautiful is better than ugly.'

11 print 'Explicit is better than implicit.'

12 print 'Simple is better than complex.'

13 print 'Complex is better than complicated.'

14 print

15

16

17 defmax(x, y):18 return x if x > y elsey19

20

21 if __name__ == '__main__':22 hello1()23 hello2()24 print max(100, 99)

2. 现在我要把这个脚本封闭起来,首先在新建一个setup.py:

1 from distutils.core importsetup2 from Cython.Build importcythonize3

4

5 setup(ext_modules=cythonize(["TestHello.py"]))

这里需要说明以下几点:

setup.py与TestHello.py最好在同一个目录下,如果需要转换的文件很多,setup可以单独放一个位置,但第5行cythonize()里应当使用文件的绝对路径;

注意cythonize()的参数是一个list,也就是说,可以一次转换多个脚本文件。

3. 开始转换

python setup.py build_ext

4. 运行完成后,当前目录会多出一个目录build、一个文件TestHello.c:

ae6574d798f9fdc31a975d019e179367c2d.png 可以看到./build/lib.linux-i686-2.7/TestHello.so就是我们需要的文件。(系统不同,目录名称会不一样)

我这里直接在原目录中测试一个新的脚本test.py。

a2248896e6fbf87a7c46b1554c1a9989f44.png

1 from TestHello import *

2

3 hello1()4 hello2()5 print max(50, 64)

运行一下:

python test.py

8b6a74e52c15857d96141c97e2d2e3b7606.png

虽然没有TestHello.py,但是却可以正常调用里面的函数。

大功告成!

P.S.:Windows 下如何将 .py 转换成 .dll(动态链接库文件)

Python 2.7:cython + MinGW gcc + Microsoft Visual C++ Compiler for Python 2.7 或者直接cython + VS/VC++

Python 3.x:cython + VS/VC++

步骤与linux下基本一致,申明一点,Windows下博主没有测试,有兴趣可以参考:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值