tropicbirdのブログ

備忘録です。

Windows Subsystem for Linux(WSL)が動かなくなった時の解消法。

はじめに

いつもコマンドプロンプトから「bash」を入力してWSLを起動していたが、急にWSLが起動しなくなった時の対処方法を記録に残す。

対処方法

1.コントロールパネルから「Windowsの機能の有効化または無効化」を検索し、「Windows Subsystem for Linux」のチェックボックスを「オフ」にする。
2.PCを再起動する。
3.「Windows Subsystem for Linux」のチェックボックスを「オン」にする。
4.PCを再起動する。
5.コマンドプロンプトに「bash」を入力してWSLが起動すれば問題解決。

参考にしたサイト
WSL(Windows Subsystem for Linux)が起動しない時の対処方法

plt.subplots()のaxesに関するメモ。

はじめに

plt.subplots()のaxesを理解するのに時間がかかったので、記録に残す。特に、(1,5)や(5,1)など、一つの列や行のみに図をプロットするには注意が必要である。

一般的な複数表示の記述
fig,axes=plt.subplots(3,3,figsize=(5,5))
x=[i for i in np.random.randn(10000)]
y=[i for i in np.random.randn(10000)]
axes[0,0].hist(x)
axes[1,2].hist(x)

f:id:tropicbird:20191201004717p:plain

図を1つ表示

・注意点:plt.subplots(1, 1, figsize=(5,5))ではない。

fig,ax=plt.subplots(1,figsize=(5,5))
x=[i for i in np.random.randn(10000)]
ax.hist(x)

f:id:tropicbird:20191201004731p:plain

図を縦に一列に並べたい場合

・注意点:plt.subplots(2, 1, figsize=(5,5))ではない。

fig,axes=plt.subplots(2,figsize=(5,5))
x=[i for i in np.random.randn(10000)]
y=[i for i in np.random.randn(10000)]
axes[0].hist(x)
axes[1].hist(y)

f:id:tropicbird:20191201004744p:plain

図を横に一列に並べたい場合

・注意点:この場合、(ax1, ax2)のようにaxesはタプル形式にする。

fig,(ax1,ax2)=plt.subplots(1,2,figsize=(5,5))
x=[i for i in np.random.randn(10000)]
y=[i for i in np.random.randn(10000)]
ax1.hist(x)
ax2.hist(y)

f:id:tropicbird:20191201004801p:plain

ホストOSのWindowsにあるDropboxにVirtualBoxで作成した仮想環境のUbuntuOSからアクセスする方法

1.仮想環境のUbuntuOSを起動する。
2.Oracle VM VirtualBox Managerを開く
3.仮想環境を選択する。
4.Settingを選択する。
5.Shared Foldersを選択する。
6.フォルダを追加する。設定内容は以下の通り。
  • Folder Pathは共有したいWindowsOSのDropboxの場所(例:C:\Users\*WinUSERNAME\Dropbox
  • Folder NameはDropbox
  • Auto-mountにチェックを入れる
  • Make Permanentにチェックを入れる
  • Mount pointは仮想環境で共有フォルダとして使用するフォルダの場所。(例:/home/vagrant/shared_folder/)
7.UbuntuOSのターミナルで以下のコマンドで、共有フォルダ用のフォルダ(例:shared_folder)を作成し、それにDropboxを接続する。
$ mkdir shared_folder
$ sudo mount -t vboxsf Dropbox /home/vagrant/shared_folder

venvで作成した仮想環境をJupyterで正常に動作させる方法。

はじめに

AnacondaでインストールしたJupyter(及びIPython)では、venvで作成したPythonの仮想環境をJupyterのカーネルに接続しても、仮想環境のPython(及びライブラリ)は参照されず、Anacondaがインストールされている本体環境のPython(及びライブラリ)が参照される。そのため、Jupyter上で仮想環境を使うことはできない(※見た目上は動いてそうだけど、実際は本体環境のPythonを参照してる。)。

解決策

Anacondaは使用せずに、本体環境に直接Jupyter(Notebook、Lab)をインストールすると、この問題は解決できた。

方法

0.Vagrant で新しく仮想開発環境(以降、「本体環境」という)を作る。

・略
vagrantの仮想開発環境にSSHで接続する際に、ポート名を設定(例えば8080)しておくとJupyterを開く際に便利。

C:\Users\*WinUSERNAME\*仮想開発環境フォルダ>vagrant ssh -- -L 8080:localhost:8080
1.本体環境でPythonをインストールする。

・略

2.本体環境でJupyter Notebookをインストールする。

以下のコマンドを本体環境のターミナルに入力し、Jupyter Notebookをインストールする。

vagrant@ubuntu1804:~$ pip3 install jupyter


もしインストール中にエラーが出れば、以下のコマンドを入力する。

vagrant@ubuntu1804:~$ pip3 install --user jupyter
3.本体環境でJupyter Labをインストールする。

以下のコマンドを本体環境のターミナルに入力し、Jupyter Labをインストールする。

vagrant@ubuntu1804:~$ pip3 install jupyterlab


もしインストール中にエラーが出れば、以下のコマンドを入力する。

vagrant@ubuntu1804:~$ pip3 install --user jupyterlab
4.本体環境でPythonの標準モジュールvenvを使用して、Pythonの仮想環境を作成する。

↓過去記事参照
tropicbird.hatenablog.com

5.4で作成しPythonの仮想環境をJupyterのカーネルに追加する。

↓過去記事参照
tropicbird.hatenablog.com

6.Jupyter (NotebookまたはLab)を開く

・Jupyter Notebookの場合

vagrant@ubuntu1804:~$ jupyter notebook

または

vagrant@ubuntu1804:~$ jupyter notebook --ip=0.0.0.0 --port=8080

・ Jupyter Labの場合

vagrant@ubuntu1804:~$ jupyter lab

または

vagrant@ubuntu1804:~$ jupyter lab --ip=0.0.0.0 --port=8080

・出てきたURL(例:http://127.0.0.1:8080/?token=xxxxxxxxxxxxxxxxxxxx)をブラウザ(Chromeなど)に張り付けるとJupyterが開く。

7.Jupyter上でPythonの仮想環境が正常に動作しているか確認する。

・仮想環境に入っていないモジュール(例えばnumpy)を本体環境でインストールする。
・Jupyterを開く。
・Jupyterのnotebook上で、「import numpy」が本体環境のカーネルではインポートでき、仮想環境のカーネルでインポートできなければOK。
(↑Jupyter上でカーネル間のPythonがそれぞれ独立しているということ。つまりJupyter上でPythonの仮想環境が正常に動作しているということ。)

複数の仮想環境をJupyterのカーネルできるようにする方法

Pythonの標準モジュールvenvを使って仮想環境(vm_1_venv※名前は適当)を作成する。

vagrant@ubuntu1804:~$ python3.7 -m venv vm_1_venv


・仮想環境を起動する。

vagrant@ubuntu1804:~$ . vm_1_venv/bin/activate


・Jupyterにカーネルを追加する。

(vm_1_venv) vagrant@ubuntu1804:~$ ipython kernel install --user --name=vm_1_venv --display-name=vm_1_venv


・以下のコマンドでカーネルが追加されたか確認する。元々のカーネルPython3と新しく追加したカーネルvm_1_venvが表示される。

(vm_1_venv) vagrant@ubuntu1804:~$ jupyter kernelspec list
Available kernels:
  python3      /home/vagrant/.local/share/jupyter/kernels/python3
  vm_1_venv    /home/vagrant/.local/share/jupyter/kernels/vm_1_venv


・Jupyter NotebookまたはJupyter Labを起動して新しいカーネルvm_1_venv)が追加されているか確認する。

f:id:tropicbird:20191103203515j:plain
Jupyter Notebook

f:id:tropicbird:20191103203548j:plain
Jupyter Lab

venvで作成した仮想環境とAnacondaでインストールしたIPython(Jupyter)との関係

はじめに

venvで作成した仮想環境を使って、Jupyterで作業をしていたら、インストールしていないパッケージも使えたので、その原因を調べた。

venvで作成した仮想環境を通常のPythonのコンソールで使用する際の挙動

venvで作成した仮想環境をアクティベートした状態でターミナルから開いた通常のPythonのコンソール上では、仮想環境にインストールしていないパッケージを読み込むことはできない。

venvで作成した仮想環境をAnacondaを使ってインストールしたJupyterやIPythonで使用する際の挙動

venvで作成した仮想環境をアクティベートした状態で、IPythonやJupyterを使用すると、仮想環境にインストールしているパッケージは仮想環境のフォルダから読み込まれる。

仮想環境にインストールされていないパッケージは、仮想環境が乗っている本体のOSのAnacondaフォルダのPythonのパッケージフォルダから読み込まれる。

venvで作成した仮想環境のカーネルのJupyterでパッケージをインストールする時の挙動

venvで作成した仮想環境のカーネル上のファイルであっても、Jupyter上でpipを実行をすると、パッケージは仮想環境が乗っている本体のOSのAnacondaフォルダに保存されるため、注意が必要。