なにをしてるのか?
pipenvを使って仮想環境を作るじゃないですか。でもこれって、作るきっかけとなったディレクトリがあったから作成されたわけで、ちょっと作って不要になったら『きっかけのディレクトリ』が削除されてしまっていて、作成された仮想環境が無意味になってしまうことがありませんか?
ディレクトリを削除する前にpipenv --rm
しろよ、という話もありますが、していなかった場合に山積してしまうので、そういうものを削除したいという話です。
前提条件
今回の前提条件は以下の通り。
- macOS(Sequoiaにて確認)
- シェルを使います
どこに仮想環境はあるのか
実際に仮想環境を使っているディレクトリがわかっていれば、そのディレクトリに入ってwhich
すればいいわけですよね。
% cd ~/some/sourcedir
% pipenv run which python
このとき可能性は2つありそうです。
- このディレクトリ直下(
.venv
など)- これはディレクトリそのものを消せば済むだけなので楽ちん
-
~/.local/share/virtualenvs
- ここにこれまで作られたものが山積みとなっている
ここでは後者が問題となります。
仮想環境はどのディレクトリを生成源としているのか
ちょっと確認すると、各仮想環境ディレクトリにある.project
ファイルに入っています。
% cd ~/.local/share/virtualenvs
% ls
FugaPythonTest-mnWoDknf calc-9yT_M8cQ dockerbook-Cv0d3VR9 github-pages-sample-S_lCV0KN pythonProject3-ueJ4H6Z- tmp-agwWamBd
apiserver-study-kit-7r5IN4zl compose-wordpress-ayvybK9J fastapi-KYozqYVt jsd-gPxllzqj pythontest-BcnVINUZ xampp-devenv-YPuEHIYF
asbook-ZYHrOfTI deco-VHY-sAUw flet-calc-R8ij6Hm7 numpy-SUf2Jong restart-router-WH7gP2l4 xampp-devenv-doc-YDoh67jC
book-m9RVk3aO django-sample-O3yebDy3 github-book-ci5jYApU python-study-template-G4FxdT1f tests-Xz5WsfNt xampp-system-O_UCM2x4
% cat calc-9yT_M8cQ/.project
/Users/densuke/Documents/calc
ということは、雑に考えれば、このディレクトリが無くなっていれば呼ばれることもないわけでゴミと考えて良いと思います。
なお、各ディレクトリにモジュールも入っているため、よく使っているところはそれなりに大きくなっています。
% du -hs * # ~/.local/share/virtualenvsにいること前提
12M FugaPythonTest-mnWoDknf
143M apiserver-study-kit-7r5IN4zl
90M asbook-ZYHrOfTI
370M book-m9RVk3aO
116M calc-9yT_M8cQ
...(以下略)
ではどうするか?
各仮想環境の中にある .project
に書かれたディレクトリがなければ削除する というロジックでどうにかできそうです。
% for DIR in *;do P=$(cat $DIR/.project); [ ! -d "$P" ] && echo "$DIR"; done
これで『既に存在しないディレクトリを向けに作られた仮想環境』が出力されることになります。
これらを削除すればいいわけですよね…
破壊的操作になるので実際の削除方法は書きません、ここまで来られた方はおわかりですよね。
きっと『もっといい方法』があるはず
もっとシンプルな方法がきっとあると思います。