清除所有__pycache__文件夹和.pyc/。python3项目中的Pyo文件。我见过许多用户建议将pyclean脚本与Debian捆绑在一起,但这并没有删除文件夹。在将文件推送到分布式交换机之前,我想要一个简单的方法来清理项目。


当前回答

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

其他回答

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

pip3 install pyclean
pyclean .

我想强调的是,因为我看到许多答案都涉及bash脚本,所以软件中的最佳实践是倾向于使用经过测试的问题解决方案(这正是已建立的python包所代表的),而不是手卷方法。

有一个不错的pip包。

pip install pyclean
pyclean --verbose .

done

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

它将被移除。

如果你需要一个永久的解决方案来让Python缓存文件远离你的项目目录:

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

来自Python文档:

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

例子

如果将下面的行添加到~/。Linux下的profile shell配置文件:

export PYTHONPYCACHEPREFIX="${HOME}/.cache/Python"

Python不会在你的项目目录中创建恼人的__pycache__目录;相反,它会把它们都放在~/.cache/Python下

如果您使用Linux和macOS,可以将这些行添加到~/。Bash_profile / ~/。跨平台shell配置的概要文件(也会根据需要创建文件夹):

# set python cache folder for .pyc files:
#   https://stackoverflow.com/a/57415054
case "${OSTYPE}" in
    darwin*)
        folder="${HOME}/Library/Caches/Python"
        if [[ ! -d "${folder}" ]]; then mkdir -p "${folder}"; fi
        export PYTHONPYCACHEPREFIX="${folder}"
        ;;
    linux-*)
        folder="${HOME}/.cache/Python"
        if [[ ! -d "${folder}" ]]; then mkdir -p "${folder}"; fi
        export PYTHONPYCACHEPREFIX="${folder}"
        ;;
    *)
        printf "WARNING: unsupported operating system '%s'; "`
              `'not setting PYTHONPYCACHEPREFIX' "${OSTYPE}" >&2
        return 1
        ;;
esac