有时候我们想要以藏自己的脚本源代码,使得其代码源文件转换为二进制文件,进行加密 。在Python中可以将.py文件编译为pyc和pyo文件。
代码很简单
python -m py_complie file.py
python -m py_complie /root/src/{file1,file2}.py
编译成pyc文件
编译成pyo文件。
1.其中的 -m 相当于脚本中的import,这里的-m py_compile 相当于上面的 import py_compile
2.-O 如果改成 -OO 则是删除相应的 pyo文件,具体帮助可以在控制台输入 python -h 查看
python -O -m py_compile file.py
解释下什么是pyc文件,pyo文件,pyd文件
pyc是一种二进制文件,有py文件编译后生成的文件,是一种byte code,py文件编程pyc文件后,加速的速度有所提高,而且pyc是一种跨平台的字节码,是有python的虚拟机来执行的,这个是类似于java或者.net的虚拟机的改变, pyc的内容,是跟python的版本相关,不同版本编译后的pyc文件是不容的,不同版本的Python环境是无法执行pyc的
什么是pyo文件
pyo文件相当于是在pyc文件的基础上进行了进一步的优化,相比pyc文件更小,也可以提高加在速度,但对于嵌入式系统,它可将所需模块编译成.pyo文件以减少容量。
个人使用的原因:不想让别写看见自己写的代码,嘿嘿
-O,表示优化生成.pyo字节码
-OO,表示进一步移出-O选项生成的字节码文件中的文档字符串(这是在作用效果上解释的,而不是说从-O选项得到的文件取出)
-m 表示导入并运行执行的模块
py_compile是Python的自带模块,这里面就两个函数。其下的py_compile.compile(file[, cfile[, dfile[, doraise]]])可将.py文件编译生成.pyc文件(默认),对应的参数解释如下file,表示需要生成.pyc或.pyo文件的源脚本名(字符串);cfile,表示需要生成.pyc或.pyo文件的目标脚本名。也就是源脚本—->目标脚本。当然,它默认是以.pyc为扩展名的路径名的字符串。此外,当且仅当所使用的解释器允许编译成.pyo文件,才能以“.pyo”结尾。这也就是我上面为什么会在函数功能解释上加上“(默认)”这两个字的原因。dfile,表示编译出错时,将报错信息中的名字“file”替换为“dfile”。doraise,设置是否忽略异常。若为True,则抛出PyCompileError异常;否则直接将错误信息写入sys.stderr(提示:sys.stderr是Python自带的标准错误输出)
再聊聊.pyd文件。
哈哈哈,是 Python的动态链接库。
批量生成pyc文件
一般来说,我们的工程都是在一个目录下的,一般不会说仅仅编译一个py文件而已,而是需要把整个文件下的py文件都编译为pyc文件,python又为了我们提供了另一个模块:compileall。使用方法如下:
import compileall
compileall.compile_dir(r’F:\baby’)
也可以直接用命令行编译一个目录下的文件,如:#python -m compileall /root/src
这样就把root目录下的game目录,以及其子目录下的py文件编译为pyc文件了。
W4rr10r 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Python使得.py文件转换为二进制文件!