`

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表示优化的字节码

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')

 

也可以直接用命令行编译一个目录下的文件,如:# python -m compileall /root/src/


这样就把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。

分享到:
评论

相关推荐

    exe反编译py

    为了防止代码泄露就考虑不采用直接给源码方式,而python二进制脚本pyc和pyo,虽然提供的不是源码,但可以通过uncompyle2直接得到源码,所以现在用类似py2exe软件将py文件打包成exe,用此脚本可以将exe反编译为py脚本

    python 文件编译

    在 Python 中,编译后的文件可以是 pyc 或 pyo 文件,pyc 文件是 Python 的 bytecode 文件,pyo 文件是优化后的 bytecode 文件。 Python 文件编译有多种方法,可以使用 Python 自带的 py_compile 模块或 compileall...

    超好用的python批量反编译软件

    在处理Python编译后的`.pyc`或`.pyo`文件时,有时我们需要查看源代码,这就涉及到了反编译的概念。本文将深入探讨Python的反编译过程,以及如何使用批量反编译工具来高效地进行这个操作。 首先,让我们了解一下`....

    pyc反编译.rar

    Python是一种广泛使用的高级编程语言,它的源代码通常会被编译成字节码(.pyc或.pyo文件),以便在解释器中更快地执行。这个名为"pyc反编译.rar"的压缩包提供了一个针对Windows操作系统的工具,用于将这些字节码文件...

    py2so:编译py为so文件,更好的隐藏源码,可以直接编译整个python工程

    编译py为so文件,更好的隐藏源码,可以直接编译整个python工程 删除.pyc .pyo文件 删除.py源文件 删除.c编译文件 也可以使用Makefile的形式: 1.将Makefile和工程目录放在同一目录下; 2.正确是安装Cpython解释器; ...

    uncompyle2-master

    4、Python编译 python -O -m py_compile alp.py 执行结果:生成alp.pyo python -O -m py_compile alp.py  注:如果不带选项-O则生成的是pyc文件,-O选项则可以在生成代码时进行一定的优化。

    win10 下pycharm+anaconda 编译生成pyd文件

    在Windows 10环境下,开发基于Python的深度学习应用时,有时为了提高性能或满足生产部署的需求,需要将Python代码编译成可执行的二进制文件。在本场景中,我们将探讨如何使用PyCharm和Anaconda环境来编译Python代码...

    python属于解释语言吗

    python并非完全是解释性语言,它是有编译的,先把源码py文件编译成pyc或者pyo,然后由python的虚拟机执行,相对于py文件来说,编译成pyc和pyo本质上和py没有太大区别,只是对于这个模块的加载速度提高了,并没有...

    Python库 | uncompyle6-3.6.7-py2.4.egg

    uncompyle6是一个用于反编译Python字节码的库,它能够将Python的.pyc或.pyo文件转换回源代码.py文件。这个库对于那些需要查看或理解编译后的Python代码,或者进行代码调试和分析的开发者来说,非常有用。特别是针对...

    Python库 | xdis-4.7.0-py3.4.egg

    使用“xdis-4.7.0-py3.4.egg”时,开发者需要确保他们的环境是Python 3.4,因为这个版本的xdis是针对这个特定版本的Python编译的。如果要在其他Python版本下使用xdis,可能需要找到对应版本的库,或者使用xdis提供的...

    py反编译工具

    decompyle是一个流行的Python反编译器,它的主要任务是将Python的.pyc或.pyo(已编译的字节码文件)转换回接近原始的.py源代码格式。这个工具对于代码分析、逆向工程或者在丢失源代码的情况下恢复代码非常有用。...

    数信杯-初赛题-pyc附件

    【数信杯-初赛题-pyc附件】是针对一场数据科学或信息技术竞赛的初赛题目,其中包含的“pyc”文件很可能是Python编译后的字节码文件。在Python编程环境中,`.pyc`文件是源代码`.py`文件的预编译版本,用于提高程序的...

    Python库 | xdis-3.2.4-py2.5.egg

    1. **字节码解析**:xdis库的核心功能是解析Python字节码,它能将Python的.pyc或.pyo文件中的字节码解码成人类可读的形式。这对于理解Python代码的执行流程,特别是那些复杂的控制流结构和优化技巧,非常有用。 2. ...

    py2exe-0.6.9.win32-py2.6

    4、一个library.zip文件,它包含了已编译的纯的python模块如.pyc或.pyo 上面的mysetup.py创建了一个控制台的helloword.exe程序,如果你要创建一个图形用户界的程序,那么你只需要将mysetup.py中的console=["hello...

    Python库 | xdis-1.1.1-py2.6.egg

    它提供了强大的API,可以用于读取和分析Python字节码,包括Python的.pyc文件和未压缩的.pyo文件。例如,`xdis.dis`函数可以将字节码解码为人类可读的形式,这对于理解代码执行流程非常有帮助。此外,`xdis.load_...

    点宽学园python基础答案.docx

    4. **Python编译后的文件扩展名**: - `.pyc`是Python源代码编译后的字节码文件,这种文件可以在不解析源代码的情况下快速执行,提高了程序的运行效率。当Python程序运行时,如果没有找到对应的`.pyc`文件,解释器...

    python程序文件扩展名知识点详解

    python程序的扩展名有.py、.pyc、.pyo和.pyd。.py是源文件,.pyc是源文件编译后的文件,.pyo是源文件优化编译后的文件,.pyd是其他语言写的python库。 扩展名 在写Python程序时我们常见的扩展名是py, pyc,其实还有...

    点宽学园python基础答案.pdf

    `.pyc`和`.pyo`文件虽然不是人为创建的,但它们在程序运行过程中扮演着重要角色,提高了程序的运行效率。至于`.pyd`文件,则主要用于包含非Python编写的库,以便于Python程序与这些库交互。 了解这些基础知识对于...

Global site tag (gtag.js) - Google Analytics