pyc是python编译器编译后的字节码
pyo是python编译器优化编译后的字节码
官方的说法是pyc和pyo在程序的执行上并没有变快,只是在加载这些模块时变快。
并且pyo会在一些情况(很少的情况下)会发生功能上的错误。
pyo会去除asset和__doc__。
其实pyc和pyo很容易被反编译,所以又好多人问为什么python没有像c/c++那样的可以编译成很难被反编译的二进制级别的文件。
接下来说说怎么编译成pyc和pyo文件。
生成pyc文件
有2中方法生成pyc文件,py_compile或者compileall
命令如下:
python -m py_compile [PYTHONFILE]
python -m compileall [PYTHONFILE]
python -m compileall [DIRECTORY]
compileall 要比 py_compile功能强大,可以编译一个文件还可以编译整个目录,包括其子目录。
另外compileall还提供下面的选项:
- -l
-
只编译当前目录,忽略器子目录
- -f
-
强制重新编译
- -q
-
只打印出错误,不打印编译的文件列表
- -d destdir
-
编译文件的输出路径
- -x regex
-
过滤器,用来选择什么样的文件需要被编译,regex为正则表达式
生成pyo文件
compileall是无法生成pyo文件的,只能使用py_compile。
命令如下:
python -O -m py_compile [PYTHONFILE]
python -OO -m py_compile [PYTHONFILE]
一个O就会移除asset,2个OO就会将asset和__doc__都移除。
完。
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.