Python中如何使用compileall模块排除指定子目录?
下面的命令,可以使用 python compileall,并且排除一个子目录。
python -m compileall -x r"/folder1" /python-folder/
请问,如何排除 2 个子目录呢?谢谢。
Python中如何使用compileall模块排除指定子目录?
自己写 compile 脚本包装下
在Python的compileall模块中,compile_dir函数可以通过rx参数来排除特定目录。rx是一个正则表达式对象,匹配到的目录路径会被跳过。
这里是一个直接可用的例子:
import compileall
import re
# 要编译的根目录
root_dir = '/path/to/your/project'
# 创建正则表达式,排除名为 'exclude_this' 和 'tests' 的子目录
# 注意:模式需要匹配完整的目录路径片段
exclude_pattern = re.compile(r'/exclude_this/|/tests/')
# 递归编译,排除匹配的目录
compileall.compile_dir(root_dir, rx=exclude_pattern, force=True, quiet=1)
关键点解释:
rx=exclude_pattern:这是核心。compile_dir会遍历目录,并将每个目录的完整路径与这个正则表达式进行匹配。如果匹配成功,整个目录及其子目录都会被跳过。- 正则表达式模式:
r'/exclude_this/|/tests/'。这里使用了两个关键部分:/exclude_this/和/tests/:匹配路径中包含这些字符串的目录。路径分隔符 (/) 很重要,它确保了只匹配目录名,而不是文件名中包含这些词。|:表示“或”的逻辑,用于排除多个目录。
- 其他常用参数:
force=True:强制重新编译,即使.pyc文件已存在且是最新的。quiet=1:只打印错误信息,减少输出噪音。maxlevels=0:可以限制递归深度,0表示无限制。
如果你想排除的目录就在根目录下,也可以这样写,更直观:
exclude_pattern = re.compile(r'[/\\](exclude_this|tests)[/\\]')
这个模式匹配路径分隔符 (/ 或 \) 后紧跟 exclude_this 或 tests,然后再跟一个路径分隔符,能更准确地定位到目录节点。
一句话总结:用 rx 参数配正则表达式来精准排除目录。
find,grep,xargs
可以借用 compileall -x (regex)的吧?只是这个 regex 稍复杂点。
使用 compileall -x (regex) 应该是最简洁的吧?只是这个 regex 稍复杂点。
使用 compileall -x (regex) 应该是最简洁的吧?只是这个 regex 稍复杂点。
看来大家都是混淆成 pyc 啊 手动滑稽
https://docs.python.org/3.6/library/compileall.html

是啊,compileall 就是 byte-comile => .pyc 文件的。
有 2 个子目录,我想排除掉( skipped )。如果只是 skip 一个子目录 -x r"/folder1" 工作得非常好,但是我不知道怎么写这个 regex 来排除 2 个 或 3 个 子目录。

