繁体   English   中英

Python3项目删除__pycache__文件夹和.pyc文件

[英]Python3 project remove __pycache__ folders and .pyc files

从 python3 项目中清除所有__pycache__文件夹和.pyc/.pyo文件的最佳方法是什么。 我看到多个用户建议使用 Debian 捆绑的pyclean脚本,但这不会删除文件夹。 在将文件推送到我的 DVS 之前,我想要一种简单的方法来清理项目。

您可以使用下一个命令手动执行此操作:

find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf

这将递归删除当前目录中的所有*.pyc文件和__pycache__目录。

macOS 和 Linux

BSD 在 macOS 上的find实现与 GNU find 不同 - 这与 BSD 和 GNU find 兼容。 从通配实现开始,使用-name-o for or - 将此函数放入您的.bashrc文件中:

pyclean () {
    find . -type f -name '*.py[co]' -delete -o -type d -name __pycache__ -delete
}

然后cd到要递归清理的目录,然后键入pyclean

GNU 仅查找

这是一个 GNU find,只有(即 Linux)解决方案,但我觉得使用正则表达式更好一点:

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 进程)。

当我将 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 . 很好地清理了它。

由于这是一个 Python 3 项目,您只需要删除__pycache__目录——所有.pyc / .pyo文件都在其中。

find . -type d -name __pycache__ -exec rm -r {} \+

或者更简单的形式,

find . -type d -name __pycache__ -delete

由于某种原因,这对我不起作用(文件被删除但目录没有),所以为了完整起见,我将两者都包括在内。


或者,如果您在修订控制下的目录中执行此操作,您可以告诉 RCS 递归忽略__pycache__文件夹。 然后,在需要的时候,只需清理所有被忽略的文件。 这可能会更方便,因为可能要清理的不仅仅是__pycache__

如果您需要一个永久的解决方案来将 Python 缓存文件保留在您的项目目录之外:

Python 3.8开始,您可以使用环境变量PYTHONPYCACHEPREFIX为 Python 定义缓存目录。

来自 Python 文档:

如果设置,Python 将在此路径的镜像目录树中写入 .pyc 文件,而不是在源树中的pycache目录中。 这等效于指定 -X pycache_prefix=PATH 选项。

例子

如果您./profile添加到 Linux 中的./profile

export PYTHONPYCACHEPREFIX="$HOME/.cache/cpython/"

Python 不会在您的项目目录中创建烦人的__pycache__目录,而是将它们全部放在~/.cache/cpython/

我用过的命令:

find . -type d -name "__pycache__" -exec rm -r {} +

说明:

  1. 首先在当前目录中查找所有__pycache__文件夹。

  2. 执行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
}

希望能帮助到你 !!!

这是我的别名,适用于 Python 2 和 Python 3,以递归方式删除所有.pyc .pyo文件以及__pycache__目录。

alias pyclean='find . -name "*.py[co]" -o -name __pycache__ -exec rm -rf {} +'

使用 PyCharm

删除 Python 编译文件

  1. Project Tool Window ,右键单击应从中删除 Python 编译文件的项目或目录。

  2. 在上下文菜单上,选择Clean Python compiled files

驻留在所选目录中的.pyc文件将被静默删除。

从项目目录中键入以下内容:

删除所有.pyc文件

find . -path "*/*.pyc" -delete

删除所有.pyo文件:

find . -path "*/*.pyo" -delete

最后,要删除所有'__pycache__' ,请键入:

find . -path "*/__pycache__" -type d -exec rm -r {} ';'

如果遇到权限被拒绝错误,请在上述所有命令的开头添加sudo

非常感谢其他答案,基于它们,这是我用于 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

为什么不直接使用rm -rf __pycache__ 之后运行git add -A以将它们从您的存储库中删除并将__pycache__/添加到您的 .gitignore 文件中。

尽可能简单

#!/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
}

这是我在我的项目中使用的。 你可以试一试。

首先清空目录,然后删除它们:

find ./ -type f -name '*.pyc' -delete -print && find ./ -type d -name '__pycache__' -delete -print

有一个不错的 pip 包。

pip install pyclean
pyclean --verbose .

完毕

我在 Mac 上运行 Python3 和 pip3。 对我来说,解决方法如下(在我项目的根目录下):

pip3 install pyclean
pyclean .

我想强调一下,因为我看到许多涉及 bash 脚本的答案,因此软件中的最佳实践是支持经过测试的问题解决方案(这正是已建立的 python 包所代表的)而不是手动方法。

大多数时候,您的项目都在源代码控制之下; 如果使用git ,则只需运行git clean -d -f. 清理非版本控制文件; 如果 Python 缓存文件/目录在.gitignore中,您还需要-x (也删除忽略的文件)或-X (仅删除忽略的文件)命令行开关。

请注意,如果您有任何必须保存的临时文件,请将它们移出本地存储库或添加到索引树,然后再运行git clean without -X

请前往您的终端,然后输入:

$rm __pycache__

它将被删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM