簡體   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