GCPのCloud Shell EditorでPythonの開発環境ぐちゃって詰んだので更地にして再構築したらなんとかなった件

# 概要

2019年末くらいからGCPのCloud Shell上でPython開発してCloud Functionにデプロイする作業してました。
ある程度開発終わって数ヶ月放置した後、最近新しい開発案件が発生したのでちょろっといじってデプロイしてテストするかーと思ったらデプロイ時に色々エラーを吐き始めてしまいます。
エラー見つつ対処進めたけどまあうまくいかず、最終的に環境リセットしたらうまく行ったのでまとめます。

Pythonとpipのアップデートとバージョン切り替えが一番手詰まりポイントでした

# 手順

1. バックアップをとる
2. 公式の手順にしたがって環境をリセットする
3. Pythonをpyenvでアップデートする
4. pipをpip3に切り替えてアップデートする
5. 公式の手順にしたがってgcloudをアップデートする
6. 作業ファイルを復元する
7. requirements.txtから更新する
8. あとはdeployして適宜バグを潰す

## 1. バックアップをとる
`pip freeze > requirements.txt`でインストール済みパッケージを書き出したのち、Cloud Sell Editor上にあるファイルを一括ダウンロードしておきましょう。
ファイルはtarで落ちてきます。後でtarのまま上げなおすので、解凍する必要は特にないです。

## 2. 公式の手順にしたがって環境をリセットする

**Cloud Shell の無効化またはリセット**
https://cloud.google.com/shell/docs/resetting-cloud-shell?hl=ja

曰く、
`sudo rm -rf $HOME`
でリセットのちShell再起動でいけるらしいです。

## 3. Pythonをpyenvでアップデートする
こちらのQiita参考になりました、書いた方ありがとうございます。

**GCPのCloud Shellのpythonバージョンの更新方法**
https://qiita.com/greenteabiscuit/items/cbecdf4f84f0b73ff96e

私はpython 3.7.9 で実行しています。

## 4. pipをpip3に切り替えてアップデートする
そのままpipするとpython v2だから気をつけてね的な表示がでます。
放置するとCloud Functionデプロイ時にエラー吐いたので多分ここもpip3にした方がよいと思われ。
下記サイトのコマンド参考に切り替え
https://www.it-swarm-ja.tech/ja/pip/pip3%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92pip%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F/831723093/

`alias pip=pip3`
でいけます。

そのあとは、`pip install -U pip`で最新版にしましょう。


## 5. 公式の手順にしたがってgcloudをアップデートする
さらにgcloudもアップデートしないとダメでした。
公式的にはこちらの手順です：

**gcloud components update**
https://cloud.google.com/sdk/gcloud/reference/components/update

`gcloud components update`
が当該コマンド。
しかしShell上だとこれでアップデートはできず、

```
sudo apt-get update && sudo apt-get --only-upgrade install google-cloud-sdk-app-engine-python-extras google-cloud-sdk-kpt google-cloud-sdk-minikube google-cloud-sdk-app-engine-java google-cloud-sdk-datalab google-cloud-sdk-kind google-cloud-sdk-app-engine-grpc google-cloud-sdk-firestore-emulator google-cloud-sdk-bigtable-emulator google-cloud-sdk-skaffold kubectl google-cloud-sdk-cbt google-cloud-sdk-pubsub-emulator google-cloud-sdk-anthos-auth google-cloud-sdk google-cloud-sdk-datastore-emulator google-cloud-sdk-app-engine-python google-cloud-sdk-spanner-emulator google-cloud-sdk-cloud-build-local google-cloud-sdk-app-engine-go
```
というvery longなコマンドを実行しろと言われます。
実行するとちゃんとアップデートされました。


## 6. 作業ファイルを復元する
1でDLしたtarをアップロードしましょう。
D&Dか、ファイル一覧の何もないところ右クリック→Upload Filesでいけます。
アップロード後、tarコマンドで解凍します。
やり方はこちらのQiitaを参考にしてました：

**[Linux]ファイルの圧縮、解凍方法**
https://qiita.com/supersaiakujin/items/c6b54e9add21d375161f

`tar -xvf xxxx.tar`
コマンド的には上記

## 7. requirements.txtから更新する
あとはpipパッケージを再インストールしましょう。
私は下記サイトを参考にしました。

**Python, pipでrequirements.txtを使ってパッケージ一括インストール**
https://note.nkmk.me/python-pip-install-requirements/

`pip install -r requirements.txt`

たまーに「別のパッケージないとこのパッケージインストールできんぞ」的なエラー出ますが、その時はパッケージ名指定してinstallすればなんとかなります。
ただbigqueryのapi使ってるのですが、関連のパッケージは以下でインストールしないとダメだった：

`pip install google-cloud-bigquery`

## 8. あとはdeployして適宜バグを潰す
あとは `gcloud functions deploy` して無限にバグを~~産みましょう~~潰しましょう。

# 追記
もしかすると、Editor画面下の青いバーでバージョン変更したらめんどくさいことしなくてもいけるのかもしれない。