如何编译Python程序

py源代码编译pyc 什么是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文件
pyo是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表示优化的字节码

dfile 这个参数英文看不明白,请各位大大赐教。(鄙视下自己)原文:it is used as the name of the source file in error messages instead of file

doraise 可以是两个值,True或者False,如果为True,则会引发一个PyCompileError,否则如果编译文件出错,则会有一个错误,默认显示在sys.stderr中,而不会引发异常

(来自python2.5文档)

批量生成pyc文件
一般来说,我们的工程都是在一个目录下的,一般不会说仅仅编译一个py文件而已,而是需要把整个文件夹下的py文件都编译为pyc文件,python又为了我们提供了另一个模块:compileall 。使用方法如下:

 

import compileall

compileall.compile_dir(r'H:\game')


这样就把game目录,以及其子目录下的py文件编译为pyc文件了。嘿嘿,够方便吧。来看下compile_dir函数的说明:

 

compile_dir(dir[, maxlevels[, ddir[, force[, rx[, quiet]]]]])

dir 表示需要编译的文件夹位置

maxlevels 表示需要递归编译的子目录的层数,默认是10层,即默认会把10层子目录中的py文件编译为pyc

ddir 英文没明白,原文:it is used as the base path from which the filenames used in error messages will be generated。

force 如果为True,则会强制编译为pyc,即使现在的pyc文件是最新的,还会强制编译一次,pyc文件中包含有时间戳,python编译器会根据时间来决定,是否需要重新生成一次pyc文件

rx 表示一个正则表达式,比如可以排除掉不想要的目录,或者只有符合条件的目录才进行编译

quiet 如果为True,则编译后,不会在标准输出中,打印出信息

(来自python2.5文档)

 

总结
通过上面的方法,可以方便的把py文件编译为pyc文件了,从而可以实现部分的源码隐藏,保证了python做商业化软件时,保证了部分的安全性吧,继续学习下,看怎么修改opcode。
 

 
 
 原文地址 http://blog.csdn.net/sislcb/archive/2009/03/18/4002414.aspx 
 
py源代码编译pyc 什么是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文件
pyo是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表示优化的字节码

dfile 这个参数英文看不明白,请各位大大赐教。(鄙视下自己)原文:it is used as the name of the source file in error messages instead of file

doraise 可以是两个值,True或者False,如果为True,则会引发一个PyCompileError,否则如果编译文件出错,则会有一个错误,默认显示在sys.stderr中,而不会引发异常

(来自python2.5文档)

批量生成pyc文件
一般来说,我们的工程都是在一个目录下的,一般不会说仅仅编译一个py文件而已,而是需要把整个文件夹下的py文件都编译为pyc文件,python又为了我们提供了另一个模块:compileall 。使用方法如下:

 

import compileall

compileall.compile_dir(r'H:\game')


这样就把game目录,以及其子目录下的py文件编译为pyc文件了。嘿嘿,够方便吧。来看下compile_dir函数的说明:

 

compile_dir(dir[, maxlevels[, ddir[, force[, rx[, quiet]]]]])

dir 表示需要编译的文件夹位置

maxlevels 表示需要递归编译的子目录的层数,默认是10层,即默认会把10层子目录中的py文件编译为pyc

ddir 英文没明白,原文:it is used as the base path from which the filenames used in error messages will be generated。

force 如果为True,则会强制编译为pyc,即使现在的pyc文件是最新的,还会强制编译一次,pyc文件中包含有时间戳,python编译器会根据时间来决定,是否需要重新生成一次pyc文件

rx 表示一个正则表达式,比如可以排除掉不想要的目录,或者只有符合条件的目录才进行编译

quiet 如果为True,则编译后,不会在标准输出中,打印出信息

(来自python2.5文档)

 

总结
通过上面的方法,可以方便的把py文件编译为pyc文件了,从而可以实现部分的源码隐藏,保证了python做商业化软件时,保证了部分的安全性吧,继续学习下,看怎么修改opcode。
 

 
 
 原文地址 http://blog.csdn.net/sislcb/archive/2009/03/18/4002414.aspx 
 


========================

 

如何编译Python程序(或者如何由Python生成可执行文件)是一个非常常见的问题,总是有人问,列出来,google搜索的时候就可以看到了。如果还有人说"找不到相关资料",唯一的解释就是这个人太懒了,根本没有去找。

如果转载,请注明作者是牡蛎,出自http://blender.blogchina.com/523381.html

 

   0. Python(及其它高级的脚本语言)不存在把指令编译到本地代码的工具,但是总是可以发布可执行文件。

 

py2exe     http://py2exe.sf.net
只支持windows平台,应该是大家听到最多的一个名字了,用户不少,所以有问题的话在它的mail list里面很容易找到答案。文档中提到了"无法找到某某code"、使用opengl等模块的问题
 

PyPackage    http://codereactor.net/projects/pypack/index.html
我觉得py2exe等等工具还是罗嗦得像唐僧,需要在配置文件中写上需要的数据文件。作者完全无视这样一个事实:我需要发布可执行文件的时候,程序已经完工了,所有的数据文件就在主程序所在目录下,所以多数情况下,根本不用到别的地方搜索。现在终于有人站了出来,PyPackage实际上并不是一个程序打包的工具,而只是简化py2exe的操作,甚至可以自动调用InnoSetup 5制作安装文件——不过这个软件并不智能,会打包很多不需要的文件
 

Installer     http://www.mcmillan-inc.com/installer_dnld.html
可以产生windows、linux平台的可执行文件,现在作者主页连不上去了,但是搜索一下可以在其它地方下载
自带一个小程序写配置文件,如果程序较复杂,还是需要手工修改这个配置文件。支持从py15以来的所有Python版本
2005年9月,冰冻牡蛎更新:Giovanni Bajo获得Gordon McMillan's Installer的授权、版权改变为GPL,并在http://pyinstaller.hpcf.upr.edu/继续开发PYinstaller。2006年9月更新:这里可以看到Gordon McMillan's的原始网站的镜像
 

Python自带的freeze.py(不过windows版本不带这个,你可以自己下载Python的源程序再找)。这个是我最不推荐的一种方法(为什么?自己看),不过如果你的Python程序要发布到其它工具不支持的平台上,可以考虑这个方法
 

新出来的Pyco    http://www.pythonapocrypha.com/projects/pyco/
还没用过
 

Squeeze    http://starship.python.net/crew/fredrik/ipa/squeeze.htm
还没用过,只支持Python 1.4
 

cx_Freeze  http://starship.python.net/crew/atuining/cx_Freeze/
winodws、linux平台。简单的程序甚至都不需要写配置文件
 

Stand alone Python for Windows http://arctrix.com/nas/python/standalone.html
如果你不介意源程序太过"暴露"的话,用这个吧
会不会觉得Updated: Sun, 09 Apr 2000 18:39:54 -0600 扎眼?如果你看一看它的VC源代码,就不会这么想了——其实这是普遍适用于win系统的方法,无论是98、2000或者xp。也许也可以用到linux上——我不懂linux,如果真的可以这么做,还请告诉我。
 

py2app    http://undefined.org/python/
支持linux平台的工具可能也支持mac os,或者直接使用这个py2app。具体就不知道了,只吃过苹果,还没玩过苹果呢
 

Movable Python  http://www.voidspace.org.uk/python/movpy/
这个其实是使用py2exe制作的、可以放在U盘上的绿色Python。有使用py2app制作苹果版movpy和用cx_Freeze制作Linux版movpy的计划。懒到都不愿意学习py2exe、py2app或者cx_Freeze的人可以看看。
 

Shed Skin - A Python-to-C++ Compiler: 试验项目,windows上,连他的例子我都没有编译成功 :(。
 

Psyco: 给Python程序加速的东西,看不出对发布Python程序的直接好处,并且作者以后将致力于PyPy。
 

PyPy: 项目目标是纯Python实现的Python、速度比CPython快,将来可以帮助实现编译Python。
 

pyc: Python compiler in Python,一个用纯Python写的Python的bytecode编译器,可以优化输出的pyc文件。和PyPy一样,现在还看不出对发布Python程序的直接好处。只有py24的bytecode。pyc是pyvm这个新的python虚拟机的一部分。
 

Jungle: 使用GNU工具(as、ld和winres)把Python程序编译到windows的exe可执行文件。该可执行文件只使用基于python24的的pythonic.dll。猜测它支持的模块仅限于内部模块以及jungle.jgl列出的模块。只有可执行文件下载,而这个可执行文件也是用Jungle自己编译的。目前版本号都到1.10了,经常看0.xx的版本号,这个数字好大啊,娃哈哈。
 

另类的方法,对Python语言特性都还不是100%支持,众多的CPython模块也不可以使用,还有,我也没有试过:

for .NET的Python编译器(如Visual Python、IronPython),不过我可不喜欢为了一个芝麻大的软件安装.NET framework

用jython,然后用jbuilder、jsmooth、NativeJ之类的包裹一下,或者用gcj编译成本地代码
 

2006年11月26日,近来有些人问,如何保护python开发的商业软件/闭源软件。

我的观点是,纯Python程序,又不想用C语言(其实C语言程序也可以破解,所以最好的方法就是不发布任何程序,嘿嘿),可以试试pyobfuscate混淆源代码,增加可能被反编译获得的源代码的阅读难度。不过pyobfuscate也好久没有更新了,娃哈哈。而实际上,没必要考虑别人会获得源代码的问题。 考虑(尤其是在自己的程序还没有写出来的时候)别人会反编译自己的Python程序,有点杞人忧天。

在*nix下的话,似乎可以(我不用*nix,并不确定)使用Python自带的freeze.py,把源程序的字节码转换成C程序,然后使用GCC编译,这样应该看不到字节码了。在windows下,不知道怎么使用freeze.py,总报错——谁知道的话告诉我吧。但是如果想实现跨平台,使用freeze.py的方法似乎不可取。


首先我相信,目前没有软件可以很好反编译Python 2.4及之后的版本生成的字节码,所以采用新版本Python“编译”到可执行文件,是安全的。

其次,据我所知,目前最成熟的反编译软件只有decompyle。而不是象某些人为了夸大问题的重要性,而口吐莲花所说的“现在有很多Python的反编译软件”。而我不相信有人愿意花钱买这个“唯一的且很多的”反编译软件,理由有二

看看decompyle页面更新日期,是2004年。我猜测作者把这个软件商业化之后并不成功,并没有太多人需要反编译自己或者他人的Python程序。导致作者没有足够的收入或者兴趣继续完善了

有人愿意花钱去反编译一个还不存在地软件,或者一个不出名的程序?

 

次成熟的反编译软件是decompiler.py。但是它比商业软件decompyle差远了。我没有去做试验,是他自己的主页承认说有很多局限的。

最后,真诚请教那些有“很多”Python反编译程序的高手,两个问题:

subsystem.htm
这是将数独游戏和消除游戏结合起来的益智游戏,未注册的话,只能累积玩60分钟。这是Python+pygame制作的软件,使用py2exe发布,可否麻烦高手——别怕,我不要它的源程序——看看它的注册部分,整个注册机/注册码出来?

wingide
这个有名的Python商业ide,我不确定它是不是使用py2exe制作的,而且它的规模比较大。我对它的源代码有点兴趣,有人说看不到它的源代码,但是我觉得\bin\2.4\src.zip里面的一堆pyo,是如假包换的源代码的字节码,如果真是如此,麻烦高手在空余时间,反编译一份喽。

 

【nuitka】编译python程序 python-nuitka:编译python程序使用的库简介安装windows下使用示例常用参数优缺点 使用的库 nuitka 简介 nuitka可以将python代码转化为C++代码,然后进行编译,生成exe文件 安装 pip install nuitka windows下使用示例 如我要将pytable.py文件编译为exe文件 首先在命令行中cd到所在目录,输入nuitka pytable.... 阅读详情

相关推荐

python生成的exe应用程序编译与反编译

如果使用python写了程序,有时候希望将程序打包成一个应用程序,如exe,这时候可以使用pyinstaller,来打包应用程序。 可以使用pip安装: pip install pyinstaller 如果是使用pycharm平台,可以使用上面的pip安装,也可以直接插件安装: 安装好pyinstaller插件后,使用: pyinstaller yourprogram.py 来打包你的程序。 输入指令,就开始自动打包,最后可以在输出文件夹里看到生成的main.exe文件: 上面就是打包的过程。

用沸腾的热血,支付我们的人生吧! 3821

python如何编译_如何编译python文件

1、说明编译python程序就是把python脚本转换成操作系统中的可执行文件,一般使用pyinstaller来完成。2、步骤(1)安装pyinstaller使用pipinstallpyinstaller命令来安装(2)编译脚本python安装目录\script\pyinstaller脚本文件名(3)完成执行脚本后就可以在脚本目录生成dist目录,目录就有打包好的可执行文件3、备注pyinstaller参数-w指令直接发布的exe应用带命令行调试窗口,在指令内加入-w命令可以屏蔽。-F指令。

2301_76161259的博客 3435

【100%通过率】华为OD机试真题 Python【数字最低位排序】【最低位排序】

2023华为OD机试真题 Python【数字最低位排序】【最低位排序】 给定一个非空数组(列表) 起元素数据类型为整型 请按照数组元素十进制最低位从小到大进行排序 十进制最低位相同的元素,相对位置保持不变 当数组元素为负值时,十进制最低为等同于去除符号位后对应十进制值最低位

MISAYAONE的博客 1841

python如何编译代码?

python如何编译代码?

xiangxue888的博客 8049

python如何编译_python编译命令

经常听到有人说,35岁是职场的分水岭,但我觉得我的35岁,人生才刚刚开始。35岁前后,我生二胎,考研,跳槽,转行,从传统行业到服务业,从服务业到新能源行业,每一次决定都让我感觉无比正确。无论职业还是家庭,各方面逐渐向好,我突然有一种开窍的感觉,比五年前、十年前的状态更好。我毕业于一所普通学校,刚毕业时,跟很多人一样挺迷茫,不知道该做什么,只能走一步算一步。为什么我第一份工作会去做HR?也是机缘巧合,无意中踏上这个岗位,在一个传统制造行业,从小白做起,待了将近十年,都没有动过(跳槽)。

m0_59235508的博客 2018

python编译过程和执行原理

python编译过程和执行原理 (1)python执行原理 这里的解释执行是相对于编译执行而言的。我们都知道,使用C/C++之类的编译性语言编写的程序,是需要从源文件转换成计算机使用的机器语言,经过链接器链接之后形成了二进制的可执行文件。运行该程序的时候,就可以把二进制程序从硬盘载入到内存中并运行。 但是对于Python而言,python源码不需要编译成二进制代码,它可以直接从...

helloxiaozhe的博客 7万+

python程序可以编译吗_编译-是否可以编译Python编写的程序

编译-是否可以编译Python编写的程序?我是Python编程语言的新手。 我想知道是否可以编译Python编写的程序。是否可以将Python脚本转换为一些较低级别的编程语言,然后再将其编译为二进制代码?正在考虑使用Python进行编码的开发人员可能希望保持开放的可能性,以便以后可以进行二进制分发。bjh Hans asked 2020-07-22T05:43:56Z7个解决方案41 vote...

weixin_39638057的博客 1589

python程序编译为exe文件

python程序编译为exe文件编译后exe文件存放在dist目录pycharm安装pyinstallerCMD进入Windows命令行合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章...

weixin_43425561的博客 1045

python程序需要编译

因此,从严格意义上讲,Python需要“编译”,但这不是传统意义上的编译成可执行文件,而是编译成字节码。当您首次运行一个.py文件时,Python解释器会检查是否存在对应的.pyc文件(编译后的字节码)。然而,最终执行这些字节码的是Python虚拟机,它作为一个软件层来解释字节码指令,而不是由计算机的CPU直接执行。开发者甚至可以直接反编译字节码文件来查看程序逻辑,这虽然带来了便利,但也意味着代码在一定程度上是透明的,对于需要严格保护知识产权的场景,可能需要借助代码混淆或编译成C扩展等额外手段。

weixin_43242609的博客 1181

python程序编译

对于linux和其它的类UNIX操作系统,在安装时就会安装python.当然你可以在终端上输入python来看一下。如果已经安装了,那会会显示两行信息,并提示输入命令>>>.对于python程序可以用两种方法来编译

学习日记 1010

python编译问题 当你编译第一个python程序时可能出现如下错误

【代码】python编译问题 当你编译第一个python程序时可能出现如下错误。

weixin_65644655的博客 356

python语言不用编译_python程序不需要编译

python编译过程和执行原理(1)python执行原理这里的解释执行是相对于编译执行而言的。我们都知道,使用C/C++之类的编译性语言编写的程序,是需要从源文件转换成计算机使用的机器语言,经过链接器链接之后形成了二进制的可执行文件。运行该程序的时候,就可以把二进制程序从硬盘载入到内存中并运行。但是对于Python而言,python源码不需要编译成二进制代码,它可以直接从源代码运行程序。当我们运行...

weixin_39897449的博客 5705

python编译出来的程序_编译python程序后,如何输入参数

在import sys之后,我使用sys.argv获取输入参数。但在我用pyinstaller编译程序之后,exe程序将不接受我的输入。它将只使用我为程序设置的默认值。如何编译它并让exe文件接受我的输入?我希望我不需要为它编写gui。很抱歉回信迟了。代码如下:import sched, timeimport syss = sched.scheduler(time.time, time.sleep...

weixin_39887221的博客 180

Python文件编译为exe可执行程序

本篇介绍了用PyInstaller编译Python文件为exe程序的方法。介绍了PyInstaller的安装、常用参数,编译方法和“版本信息文件”的组成。详细介绍了“版本信息文件”中各项的意义,并与编译后的exe文件属性详细信息进行对照,为读者编写“版本信息文件”和将Python文件编译为exe文件提供了案例。

hz_zhangrl的博客 2万+

python如何编译

python如何编译

隔壁王叔的博客 3121

python编译方法

有时为了一些机密,不方便公开python源码,所以需要以编译方式进行部署。这里主要介绍以.pyc的方式。 1、生成单个文件: (1)python -m xx.py (2)在python编译器中进行: import py_compile py_compile.compile(‘路径’) 2、批量生成文件: import compileall compileall.compile_dir(r’/pat.........

qq_37587785的博客 7021

chatgpt赋能python:如何编译Python文件?完整教程指南

Python文件的编译,是将Python代码转换为机器码,并生成可执行文件的过程。在生成的可执行文件中,既包含了Python代码,也包含了Python解释器和所需的库,可以在没有Python环境的机器上运行。常见的Python编译器有PyInstaller、cx_freeze等,它们可以将Python代码打包成一个单独的可执行文件。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。

laingziwei的博客 413

西门子SMART PLC增量式PID(完整梯形图FC)

西门子PLC自带的PID指令是基于位置型的PID,位置型PID的算法公式和详细介绍,大家可以参看《PID专栏》的其它文章,这里不再赘述。本篇博文直接给出代码部分的讲解,不设计太多公式和理论的推导。限于本人能力,文中难免出现错误和不足之处,诚恳欢迎大家的批评和指正。同时感谢大家的订阅和关注。SMART200 PLC系统自带的PID指令解析,可以参看下面这篇文章:SMART PLC PID算法基本解析(附公式)_RXXW_Dor的博客-CSDN博客_plc的pid算法在态运行中,控制器调节输出值,使偏差 (e

RXXW_Dor的博客 8075

本硕博毕业论文参考文献格式 Chinese Std GBT7714(在原有基础上修改)

本硕博毕业论文参考文献采用修改后的Chinese Std GBT7714格式,兼容EndNote,有疑问可私信修改格式。资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!

上一篇: word2010-阅读、标记、修订
下一篇: python被封了,可以在这里下载
deepfuture
博客等级 码龄17年 209粉丝 1288原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值