Jupyter Notebook/LabでGo言語を利用するためのGophernotesを導入した際に、PATHの設定で手間取ったので解決方法のメモになります。
もしかするともっと良い方法があるかもしれませんが。
事象
Gophernotesを導入し、サンプル程度は動作するようになったのですがサードパーティ製ライブラリをimportしようとするとエラーが発生します。
例えば次のようなimportを行うと
import (
"bufio"
"context"
"fmt"
"io"
"cloud.google.com/go/storage"
)
"cloud.google.com/go/storage"の読み込み部分で次のエラーが発生します。
(もちろん、go getは実施済みです)
error loading package "cloud.google.com/go/storage" metadata: 'go list' driver requires 'go', but executable file not found in $PATH
PATH廻りが怪しいと考え、JupyterlabのターミナルからPATHやJUPYTER_PATHを見直したのですが、うまくいきませんでした。
解決策
Gophernotesのカーネル設定ファイルで環境変数としてPATHを上書きして解決しました。
詳しい説明は次を参照してください。
Making kernels for Jupyter
次のようにenvの項目を追加します。
# vi /home/jovyan/.local/share/jupyter/kernels/gophernotes/kernel.json
{
"argv": [
"/home/jovyan/go/bin/gophernotes",
"{connection_file}"
],
"env": {
"PATH": "/opt/conda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/jovyan/go/bin:/usr/lib/go-1.13/bin"
},
"display_name": "Go",
"language": "go",
"name": "go"
}
環境によって、元々のPATHに違いがあるかもしれません。
次のようにして確認した方が安全です。
import (
"fmt"
"os"
)
fmt.Println(os.Getenv("PATH"))
> "/opt/conda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
これに、/home/jovyan/go/bin(GOPATH/bin)と/usr/lib/go-1.13/bin(GOROOT/bin)を加えています。goのバージョンは適宜変更してください。
上記の設定でインポートエラーが消え、無事に処理が走るようになりました。