compileall 模块的作用是将指定目录(包括子目录)下的所有 .py 文件编译为 .pyc 字节码文件(注意:.pyc 是预编译的字节码,并非加密,只是二进制形式的中间代码),且完全支持复杂的目录层级结构。
关键特性说明
-
递归处理目录层级
compileall会自动递归遍历指定目录下的所有子目录,无论层级多复杂,都会找到其中的.py文件并编译为.pyc。例如,若目录结构为:
project/ ├── main.py ├── utils/ │ ├── tool1.py │ └── subutils/ │ └── tool2.py └── tests/ └── test.py运行
compileall后,所有.py文件都会在对应目录的__pycache__中生成.pyc(或通过参数指定生成在同一目录)。 -
使用方法(支持复杂目录)
常用命令如下(以 Windows 为例):# 编译指定目录(包括所有子目录)下的 .py 文件 python -m compileall -r 0 你的目录路径-r 0:表示递归深度为无限(默认值,即遍历所有子目录)。- 若省略
-r参数,默认也是递归处理所有子目录。
-
.pyc的生成位置- 默认情况下,
.pyc会生成在.py文件所在目录的__pycache__子目录中,文件名格式为模块名.cpython-版本号.pyc(如main.cpython-313.pyc)。 - 若要让
.pyc与.py文件生成在同一目录(而非__pycache__),可添加-b参数:python -m compileall -b -r 0 你的目录路径
- 默认情况下,
-
注意:
.pyc是编译而非加密
再次强调,compileall生成的.pyc是字节码(中间代码),并非加密文件。通过uncompyle6等工具可反编译.pyc得到近似源码,因此不能用于保护代码隐私,仅用于加速重复运行。
总结
compileall 完全支持对包含复杂目录层级的 Python 项目进行批量编译,会递归处理所有子目录下的 .py 文件并生成 .pyc。但需注意,.pyc 是编译产物而非加密,主要作用是加速启动,而非保护代码。
Python compileall 模块详解
848

被折叠的 条评论
为什么被折叠?



