Python3 项目删除 __pycache__ 个文件夹和 .pyc 文件
Python3 project remove __pycache__ folders and .pyc files
从 python3 项目中清除所有 __pycache__
文件夹和 .pyc/.pyo
文件的最佳方法是什么。我看到多个用户建议使用与 Debian 捆绑在一起的 pyclean
脚本,但这并没有删除文件夹。我想要一种在将文件推送到我的 DVS 之前清理项目的简单方法。
当我将 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 .
清理得很好
您可以使用下一个命令手动完成:
find . | grep -E "(/__pycache__$|\.pyc$|\.pyo$)" | xargs rm -rf
这将从当前目录开始递归地删除所有 .pyc
和 .pyo
文件以及 __pycache__
目录。
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 发现的,唯一的(即 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
flag tells Python not to write .pyc
files. (See also the 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
Find files named core in or below the directory /tmp and delete them,
but more efficiently than in the previous example (because we avoid
the need to use fork(2) and exec(2) to launch rm and we don't need
the extra xargs process).
由于这是一个 Python 3 项目,您只需删除 __pycache__
个目录 -- 所有 .pyc
/.pyo
个文件都在其中。
find . -type d -name __pycache__ -exec rm -r {} \+
或其更简单的形式,
find . -type d -name __pycache__ -delete
出于某种原因它对我不起作用(文件已删除但目录未删除),因此为了完整起见我将两者都包括在内。
或者,如果您在受修订控制的目录中执行此操作,您可以告诉 RCS 递归地忽略 __pycache__
文件夹。然后,在需要的时候,清理所有被忽略的文件。这可能会更方便,因为可能需要清理的不仅仅是 __pycache__
.
为什么不直接使用 rm -rf __pycache__
? 运行 git add -A
之后将它们从您的存储库中删除并添加 __pycache__/
到您的 .gitignore 文件。
这是我的别名,可用于 Python 2 和 Python 3 递归删除所有 .pyc .pyo
文件以及 __pycache__
目录。
alias pyclean='find . -name "*.py[co]" -o -name __pycache__ -exec rm -rf {} +'
非常感谢其他答案,基于他们,这就是我用于我的 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
使用PyCharm
删除Python个编译文件
在Project Tool Window
、right-click一个项目或目录中,Python个编译文件应该被删除。
在上下文菜单中,选择 Clean Python compiled files
。
驻留在所选目录中的 .pyc
个文件被静默删除。
如果您需要永久解决方案 将Python 缓存文件保留在项目目录之外:
从Python 3.8开始可以使用环境变量PYTHONPYCACHEPREFIX
为Python定义缓存目录。
来自 Python 文档:
If this is set, Python will write .pyc files in a mirror directory tree at this path, instead of in pycache directories within the source tree. This is equivalent to specifying the -X pycache_prefix=PATH option.
例子
如果您将以下行添加到 Linux 中的 ./profile
:
export PYTHONPYCACHEPREFIX="$HOME/.cache/cpython/"
Python 不会在您的项目目录中创建烦人的 __pycache__
目录,而是会将它们全部放在 ~/.cache/cpython/
下
请前往您的终端,然后输入:
$rm __pycache__
它将被删除。
从项目目录中键入以下内容:
正在删除所有 .pyc 文件
find . -path "*/*.pyc" -delete
正在删除所有 .pyo 文件:
find . -path "*/*.pyo" -delete
最后,要删除所有 '__pycache__',请键入:
find . -path "*/__pycache__" -type d -exec rm -r {} ';'
如果遇到permission denied错误,请在上述所有命令的开头添加sudo。
我用过的命令:
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
}
希望对您有所帮助!!!
越简单越好
#!/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 .
完成
我 运行 Python3 和 Mac 上的 pip3。对我来说,解决方案如下
(在我项目的根目录下):
pip3 install pyclean
pyclean .
我想强调一下,因为我看到 很多 答案涉及 bash 脚本,在软件中最好的做法是支持经过测试的问题解决方案(这正是已建立的 python 包所代表的)在手动方法上。
从 python3 项目中清除所有 __pycache__
文件夹和 .pyc/.pyo
文件的最佳方法是什么。我看到多个用户建议使用与 Debian 捆绑在一起的 pyclean
脚本,但这并没有删除文件夹。我想要一种在将文件推送到我的 DVS 之前清理项目的简单方法。
当我将 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 .
清理得很好
您可以使用下一个命令手动完成:
find . | grep -E "(/__pycache__$|\.pyc$|\.pyo$)" | xargs rm -rf
这将从当前目录开始递归地删除所有 .pyc
和 .pyo
文件以及 __pycache__
目录。
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 发现的,唯一的(即 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
flag tells Python not to write .pyc
files. (See also the 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
Find files named core in or below the directory /tmp and delete them, but more efficiently than in the previous example (because we avoid the need to use fork(2) and exec(2) to launch rm and we don't need the extra xargs process).
由于这是一个 Python 3 项目,您只需删除 __pycache__
个目录 -- 所有 .pyc
/.pyo
个文件都在其中。
find . -type d -name __pycache__ -exec rm -r {} \+
或其更简单的形式,
find . -type d -name __pycache__ -delete
出于某种原因它对我不起作用(文件已删除但目录未删除),因此为了完整起见我将两者都包括在内。
或者,如果您在受修订控制的目录中执行此操作,您可以告诉 RCS 递归地忽略 __pycache__
文件夹。然后,在需要的时候,清理所有被忽略的文件。这可能会更方便,因为可能需要清理的不仅仅是 __pycache__
.
为什么不直接使用 rm -rf __pycache__
? 运行 git add -A
之后将它们从您的存储库中删除并添加 __pycache__/
到您的 .gitignore 文件。
这是我的别名,可用于 Python 2 和 Python 3 递归删除所有 .pyc .pyo
文件以及 __pycache__
目录。
alias pyclean='find . -name "*.py[co]" -o -name __pycache__ -exec rm -rf {} +'
非常感谢其他答案,基于他们,这就是我用于我的 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
使用PyCharm
删除Python个编译文件
在
Project Tool Window
、right-click一个项目或目录中,Python个编译文件应该被删除。在上下文菜单中,选择
Clean Python compiled files
。
驻留在所选目录中的 .pyc
个文件被静默删除。
如果您需要永久解决方案 将Python 缓存文件保留在项目目录之外:
从Python 3.8开始可以使用环境变量PYTHONPYCACHEPREFIX
为Python定义缓存目录。
来自 Python 文档:
If this is set, Python will write .pyc files in a mirror directory tree at this path, instead of in pycache directories within the source tree. This is equivalent to specifying the -X pycache_prefix=PATH option.
例子
如果您将以下行添加到 Linux 中的 ./profile
:
export PYTHONPYCACHEPREFIX="$HOME/.cache/cpython/"
Python 不会在您的项目目录中创建烦人的 __pycache__
目录,而是会将它们全部放在 ~/.cache/cpython/
请前往您的终端,然后输入:
$rm __pycache__
它将被删除。
从项目目录中键入以下内容:
正在删除所有 .pyc 文件
find . -path "*/*.pyc" -delete
正在删除所有 .pyo 文件:
find . -path "*/*.pyo" -delete
最后,要删除所有 '__pycache__',请键入:
find . -path "*/__pycache__" -type d -exec rm -r {} ';'
如果遇到permission denied错误,请在上述所有命令的开头添加sudo。
我用过的命令:
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
}
希望对您有所帮助!!!
越简单越好
#!/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 .
完成
我 运行 Python3 和 Mac 上的 pip3。对我来说,解决方案如下 (在我项目的根目录下):
pip3 install pyclean
pyclean .
我想强调一下,因为我看到 很多 答案涉及 bash 脚本,在软件中最好的做法是支持经过测试的问题解决方案(这正是已建立的 python 包所代表的)在手动方法上。