python3プロジェクトからすべての__pycache__  フォルダーと.pyc/.pyoファイルを削除する最良の方法は何ですか。複数のユーザーpycleanがDebianにバンドルされているスクリプトを提案しているのを見てきましたが、これはフォルダーを削除しません。ファイルをDVSにプッシュする前にプロジェクトをクリーンアップする簡単な方法が必要です。
python3プロジェクトからすべての__pycache__  フォルダーと.pyc/.pyoファイルを削除する最良の方法は何ですか。複数のユーザーpycleanがDebianにバンドルされているスクリプトを提案しているのを見てきましたが、これはフォルダーを削除しません。ファイルをDVSにプッシュする前にプロジェクトをクリーンアップする簡単な方法が必要です。
回答:
次のコマンドで手動で行うことができます:
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rfこれにより、現在のディレクトリにあるすべての* .pycファイルと__pycache__ディレクトリが再帰的に削除されます。
findたりgrepもrm、それが含まれている可能性のある現在の作業ディレクトリのために危険なことができuseful.pycle.jsonたりimportant_deployment_setting_about__pycache__.txt、私はSOの全体のユーザーベースに排除しないであろうなど。(危険なことにrm -rf)壊れたのxargsは、名前に空白が含まれているファイルが原因であることは言うまでもありません。それで私はそれを編集しました…
                    grep: parentheses not balanced
                    私は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 .と、非常にきれいにクリーンアップされました。
__pycache__フォルダーも.pycファイルも削除されません(debianでテスト済み)
                    findmacOSでのBSDの実装はGNU findとは異なります-これはBSDとGNU findの両方と互換性があります。-nameandの-ofor または - を使用したグロビング実装から始め.bashrcます。この関数をファイルに追加します。
pyclean () {
    find . -type f -name '*.py[co]' -delete -o -type d -name __pycache__ -delete
}次にcd、再帰的にクリーンアップするディレクトリに、と入力しpycleanます。
これは、GNU findのみ(つまりLinux)の解決策ですが、正規表現を使用すると少し良いと感じます。
pyclean () {
    find . -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
}Windowsでは、おそらくもありませんfind。ただし、Python 3を使用している可能性がありpathlibます。これには、3.4以降の便利なモジュールがあります。
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
3つのプロセスを使用するため、これは効率が悪いようです。findは正規表現を使用するため、を個別に呼び出す必要はありませんgrep。同様に、が-deleteあるので、個別に呼び出す必要はありません。rmここでのコメントとは異なり、正規表現の一致によって空でない限り、空ではないディレクトリが削除されます。
xargsmanページから:
find /tmp -depth -name core -type f -delete/ tmpディレクトリ以下のcoreという名前のファイルを検索して削除しますが、前の例よりも効率的です(rmを起動するためにfork(2)とexec(2)を使用する必要がなく、追加のxargsプロセス)。
shutil.rmtee、__pycache__ディレクトリでを使用することにより、Pythonバージョンを1行にすることができます。簡単なエイリアスとしては、ワンライナーが良いでしょう。でも今は大ファンなPathので、スクリプトではそのバージョンを使用するつもりです。
                    これはPython 3プロジェクトであるため、__pycache__ディレクトリを削除するだけで済みます。すべての.pyc/ .pyoファイルはその中にあります。
find . -type d -name __pycache__ -exec rm -r {} \+またはそのより単純な形式、
find . -type d -name __pycache__ -delete何らかの理由でこれは機能しませんでした(ファイルは削除されましたが、ディレクトリは機能しませんでした)。
または、リビジョン管理されているディレクトリでこれを行う場合、RCSに__pycache__フォルダーを再帰的に無視するように指示できます。次に、必要なときに、無視されたすべてのファイルをクリーンアップします。クリーンアップする必要があるのはおそらくだけではないので、これはおそらく便利__pycache__です。
.pycファイルがその中にあるわけではありません。
                    Directory not emptyここで2番目のバリアントを取得できるのは私だけですか?
                    これは、すべての.pyc .pyoファイルと__pycache__ディレクトリを再帰的に削除するPython 2とPython 3の両方で機能する私のエイリアスです。
alias pyclean='find . -name "*.py[co]" -o -name __pycache__ -exec rm -rf {} +'Pythonキャッシュファイルをプロジェクトディレクトリから除外する永続的なソリューションが必要な場合:
Python 3.8以降では、環境変数PYTHONPYCACHEPREFIXを使用してPythonのキャッシュディレクトリを定義できます。
Pythonのドキュメントから:
これが設定されている場合、Pythonは、ソースツリー内のpycacheディレクトリではなく、このパスのミラーディレクトリツリーに.pycファイルを書き込みます。これは、-X pycache_prefix = PATHオプションを指定するのと同じです。
例
./profileLinuxで次の行を追加すると、
export PYTHONPYCACHEPREFIX="$HOME/.cache/cpython/"Pythonは__pycache__プロジェクトディレクトリに迷惑なディレクトリを作成せず、代わりにそれらすべてを~/.cache/cpython/
私が使用したコマンド:
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
}それが役に立てば幸い !!!
他の回答に感謝します。それらに基づいて、これは私の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__削除されます。
*__pycache__、*.pyc*を削除し、ファイルとディレクトリを区別しません。生成されたrmコマンドのほとんども不要です。