Sal*_*een 133 python delete-file python-3.x python-3.4
清除python3项目中所有__pycache__
文件夹和.pyc/.pyo
文件的最佳方法是什么.我看到多个用户建议将该pyclean
脚本与Debian捆绑在一起,但这并不会删除文件夹.在将文件推送到DVS之前,我想要一种简单的方法来清理项目.
V. *_*ula 210
您可以使用下一个命令手动执行此操作:
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)
这将在当前目录中递归删除所有*.pyc文件和__pycache__目录.
Sal*_*een 76
当我把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
Run Code Online (Sandbox Code Playgroud)
跑步py3clean .
很干净.
Aar*_*all 61
BSD find
在macOS上的实现与GNU find不同 - 这与BSD和GNU find都兼容.从一个globbing实现开始,使用-name
和-o
for 或 - 将此函数放入您的.bashrc
文件中:
pyclean () {
find . -type f -name '*.py[co]' -delete -o -type d -name __pycache__ -delete
}
Run Code Online (Sandbox Code Playgroud)
然后cd
到要递归清理的目录,然后键入pyclean
.
这是一个GNU查找,只有(即Linux)解决方案,但我觉得正则表达式更好一点:
pyclean () {
find . -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
}
Run Code Online (Sandbox Code Playgroud)
在Windows上,你甚至可能没有find
.但是,你可能有Python 3,从3.4开始有一个方便的pathlib
模块:
python3 -c "import pathlib; [p.unlink() for p in pathlib.Path('.').rglob('*.py[co]')]"
python3 -c "import pathlib; [p.rmdir() for p in pathlib.Path('.').rglob('__pycache__')]"
Run Code Online (Sandbox Code Playgroud)
这会滥用列表对循环的理解,但在使用时python -c
,样式是次要问题.或者我们可以滥用(例如)__import__
:
python3 -c "for p in __import__('pathlib').Path('.').rglob('*.py[co]'): p.unlink()"
python3 -c "for p in __import__('pathlib').Path('.').rglob('__pycache__'): p.rmdir()"
Run Code Online (Sandbox Code Playgroud)
最常见的答案是:
Run Code Online (Sandbox Code Playgroud)find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
这似乎效率较低,因为它使用三个进程.find
采用正则表达式,因此我们不需要单独调用grep
.同样的,它有-delete
,所以我们并不需要单独调用rm
-和违背评论在这里,它会这么长时间删除非空目录,因为他们得到凭借正则表达式匹配的清空.
从xargs
手册页:
Run Code Online (Sandbox Code Playgroud)find /tmp -depth -name core -type f -delete
在目录/ tmp中或下面找到名为core的文件并删除它们,但比前一个示例更有效(因为我们避免使用fork(2)和exec(2)来启动rm而我们不需要额外的xargs过程).
小智 26
我在 Mac 上运行 Python3 和 pip3。对我来说,解决方案如下(在我的项目的根目录中):
pip3 install pyclean
pyclean .
Run Code Online (Sandbox Code Playgroud)
我想强调的是,因为我看到许多涉及 bash 脚本的答案,所以软件中的最佳实践是支持经过测试的问题解决方案(这正是已建立的 python 包所代表的内容)而不是手动方法。
Rot*_*eti 24
如果您需要一个永久的解决方案来将 Python 缓存文件保留在您的项目目录之外:
从Python 3.8开始,您可以使用环境变量PYTHONPYCACHEPREFIX
为 Python 定义缓存目录。
来自 Python 文档:
如果设置,Python 将在此路径的镜像目录树中写入 .pyc 文件,而不是在源树中的pycache目录中。这等效于指定 -X pycache_prefix=PATH 选项。
例子
如果您./profile
在 Linux 中添加以下行:
export PYTHONPYCACHEPREFIX="$HOME/.cache/cpython/"
Run Code Online (Sandbox Code Playgroud)
Python 不会__pycache__
在您的项目目录中创建烦人的目录,而是会将它们全部放在~/.cache/cpython/
iva*_*eev 21
由于这是一个Python 3项目,您只需要删除__pycache__
目录 - 所有.pyc
/ .pyo
文件都在其中.
find . -type d -name __pycache__ -exec rm -r {} \+
Run Code Online (Sandbox Code Playgroud)
或者更简单的形式,
find . -type d -name __pycache__ -delete
Run Code Online (Sandbox Code Playgroud)
由于某种原因这对我不起作用(文件被删除但目录不是),所以为了完整起见我包括两者.
或者,如果您在受版本控制的目录中执行此操作,则可以告诉RCS以__pycache__
递归方式忽略文件夹.然后,在所需的时刻,只需清理所有被忽略的文件.这可能会更方便,因为清理可能不仅仅是更多__pycache__
.
lem*_*yen 21
我用过的命令:
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 {} +'
Run Code Online (Sandbox Code Playgroud)
编辑 2:
如果您使用VS Code,则无需__pycache__
手动删除。您可以将下面的代码段添加到settings.json
文件中。之后,VS Code会__pycache__
为你隐藏所有文件夹
"files.exclude": {
"**/__pycache__": true
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你 !!!
Goo*_*Pen 13
有一个不错的 pip 包。
pip install pyclean
pyclean --verbose .
Run Code Online (Sandbox Code Playgroud)
完毕
在 中Project Tool Window
,右键单击应从中删除 Python 编译文件的项目或目录。
在上下文菜单上,选择Clean Python compiled files
。
.pyc
驻留在选定目录中的文件将被静默删除。
小智 7
从项目目录中键入以下内容:
删除所有.pyc文件
find . -path "*/*.pyc" -delete
删除所有.pyo文件:
find . -path "*/*.pyo" -delete
最后,要删除所有'__pycache__',请键入:
find . -path "*/__pycache__" -type d -exec rm -r {} ';'
如果遇到权限被拒绝错误,请在上述所有命令的开头添加sudo。
小智 5
这是我的别名,可与Python 2和Python 3一起使用,.pyc .pyo
以__pycache__
递归方式删除所有文件以及目录。
alias pyclean='find . -name "*.py[co]" -o -name __pycache__ -exec rm -rf {} +'
Run Code Online (Sandbox Code Playgroud)