问题:Python3项目删除__pycache__文件夹和.pyc文件
从python3项目中清除所有__pycache__
文件夹和.pyc/.pyo
文件的最佳方法是什么?我已经看到多个用户建议pyclean
与Debian捆绑在一起的脚本,但这不会删除文件夹。我想要一种简单的方法来将项目推送到我的DVS之前清理项目。
回答 0
您可以使用下一条命令手动进行操作:
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
这将递归地删除当前目录中的所有* .pyc文件和__pycache__目录。
回答 1
当我将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 .
清理它很好。
回答 2
macOS和Linux
BSD find
在macOS上的实现不同于GNU find-这与BSD和GNU find兼容。使用-name
和的-o
for 或 -将这个函数放入.bashrc
文件中,从全局实现开始。
pyclean () {
find . -type f -name '*.py[co]' -delete -o -type d -name __pycache__ -delete
}
然后cd
到您要递归清理的目录,然后键入pyclean
。
GNU仅查找
这是GNU唯一的解决方案(即Linux)解决方案,但是我觉得使用regex会更好一些:
pyclean () {
find . -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
}
任何使用Python 3的平台
在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()"
批判答案
最常见的答案是:
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
这似乎效率较低,因为它使用了三个过程。find
需要一个正则表达式,因此我们不需要单独调用grep
。同样,它已经-delete
,所以我们并不需要单独调用rm
-和违背评论在这里,它会只要他们得到凭借正则表达式匹配的清空删除非空目录。
从xargs
手册页:
find /tmp -depth -name core -type f -delete
在/ tmp目录下或目录下查找名为core的文件并将其删除,但是比上一个示例更有效(因为我们避免了需要使用fork(2)和exec(2)来启动rm,并且不需要额外的xargs流程)。
回答 3
由于这是一个Python 3项目,因此您只需要删除__pycache__
目录-所有.pyc
/ .pyo
文件都在其中。
find . -type d -name __pycache__ -exec rm -r {} \+
或更简单的形式
find . -type d -name __pycache__ -delete
出于某种原因对我不起作用(文件已删除,但目录未删除),因此出于完整性考虑,我将两者都包括在内。
另外,如果在受版本控制的目录中执行此操作,则可以告诉RCS __pycache__
递归忽略文件夹。然后,在需要的时刻,只需清理所有被忽略的文件。这可能会更方便,因为可能需要清理的不仅仅是余地__pycache__
。
回答 4
这是我的别名,可与Python 2和Python 3一起使用,.pyc .pyo
以__pycache__
递归方式删除所有文件以及目录。
alias pyclean='find . -name "*.py[co]" -o -name __pycache__ -exec rm -rf {} +'
回答 5
如果需要永久解决方案以将Python缓存文件保留在项目目录之外:
从Python 3.8开始,您可以使用环境变量PYTHONPYCACHEPREFIX
为Python定义一个缓存目录。
从Python文档中:
如果设置了该选项,Python将在此路径的镜像目录树中而不是源树中的pycache目录中写入.pyc文件。这等效于指定-X pycache_prefix = PATH选项。
例
如果./profile
将以下行添加到Linux中:
export PYTHONPYCACHEPREFIX="$HOME/.cache/cpython/"
Python不会__pycache__
在您的项目目录中创建烦人的目录,而是将所有这些目录放在~/.cache/cpython/
回答 6
我使用的命令:
find . -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__
手动删除。您可以将以下代码段添加到settings.json
文件中。之后,VS Code将为您隐藏所有__pycache__
文件夹
"files.exclude": {
"**/__pycache__": true
}
希望能帮助到你 !!!
回答 7
从项目目录中键入以下内容:
删除所有.pyc文件
find . -path "*/*.pyc" -delete
删除所有.pyo文件:
find . -path "*/*.pyo" -delete
最后,要删除所有‘__pycache__’,请输入:
find . -path "*/__pycache__" -type d -exec rm -r {} ';'
如果遇到权限拒绝错误,请在上述所有命令的开头添加sudo。
回答 8
使用PyCharm
删除Python编译文件
在中
Project Tool Window
,右键单击应从中删除Python编译文件的项目或目录。在上下文菜单上,选择
Clean Python compiled files
。
.pyc
驻留在所选目录中的文件将被静默删除。
回答 9
非常感谢其他答案,基于这些答案,这就是我用于Debian软件包prerm
文件的内容:
#!/bin/sh
set -e
deb_package='package-name'
python_package='package_name'
if which pyclean >/dev/null 2>&1; then
py3clean -p $deb_package
else
dpkg -L $deb_package | grep ${python_package}$ | while read file
do
find ${file} -type d -name __pycache__ -exec rm -r {} \+
done
fi
回答 10
为什么不只是使用rm -rf __pycache__
?git add -A
然后运行以将其从存储库中删除,然后添加__pycache__/
到您的.gitignore文件中。
回答 11
请直接到您的终端,然后输入:
$rm __pycache__
它将被删除。