`
cloudhe
  • 浏览: 107646 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Python 中使用 pyrex 生成 Linux 可执行文件

阅读更多

    这个问题是相当有意义的,如果有了比较好的方法,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+# 为了方便看到函数调用,输出一下
    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(25);

    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)

 

 

From http://www.pythonid.com/html/fenleiwenzhang/lang/20070704/12.html

分享到:
评论

相关推荐

    Pyrex-0.9.9.tar.gz

    Pyrex的使用并不局限于直接编写扩展模块,它还可以用于创建C数据类型,这些类型在Python中作为内建类型使用,提供更好的性能。例如,开发者可以定义自己的数组类型,这些类型在内存中直接以C数组的形式存储,减少了...

    使用Pyrex来扩展和加速Python程序的教程

    标题中的“使用Pyrex来扩展和加速Python程序的教程”是指通过Pyrex这一工具来提升Python程序的性能。Pyrex是一种编程语言,它的主要目的是帮助开发者编写Python扩展模块,特别是那些需要高性能计算的部分。Pyrex结合...

    Python Cookbook

    16.11 自动化py2exe将脚本编译成Windows可执行文件的过程 585 16.12 在UNIX中将主脚本和模块绑成一个可执行文件 587 第17章 扩展和嵌入 590 引言 590 17.1 实现一个简单的扩展类型 592 17.2 用Pyrex实现一个...

    总结80个基本必考Python常见面试题.docx

    在 Linux 下,可以使用 supervisor 工具来管理后台进程,每次文件修改后再 Linux 执行 service supervisord restart。 七、何提高 python 的运行效率 可以使用生成器、关键代码使用外部功能包(Cython、pylnlne、...

    python优化算法工具包-整理一份可以让Python变得更快的工具清单,排序算法数据结构 最快的排序算法

    "Python优化算法工具包" Python优化算法工具包提供了一系列可以让Python变得更快的工具...Python优化算法工具包提供了一系列可以让Python变得更快的工具,可以帮助开发者优化Python代码,提高代码的执行速度和效率。

    pxcap - Python libpcap wrapper in Pyrex-开源

    pxcap通过Python接口将这种能力带给用户,使得在Python中编写数据包过滤逻辑变得更加简单。 TCP/IP解码器是pxcap的另一个重要组件,它能解析捕获的数据包,并将它们转换成可读的、有意义的信息。这涵盖了网络协议栈...

    python-spidermonkey

    python中的函数在spidermonkey中运行: &gt;&gt;&gt; class Foo: ... def hello(self): ... print "Hello, Javascript world!" &gt;&gt;&gt; cx.bind_class(Foo, bind_constructor=True) &gt;&gt;&gt; cx.eval_script("var f = new ...

    Python库 | Cython-3.0.0a8-cp39-cp39-manylinux1_i686.whl

    4. **导入和使用**:在Python中,你可以像导入任何其他Python模块一样导入编译后的Cython模块,并使用其中的函数和类。 **Cython的优势** 1. **性能提升**:通过Cython编写的代码可以显著提高执行速度,特别是对于...

    pyrex-tools-开源

    在 Python 中,通常我们使用 `import` 语句来引入模块,但当模块是用 Pyrex 编写的时,需要先将 Pyrex 代码编译成 C,然后再链接到 Python 解释器。`pyximport` 省去了这些步骤,它会在运行时自动检测并编译 Pyrex ...

    用于评估钢琴练习表现的 Python工具_python_代码_下载

    Hanon 的第 21 个练习的右手(以及用于生成的 Python 代码) 这个“分数”) 原型目录具有 Needleman-Wunsch 的实现 对齐算法和使用它来处理性能的脚本和 哈农第 21 次练习的成绩。 Czerny 是 Sebastian 的姊妹...

    pyrex:无缝容器设置,用于使用OpenEmbeddedYocto项目进行开发

    注意:如果将docker作为snap安装,Pyrex将无法正常运行,因为它将绑定不允许快照访问的安装文件。 请安装非快照版本的apt install docker.io ,例如apt install docker.io 快速入门指南(默认布局) 如果您的项目...

    Expert Python Programming(PACKT,2ed,2016)

    Moving on, you will learn to effectively create Python extensions with C, C++, cython, and pyrex. The important factors while writing code such as code management tools, writing clear documentation, ...

    python中setuptools的作用是什么

    Python中的`setuptools`是一个强大的包管理工具,它是Python标准库中的`distutils`的扩展。`distutils`虽然能够帮助开发者打包和分发Python模块,但它的功能相对有限,尤其是在处理复杂的依赖关系和构建高级功能如...

    Cython:一个Python转成C的编译器-python

    这使得 Cython 成为包装外部 C 库和加速 Python 代码执行的快速 C 模块的理想语言。 官方网站:https://cython.org/ 文档:http://docs.cython.org/ Github 存储库:https://github.com/cython/cython 维基:...

    提升Python程序运行效率的6个方法

    Cython可以让你编写接近C语言的Python代码,PyInline直接在Python代码中嵌入C代码,PyPy是一个快速的Python解释器,而Pyrex则允许混合使用Python和C数据类型。 2. **排序时使用键(key)**:在进行排序操作时,使用...

    Python Cookbook, 2nd Edition

    Python Cookbook, 2nd Edition By David Ascher, Alex Martelli, Anna Ravenscroft Publisher : O'Reilly Pub Date : March 2005 ISBN : 0-596-00797-3 Pages : 844 Copyright Preface The ...

    cffi-1.16.0.zip

    CFFI,全称为“C Foreign Function Interface”,是Python中用于与C语言进行交互的一种库。这个“cffi-1.16.0.zip”压缩包包含的是CFFI库的1.16.0版本,它允许Python程序员在Python程序中调用C语言编写的代码,无需...

    使用最广泛的Python到C编译器-Python开发

    Cython语言非常c欢迎使用Cython! Cython是一种使Python编写C扩展与Python本身一样容易的语言。 Cython基于Pyrex,但支持更多的尖端功能和优化。 Cython语言与Python语言非常接近,但是Cython还支持调用C函数以及在...

    Python性能优化技巧

    使用C、C++或者机器语言扩展包来执行关键任务能极大改善性能。这些包是依赖于平台的,也就是说,你必须使用特定的、与你使用的平台相关的包。简而言之,该解决方案提供了一些应用程序的可移植性,以换取性能,您可以...

Global site tag (gtag.js) - Google Analytics