在http: //www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/下载。本来Pyrex是一个用来混合 编写python和c程序的东西,然后转换为c代码,再编译成可执行文件。于是这里就相当于提供了一种方法可以将python代码转换为c代码,这样就可 以把python程序编译为真正的可执行文件了。
而py2exe只是一个对python程序打包的工具。它可以让这个程序脱离python环境来执行,但并不能保护源代码,因为源 代码其实也包含在其中。
步骤:
1。使用obfuscator 混淆 python 代码;
2。使用 pyrex转换成C代码;
3。编译成exe或者dll库。
假设我们有一个简单的python程序,文件名为 go.py
def add(a, b):
print a+b # 为了方便看到函数调用,输出一下
retur a+b
print a+b # 为了方便看到函数调用,输出一下
retur a+b
1.修改go.py文件,在里面添加一个c函数,当然要用Pyrex的语法,用这个函数来调用python程序的入口函数(在这里就是add了)。修改go.py为go.pyx。
在这里就是添加一个:
cdef public int c_add(int a, int b):
return add(a, b)
return add(a, b)
cdef extern int (c_add(int, int))
3.编写一个主函数文件main.c,在该主函数中包含go.h(这个文件会自动生成), 并调用前面设计的c函数。
#include
#include
#include
#include "go.h"
int main(int argc, char *argv[])
{
Py_Initialize();
initgo(); // 这个地方的函数名字为init加上模块名,就是原来那个py文件的名字
c_add(2, 5);
Py_Finalize();
return 0;
}
#include
#include
#include "go.h"
int main(int argc, char *argv[])
{
Py_Initialize();
initgo(); // 这个地方的函数名字为init加上模块名,就是原来那个py文件的名字
c_add(2, 5);
Py_Finalize();
return 0;
}
pyrexc go.pyx
gcc go.c main.c -I/usr/include/python2.5 -L/usr/lib/ -lpython2.5 -o go
就生成了叫go的可执行文件,执行它,就得到了想要的结果!
注:此方法在linux上通过。
没有评论:
发表评论