Python编译
compileall模块(编译pyc文件)
前提说明:这种方式并不能加密源码,是会被破解查看源码的!!!
如果只是为了加密,可以通过py2exe、pyinstaller或者cx_Freeze对Python程序进行打包。
http://tool.lu/pyc/这个网站就可以在线上传一个.pyc文件然后立刻得到Python源代码
compileall
模块是 Python 内置的一个模块,用于编译 Python 源代码文件以提高加载和运行速度。 具体可以查看官方文档,或者执行python3 -m compileall --help
命令来查看帮助文档。下面写一个编译例子:
首先我有如下格式文件:
[root@head test]# tree
.
├── commands
│ └── slurm_request.py
└── main.py
常用的编译方式:
优化模式编译:
优化模式编译:在默认情况下,Python 使用优化模式进行编译。在这种模式下,Python 解释器会尝试在生成的字节码文件中应用各种优化,以提高程序的执行性能。这些优化包括删除未使用的变量、常量折叠、短路条件判断等。优化模式编译是 Python 的默认行为,你不需要显式地指定任何选项来启用它。
[root@head test]# python3 -m compileall ./ Listing './'... Listing './commands'... Compiling './commands/slurm_request.py'... Compiling './main.py'... [root@head test]# tree . ├── commands │ ├── __pycache__ │ │ └── slurm_request.cpython-36.pyc │ └── slurm_request.py ├── main.py └── __pycache__ └── main.cpython-36.pyc 3 directories, 4 files
上面的方式尽管产生了编译文件,但是这些文件与源代码不在同一目录,可能会带来调用问题。因此常常使用如下方式产生同级目录下的
.pyc
文件:-b 标志:当你使用
-b
标志时,compileall
模块会以二进制模式进行编译。在这种模式下,编译生成的字节码文件不会应用任何优化,而是保留了源代码中的所有细节和结构。这样做的目的是为了保持字节码文件与源代码的一致性,以便于调试和分析。[root@head test]# python3 -m compileall -b ./ Listing './'... Listing './commands'... Compiling './commands/slurm_request.py'... Compiling './main.py'... [root@head test]# tree . ├── commands │ ├── slurm_request.py │ └── slurm_request.pyc ├── main.py └── main.pyc 1 directory, 4 files
加上
-b
参数就可以了,这种方式编译就与源文件一致了。
发布python程序过程
在实际发布程序时,可遵循如下几步:
编译生成pyc文件,建议增加-O优化项
python3 -O -m compileall -b ./
删除py文件
# 删除当前目录中所有以 .py 结尾的文件 find . -type f -name "*.pyc" -exec rm {} +
删除
__pycache__
目录find . -type d -name "__pycache__" -exec rm -rf {} +
打包即可。
此外还有**.pyd、.pyo**格式,具体差异可查看:
https://stackoverflow.com/questions/8822335/what-do-the-python-file-extensions-pyc-pyd-pyo-stand-for