Python论坛  - 讨论区

标题:[python-chinese] [教程] 如何让你发布的可执行文件不包含Python字节码

2006年11月14日 星期二 14:17

jacob jacob在exoweb.net
星期二 十一月 14 14:17:44 HKT 2006

fdu.xiaojf在gmail.com wrote:
> Bruce Wang wrote:
>   
>> On 11/14/06, *Caspar Q* <caspar.q在gmail.com
>> caspar.q在gmail.com>> wrote:
>> 不要用windows的思路来考虑Linux/Unix下面的问题, 会碰钉子的
>>
>>     
> 假如是因为要隐藏代码而要做成可执行文件呢?
> _______________________________________________
>   


假设你自己写了一个python文件叫做 hello_world.py, 内容如下
def hello_world():

    print "Hello world!"

if __name__ == "__main__":
    hello_world()

现在你想将该文件转换为一个可执行文件,并且不容易通过解出字节码而被反向工程.
1. 用pyrex[1]将该文件转换为可以用来编译出extension module的形式
    python pyrexc hello_world.py
    这会生成一个文件hello_world.c

2. 自己写一个嵌入Python的主程序main.c
#include 

int
main(int argc, char *argv[])
{
  Py_Initialize();
  inithello_world();
  // 如果你还写了别的模块,例如utils, 也转换成c的形式, 则也要在此初始化
  // initutils();
  PyRun_SimpleString("import hello_world\nhello_world.hello_world()\n");
  Py_Finalize();
  return 0;
}

3. 将hello_world.c 和 main.c放在一起编译出可执行文件即可
在linux下用gcc编译是这样的
gcc -I /usr/include/python2.3 -l python2.3 -o hello_world.exe
hello_world.c main.c
在windows如何用vc编译请自行解决, 我手头没有windows开发环境

4. 可以辅助使用其他工具(例如加壳程序), 效果应该更佳

注: 没有在多线程条件下试过, 可能会有问题.
     另外, pyrex不支持在函数内嵌入函数.

[1] Pyrex  http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/
[2] 另外请看python文档里的Extending and Embedding the Python Interpreter部分

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号