python的程序可以编译成二进制可执行文件么
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python的程序可以编译成二进制可执行文件么相关的知识,希望对你有一定的参考价值。
python下编译py成pyc和pyo其实很简单,
用
python -m py_compile file.py
python -m py_compile /root/src/file1,file2.py
编译成pyc文件。
也可以写份脚本来做这事:
Code:
import py_compile
py_compile.compile('path') //path是包括.py文件名的路径
用
python -O -m py_compile file.py
编译成pyo文件。
1.其中的 -m 相当于脚本中的import,这里的-m py_compile 相当于上面的 import py_compile
2.-O 如果改成 -OO 则是删除相应的 pyo文件,具体帮助可以在控制台输入 python -h 查看
========================
from:http://blogold.chinaunix.net/u3/93255/showart_1944929.html
什么是pyc文件
pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的虚拟机来执行的,这个是类似于JAVA或者.NET的虚拟机的概念。pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的,2.5编译的pyc文件,2.4版本的 python是无法执行的。
什么是pyo文件
pyo是优化编译后的程序 python -O 源文件即可将源程序编译为pyo文件
什么是pyd文件
pyd是python的动态链接库。
为什么需要pyc文件
这个需求太明显了,因为py文件是可以直接看到源码的,如果你是开发商业软件的话,不可能把源码也泄漏出去吧?所以就需要编译为pyc后,再发布出去。当然,pyc文件也是可以反编译的,不同版本编译后的pyc文件是不同的,根据python源码中提供的opcode,可以根据pyc文件反编译出 py文件源码,网上可以找到一个反编译python2.3版本的pyc文件的工具,不过该工具从python2.4开始就要收费了,如果需要反编译出新版本的pyc文件的话,就需要自己动手了(俺暂时还没这能力^--^),不过你可以自己修改python的源代码中的opcode文件,重新编译 python,从而防止不法分子的破解。
生成单个pyc文件
python就是个好东西,它提供了内置的类库来实现把py文件编译为pyc文件,这个模块就是 py_compile 模块。
使用方法非常简单,如下所示,直接在idle中,就可以把一个py文件编译为pyc文件了。(假设在windows环境下)
import py_compile
py_compile.compile(r'H:\game\test.py')
compile函数原型:
compile(file[, cfile[, dfile[, doraise]]])
file 表示需要编译的py文件的路径
cfile 表示编译后的pyc文件名称和路径,默认为直接在file文件名后加c 或者 o,o表示优化的字节码
from:http://www.cnblogs.com/dkblog/archive/2009/04/16/1980757.html 参考技术A 青蛙地宝吐了个leafUi9
python发展介绍之笔记
编译型:先编译---生成可执行文件(机器码)---运行程序。一次性将源代码转换成可执行文件后再运行程序。如:C、C++
解释型: 不需要先编译。运行的前一刻还没有可执行程序,执行时候,有一个称之为解释程序的外壳程序将源代码转换成二进制代码以供执行。如:Python 、JAVA
编译型与解释型的区别:编译型如一本外文书,需要先翻译完才可以看。这翻译需要花一定的时间等待。解释型是一本外文书,翻译一点看一点。
动态语言: 定义变量前不需要声明类型。如:Python、Ruby
静态语言:所有的变量都需要声明类型。如:C 、 C++ 、 C# 、JAVA
强类型:变量指定了数据类型,若不经强制转换,永远都是此类型。如:Python、JAVA
弱类型:一个变量可赋多个不同数据类型的值
Python:动态语言、强类型、解释型
优点:
1.入门易
2.效力高
3.高级语言
4.可移值性
5.可扩展性
6.可嵌入性
缺点:
1.速度慢
2.代码不加密
3.多线程不能用多核
以上是关于python的程序可以编译成二进制可执行文件么的主要内容,如果未能解决你的问题,请参考以下文章