【注意】あなたがroot権限で作業をしていないならこの記事は有用でないと思います。今回の問題はroot権限で作業しているから起こっているものなので一般ユーザーの方は読まなくても大丈夫だと思います。

普段WSl上で開発を行っているのですが、今日久々にPythonを書こうとしたら詰まった点について解説していきます。
*問題発生から解決まで丸一日消費してしまった…

動作環境

    • WSL2

 

    • Ubuntu 18.04

 

    • pyenv 1.2.18-12-g098227f2

 

    • python 3.8.2

 

    • pip 20.1

 

    pipenv 2018.11.26

pythonのバージョン管理のためにpyenvを使っています。更にプロジェクトディレクトリ内の仮想環境を整えるためにpipenvを使っています。外部モジュールはpipenv経由でインストールするようにしています。

環境構築

以下のコマンドで仮想環境を整えます

mkdir py_playground && cd py_playground
pipenv --python 3.8

インストールした外部モジュール

    • flake8

 

    • autopep8

 

    • mypy

 

    • ipython(必須)

 

    • jupyterlab(必須、notebookでもいいけど今からやるならlabだよね)

 

    • numpy

 

    • scipy

 

    matplotlib

初期ディレクトリ構成

Pipfile(Node.jsでいうところのpackage.jsonみたいなもの)
Pipfile.lock

どこで詰んだのか

いつもどうりvscodeを立ち上げてJupyterNotebookでも書こうかなと思って、新規のノートブックを立ち上げたその時…

カーネルが接続してくれない

おかしい、pipenvで仮想環境は整えているはずなのに…
こうして私はJupyterを起動させるための長い長い旅に出た

問題1 デフォルトでは.venvディレクトリが生成されない

windows上で開発してたときはうまく行ったんだ…何が違うんだ…
まず発見したのはインタプリタが入っているはずの.venvディレクトリが生成されていないのである。
これはpipenvのデフォルト設定のとき仮想環境は~/.local/share/virtualenvs/の下に生成されているのである。
ひとまずこいつを変更することにした。

pipenv で任意の場所の仮想環境を使う を参考にして以下のように.zshrcに記述した(bashの人は.bashrcに書いてください)

export PIPENV_VENV_IN_PROJECT=1

これでとりあえずプロジェクトディレクトリ直下に.venvディレクトリが生成されるようになった。だがまだ接続できていない。

問題2 ターミナルからjupyterが立ち上がるようにしてみよう

jupyter lab

するとエラーが出た。どうやらroot権限で実行することは非推奨らしく、その場合は–allow-rootを追加しろとのこと

jupyter lab --allow-root

だが今度は何も表示られなくなった。
いろいろ探した結果、設定ファイルを作成すればうまく表示されるようになった。

jupyter notebook --generate-config

生成された設定用スクリプトの先頭に以下を追加した。

c = get_config()
c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8080

よしターミナルに接続状況が表示されるようになった。

問題3(これが解決策です) vscodeのjupyter系の設定がデフォルトのままだとうまくいかない

どうやらvscodeでjupyterを立ち上げるとそのタイミングでjupyter serverを立ち上げるようである。そこで問題2が邪魔をする。
そこでvscode内で–allow-rootを設定した。
F1を押す->検索フィールドに「python jupyter arg」と入力すると先頭にpython: specify jupyter commandline argumentが表示されると思う。それを選択して–allow-rootと入力する。

最終的にこれで解決した。

めでたしめでたし

广告
将在 10 秒后关闭
bannerAds