清除所有__pycache__文件夹和.pyc/。python3项目中的Pyo文件。我见过许多用户建议将pyclean脚本与Debian捆绑在一起,但这并没有删除文件夹。在将文件推送到分布式交换机之前,我想要一个简单的方法来清理项目。
当前回答
我使用的命令:
找到。-type d -name "__pycache__" -exec rm -r {} +
解释道:
首先查找当前目录下的所有__pycache__文件夹。 执行rm -r{} +删除上述步骤中的每个文件夹({}表示占位符,+表示结束命令)
编辑1:
我使用的是Linux,为了重用下面添加到~/的命令行。bashrc文件(
alias rm-pycache='find . -type d -name "__pycache__" -exec rm -r {} +'
编辑2: 如果你使用VS Code,你不需要手动删除__pycache__。 您可以将下面的代码片段添加到设置中。json文件。之后,VS Code会为你隐藏所有__pycache__文件夹
"files.exclude": {
"**/__pycache__": true
}
希望能有所帮助!!
其他回答
我在Mac上运行Python3和pip3。对我来说,解决方案如下 (在我项目的根目录下):
pip3 install pyclean
pyclean .
我想强调的是,因为我看到许多答案都涉及bash脚本,所以软件中的最佳实践是倾向于使用经过测试的问题解决方案(这正是已建立的python包所代表的),而不是手卷方法。
当我把pyclean误认为pycclean时,我自己找到了答案:
No command 'pycclean' found, did you mean:
Command 'py3clean' from package 'python3-minimal' (main)
Command 'pyclean' from package 'python-minimal' (main)
pycclean: command not found
运行py3clean。打扫得很干净。
macOS与Linux
BSD在macOS上的find实现与GNU find不同——这与BSD和GNU find兼容。从globbing实现开始,使用name和-o表示或-将这个函数放在你的.bashrc文件中:
pyclean () {
find . -type f -name '*.py[co]' -delete -o -type d -name __pycache__ -delete
}
然后cd到要递归清理的目录,并键入pyclean。
GNU只找到
这是一个GNU的find, only(即Linux)解决方案,但我觉得它与regex更好一点:
pyclean () {
find . -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
}
任何平台,使用python3
在Windows上,你可能连find都没有。不过,你可能有Python 3,从3.4开始就有了方便的pathlib模块:
python3 -Bc "import pathlib; [p.unlink() for p in pathlib.Path('.').rglob('*.py[co]')]"
python3 -Bc "import pathlib; [p.rmdir() for p in pathlib.Path('.').rglob('__pycache__')]"
-B标志告诉Python不要写.pyc文件。(请参阅PYTHONDONTWRITEBYTECODE环境变量。)
上面的例子在循环中滥用了列表推导式,但是在使用python -c时,样式是次要的。或者,我们可以滥用(例如)__import__:
python3 -Bc "for p in __import__('pathlib').Path('.').rglob('*.py[co]'): p.unlink()"
python3 -Bc "for p in __import__('pathlib').Path('.').rglob('__pycache__'): p.rmdir()"
对答案的批判
最常见的答案是:
找到。| grep -E "(__pycache__|\.pyc|\.pyo$)"| xargs rm -rf
这似乎效率较低,因为它使用了三个过程。Find接受正则表达式,因此不需要单独调用grep。类似地,它有-delete,所以我们不需要单独调用rm——与这里的注释相反,它将删除非空目录,只要它们通过正则表达式匹配被清空。
从xargs手册页:
查找/tmp -depth -name core -type f -delete 在/tmp目录下找到名为core的文件并删除它们 但比前面的例子更有效(因为我们避免了 需要使用fork(2)和exec(2)来启动rm,我们不需要 额外的xargs进程)。
尽可能的简单
#!/bin/bash
project_root_dir=$(pwd)
#
# function _dcache deletes __pycache__ folders floating around python modules
#
function _dcache() {
find "$project_root_dir/inb" -name "__pycache__" > pycache
while IFS= read -r cache_file; do
rm -r $cache_file
done < pycache
rm pycache
}
这是我在项目中使用的。你可以试试。
请到你的终端然后输入:
$rm __pycache__
它将被移除。
推荐文章
- ValueError: numpy。Ndarray大小改变,可能表示二进制不兼容。期望从C头得到88,从PyObject得到80
- Anaconda /conda -安装特定的软件包版本
- 我在哪里调用Keras的BatchNormalization函数?
- 打印测试执行时间并使用py.test锁定缓慢的测试
- 插入一行到熊猫数据框架
- 要列出Pandas DataFrame列
- 在Django模型中存储电话号码的最佳方法是什么?
- 从导入的模块中模拟函数
- 滚动或滑动窗口迭代器?
- python的方法找到最大值和它的索引在一个列表?
- 如何读取文件的前N行?
- 如何删除matplotlib中的顶部和右侧轴?
- 解析.py文件,读取AST,修改它,然后写回修改后的源代码
- Visual Studio Code:如何调试Python脚本的参数
- 使用元组/列表等等。从输入vs直接引用类型如list/tuple/etc