8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-11-04

概要

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画面下の青いバーでバージョン変更したらめんどくさいことしなくてもいけるのかもしれない。

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?