我们在部署python项目的时候,有时并不需要对代码进行严格的安全管理,较简单的做法是使用pyc文件或者混淆代码。
一、.pyc是什么?
.pyc文件 是 Python解释器在首次运行 .py 文件时自动生成的字节码(byte-compiled)文件。字节码是一种中间形式的代码,位于源代码和机器代码之间。Python 解释器会将 .py 文件编译成字节码,然后执行字节码来运行代码。
生成 .pyc 文件的过程称为编译。当运行一个 .py 文件时,如果对应的 .pyc 文件不存在或已过期(即 .py 文件的修改时间晚于 .pyc 文件),Python 解释器会自动重新编译 .py 文件并生成新的 .pyc 文件。
.pyc 文件的优点:
-
提升执行效率:由于
.
pyc 文件是经过编译的字节码,相较于解释执行源代码,它们可以更快地被 Python 解释器加载和执行。 -
减少启动时间:当一个
.
py 文件被编译为.
pyc 文件后,下次再次运行相同的代码时,Python 解释器可以直接加载.
pyc 文件,而不需要再次编译。 -
代码隐藏和保护:由于
.
pyc 文件是编译后的字节码形式,相对于源代码的.
py 文件,.
pyc 文件不易被直接阅读和修改。
.
pyc 文件是与具体的 Python 版本和操作系统相关的,因此它们在不同的环境中可能不可移植。
二、将目录下所有py文件编译成pyc
终端手动编译
python为我们提供了一个模块:compileall,把整个文件夹下的py文件都编译为pyc文件。
python -m compileall ./dir/
然后修改生成的.pyc文件名
修改pyc文件名,生成的pyc文件的文件名一般为***.cpython-39.pyc,将其修改为与源文件同名但扩展名不同即可,即删去名字中的.cpython-39。接下来,pyc文件可以和py文件一样用import导入。举个例子:
对model.py生成的pyc文件为model.cpython-39.pyc,先将其移动到与model.py同级目录下,再修改文件名为model.pyc即可,最后删去原model.py文件。