Python 中使用 pyrex 生成 Linux 可执行文件
来源:互联网 发布:如何卖图片知乎 编辑:程序博客网 时间:2024/06/11 10:56
这个问题是相当有意义的,如果有了比较好的方法,Python 完全可以用来开发商业软件,而不用担心源代码泄露。
前两天我在网上看了看,有很多的人在问这个问题。大部分的人都在用 py2exe,这是个对 Python 程序打包的东东,实际上只是在 Python 程序中找 出依赖的模块,然后发布这个程序。好处在于可以让这个程序脱离 Python 的环境来执行,不用安装 Python 解释器。但实际上并不能保护源代码,因为源 代码其实也包含在其中了。更好的办法是使用 Pyrex。在 http: //www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ 可以下载到。本来 Pyrex 是一个用来混合 编写 Python 和 C 程序的东西,然后转换为 C 代码,再编译成可执行文件。于是这里就相当于提供了一种方法可以将 Python 代码转换为 C 代码,这样就可 以把 Python 程序编译为真正的可执行文件了!下面说说怎么做。假设我们有一个简单的 Python 程序,代码如下,假设文件名为 go.py。
def add(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)
2.添加一个头文件 go.pxi, 让主函数能找到 go.py 里的 C 函数的申明
cdef extern int (c_add(int, int))
3.编写一个主函数文件 main.c,在该主函数中包含 go.h (这个文件会自动生成), 并调用前面设计的 C 函数。
#include <stdio.h>#include <string.h>#include <Python.h>#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 上试过。(That's enough. - cloud)
- Python 中使用 pyrex 生成 Linux 可执行文件
- 关于python使用pyrex编译成可执行文件的问题
- windows python pyrex 扩展
- 使用py2exe生成可执行文件
- python中生成可执行文件的最好的办法是什么
- 使用py2exe将python 脚本生成exe可执行文件
- Linux中可执行文件
- 使用pyinstaller 生成exe可执行文件
- Python学习笔记·Python生成可执行文件
- Python脚本如何生成Windows可执行文件.exe
- Python脚本如何生成Windows可执行文件.exe
- Python脚本如何生成Windows可执行文件.exe
- 用makefile编译生成.a文件(linux静态库),并编译进可执行文件中
- linux使用autotools生成可执行文件、静态库、动态库Makefile的流程介绍
- 使用Myeclipse生成可执行文件的方法
- 使用PyInstaller2将Python脚本转化为可执行文件(中-使用部分)
- 使用 pyinstaller 打包 Python 程序为可执行文件
- python 将py脚本打包生成exe可执行文件
- Windows/Linux下使用Emacs+Slime+SBCL/SCHEME搭建LISP开发环境
- 购物网第一阶段总结笔记6:新闻管理模块之添加新闻(kindeditor在线编辑器的使用)
- 使用 rundll32.exe
- 可空枚举的实现方法
- review_js
- Python 中使用 pyrex 生成 Linux 可执行文件
- 莫陷入点击和评论陷阱
- 网站意见反馈(限输入字数)
- TI CC2530 IAR设置 (附带IAR for8051 V7.6 KeyGen ,IAR for 8051 V8.10 Keygen下载)
- java的几种对象(PO,VO,DAO,BO,POJO)解释
- iphone开发——保存图片到相册及容错处理
- POJ 2187 Beauty Contest
- JSP防注入代码
- Linux平台Makefile文件的编写基础篇和GCC参数详解