PyCharmでプロジェクトフォルダをRenameしたらちょっと面倒なことになった
PyCharmでプロジェクトの名前を変更したらunittestが動かなくなったりpyenvの仮想環境や__pycache__に古い名前が残ったりして少し苦労した話です。
プロジェクト名変更
コードが完成しunittestの単体テストも全て動いた後に最初に適当に命名したプロジェクト名が気に入らなくなったので変更することにしました。
プロジェクト名を右クリックしてRefactor → Renameを選びます。
「Rename directory」と「Rename project」という2つの選択肢が現れたのでとりあえず「Rename project」を選択。
ディレクトリ名は変化がなく、プロジェクト名のみ変更されました。
単体試験を実行すると全てパスします。PyCharmがすべてのimport文を変更してくれたようです。便利!
プロジェクトフォルダ名変更
プロジェクト名とプロジェクトフォルダ名が一致しないのが気持ち悪くなってきました。
今度は「Rename directory」を選択します。
無事、ディレクトリ名が変わりました。
念の為単体試験を実行すると、、、あれ???エラー???
unittestの復旧
コードの中を確認しましたがプロジェクトフォルダ名を参照しているところはありません。
PyCharmが持っている内部データの問題かと思ってとりあえずPyCharmを終了、起動してみました。
すると起動してきたPyCharmが色々とindexingを始めました。
indexing終了後に単体試験を実行しましたがまだ動きません。
するとPyCharmが「パスが変だよ」的なメッセージを出してます。
ご丁寧に「Fix」オプションがあるので勿論、クリック。
するとなにか処理を始めました。
なにかの処理が終わったのを見計らって再度、試験を実行します。
治りました!
仮想環境名が古いまま
全て問題なく動作するようになりましたがpipenv shellで仮想環境に入ったときにプロンプトを見て仮想環境名が古いプロジェクト名のままなことに気づきました。
.venv配下をgrepすると古い名前が色々なところに残っています。ここまで古い名前が残っていると本当に問題なく動いていたのか不安になります。
一つずつ修正するのも面倒ですし、まだどこかに古いゴミが残っていないとも限らないので仮想環境を再作成することにしました。
仮想環境の名前変更
PipfileとPipfile.lockを念の為、別の場所に保存します。(結果的に不要でした)
pipenv --rmします。するとなぜか.venvの削除に失敗したというメッセージが出ました。rmコマンドで削除します。
rm -rf .venv
Python 3.8の仮想環境を再作成します。
pipenv --python 3.8
PipfileとPipfile.lockが無事なことを確認して、同じライブラリを再インストールします。
pipenv sync
これでOKなはずです。単体試験を実行して環境が復旧していることを確認します。
pipenv shellで感想環境に入ってプロンプトを確認すると新しいプロジェクトフォルダ名と一致してました。
__pycache__に古い名前が残っている
念の為プロジェクト全体をgrepしました。
すると__pycache__の中の.pycファイルにまだ古い名前が残っています。
プロジェクトフォルダを右クリックしてClean Python Compiled Filesを選択。
コードを実行して.pycファイルを再生成。
再びプロジェクト全体をgrepしたらHit件数0!
まとめ
たかだかプロジェクトの名前を変えるだけでかなり時間がかかりました。
でもやり方さえわかれば大したことはありません。
これで今後は最初に命名したプロジェクト名に束縛されずに済むと思えばいい勉強だったと思います。
PyCharmでプロジェクト名とプロジェクトフォルダ名を変更する手順をまとめる以下の通りです。
- プロジェクト名を右クリックしてRefactor → Rename → Rename project
- 単体試験動作OK
- プロジェクト名を右クリックしてRefactor → Rename → Rename direcotry
- 単体試験動作NG
- PyCharmを再起動
- indexng終了後「PATHが変だよ」エラーでFixを選択
- 単体試験動作OK
- pipenvで仮想環境を削除、再作成
- プロジェクトフォルダを右クリック → Clean Python Compiled Files 完了!