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

305

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

18个回答

8

使用PyCharm

删除Python编译文件

  1. 项目工具窗口中,右键单击要从中删除Python编译文件的项目或目录。

  2. 在上下文菜单中选择清除Python编译文件

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


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

2

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

请注意,如果有任何必须保存的临时文件,请在运行不带-Xgit clean之前将它们移出本地存储库或添加到索引树中。


1

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

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

0

尽可能简单

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

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


你考虑过使用“pyclean” pip包吗?它可以完成这项工作,很可能涵盖了此脚本无法覆盖的边缘情况。 - Hebron Watson

0

为什么不直接使用rm -rf __pycache__命令?然后运行git add -A命令将其从您的代码库中删除,并将__pycache__/添加到您的.gitignore文件中。


1
他不是手动执行这个操作。他正在尝试将其添加到Debian软件包中使用的脚本中。Debian软件包不是与git一起使用的,而是与Debian软件包管理器或apt安装程序一起使用的。 - Craig

0
如果您有一个嵌套目录包含多个垃圾文件,您可以将根目录提供给以下函数,它将清除所有子文件夹中的垃圾文件:
import os, shutil
def clean_all_from_junk(directory):
    def delete_junk(f):
        try:
            shutil.rmtree(f)
        except:
            os.unlink(f)
    msk_dirs = os.listdir(directory)  
    for f in msk_dirs:
        if f.startswith('.') or f=='__pycache__' or f.endswith('txt'):
            junk_p = os.path.join(directory, f)
            print('deleted-->', junk_p)
            delete_junk(junk_p)
        else:
            if os.path.isdir(f):
                subfolder_p = os.path.join(directory, f)
                clean_all_from_junk(subfolder_p)
    return 'All cleaned!'

 
clean_all_from_junk('path/to/root/directory')

-16

请直接进入您的终端,然后输入:

$rm __pycache__

并且它将被移除。


你的意思是如果有人在Python项目中有成千上万个__pycache__文件夹,那么他可以采用你的方法并且不会出现问题?提问者想要自动化这个任务,所以如果你能提供一个脚本来自动执行清理操作,那将非常有帮助。谢谢! - Ayush
最基本的是 rm -r __pycache__ - Spartan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接