pyc文件的编译和运行

当我们运行python文件程序的时候,Python解释器将源码转换为字节码,然后由解释器来执行这些字节码。保存字节码是作为一种启动加速度的优化。下一次运行程序时,如果你在上次保存字节码之后没有修改过源码的话,Python将会加载.pyc文件并跳过编译这个步骤。当Python需要重编译时,它会自动检测源文件和字节码的时间戳;如果修改了源码,则下次运行程序时,字节码将自动重新创建。

可以手动编译:

  1. 单个文件
1
2
import py_compile
py_compile.compile(r'/home/username/test.py')
  1. 多个文件
1
2
import compileall
compileall.compile_dir(r'/home/username/test')
  1. 直接通过命令来运行
1
2
3
4
5
6
7
python -m py_compile test.py
python -O -m python_compile test.py
'''
-O 优化成字节码
-m 表示把后面的模块当成脚本运行
-OO 表示优化的同时删除文档字符串
'''

实际在测试中,我们发现,生成字节码(pyc文件)后,删除源码(py文件),提示无法找到py文件。这与官方说的如果找不到源码,则找字节码来运行,似乎有出入,可能是我的操作方法不对。

将pyc文件改成原来的py文件名字,后缀仍保留为pyc,并将其放置在原py文件所在的位置,则整个工程文件可以正常运行。该方法可以作为简单的保护源码手段。(仍是容易被反编码)