しばしばプログラミングに立ちはだかる壁が「環境に関する問題」です。
コードを書きたいのに、環境にばかり時間をとられてしまう。インストールした当初は問題がなかったのに、いつの間にかいろいろと支障が生じてきた。…こんな環境にまつわる悩みは、多くの方が経験したことがあるはずです。
Pythonの場合、そんな悩みの解決策の1つが「Google Colaboratory(略称: Colab)」を使うことです。Googleがクラウド上に準備してくれている環境なので、自分で構築したりメンテナンスする必要がありません。Googleアカウントがあれば、ブラウザですぐに無料で利用できて非常に便利ですが、どうしてもデータはクラウドに置くことになります。それが気になる場合もあると思います。
では、Google Colabのような環境をUSBメモリの中に構築できたらどうでしょうか。そうすれば、会社でも自宅でも同じ環境が使えて、データをクラウドにアップする必要もなくなります。
そこで今回はUSBの中だけでPython + JupyterLabを実行できる環境を作る方法をご紹介します。これで、パソコンにPythonをインストールしなくてもUSBメモリを挿し込むだけでいつも同じ環境を利用できるようになります。
環境をUSBメモリに入れて持ち運べるだけでなく、講習やデモでUSBを渡してあげればPythonをインストールしないですぐにはじめることができます。ぜひ様々なケースでご活用ください。
本記事の目次
- 構築する環境
- 構築の手順
- 1. 作業用フォルダーを準備する
- 2. Pythonをダウンロードして配置する
- 3. pipを使えるようにする
- 4. ライブラリをインストールする
- 5. 起動用バッチファイルを作成する
- 6. 起動してみる
- 7. USBにコピーする
- 最後に(留意すること)
本記事はWindows限定です
今回利用する「埋め込み可能なPythonパッケージ」は、Windows版しかリリースされていないため、残念ながらMacやLinuxでは本記事の方法を用いることができません。
構築する環境
今回は、Pythonをインストールしていないパソコンでも、USBメモリがあれば「JupyterLab」でPythonが使える環境を構築します。
Jupyterlabは、Webブラウザに表示された画面で、プログラミングができるようにしてくれるライブラリです。結果やグラフもそのままWebブラウザに表示されるため、試行錯誤しながらのプログラミングに向いています。そのため、データ分析でよく用いられています。また、ノートに書き込む感覚で使えるのでPythonの学習用としてもおすすめです。
なお、Google Colabは、従来の「Jupyter Notebook」をベースにしていますが、JupyterLabはその後継にあたります。複数のタブを開けるなど新機能が加わりさらに使いやすくなっています。
構築の手順
1. 作業用フォルダーを準備する
パソコンの「ドキュメント」フォルダーに、作業用のフォルダーを「PythonUSB」という名前で作成しておきます。さらにその中に「Notebook」と「Python」という2つのフォルダーを以下のように作成します。
├ ドキュメント/
│ ├ PythonUSB/ <= 作業用フォルダー
│ │ ├ Notebook/
│ │ └ Python/
│ │
- PythonやJupyterLabの実行環境は「Python」フォルダーに構築します。
- 「Notebook」フォルダーは、プログラムコードのデフォルトの保存先として作成しておきます。JupyterLabを起動するとこのフォルダーの中身が左側のサイドバーに表示されます。
作業が完了したら、最後に「PythonUSB」フォルダーごとUSBメモリーにコピーして稼働させます。
JupyterLabではPythonファイル(*.py)ではなくノートブック形式(*.ipynb)
JupyterLabやJupyter Notebookでは、プログラムコードはPythonファイル(*.py)ではなくノートブックと呼ばれる形式(*.ipynb)で保存されます。
2. Pythonをダウンロードして配置する
WindowsにPythonをインストールするときに用いるパッケージには、以下の4種類があります。
- 完全版インストーラ(一般的なWindowsインストーラ)
- 埋め込み可能なパッケージ(今回はこれを用います)
- Microsoftストアパッケージ
- nuget.org パッケージ
一般に用いられるのは「完全版インストーラー」ですが、今回は「埋め込み可能なパッケージ」を用います。Pythonをインストールしていないユーザーにプログラムを配布するときなどに使われます。
Pythonを実行するのに必要なファイル一式がまとめられているので、このパッケージを利用すればパソコンにインストールされている他のシステムとは独立した環境を構築できます。
(1) Pythonの公式サイトからダウンロードする
埋め込み可能なパッケージをダウンロードするには、まずPythonの公式サイトのダウンロードページにアクセスして、以下のような最新のバージョンの「Downloads」のリンクをクリックします(記事執筆時点の最新は3.9.1)。
するとバージョンごとのダウンロードページが表示されます。下のほうにある以下のような「Files」の「Windows embeddable package」が埋め込み可能なパッケージです。
32-bitと64bitの2種類がありますが、今回は32-bitのほうをクリックしてダウンロードします(64-bitマシンのみを使う場合は64-bitでも大丈夫です)。
今回はPython3.9.1で構築しています
今回は以下のページからPython3.9.1をダウンロードして構築します。最新のバージョンに適宜読み替えてください。
(2) 展開してPythonフォルダに配置する
ダウンロードしたファイルはpython-3.9.1-embed-win32.zip
のようなZIP形式になっています。展開してフォルダごと以下のように「Python」フォルダーの下に入れます。
├ ドキュメント/
│ ├ PythonUSB/
│ │ ├ Notebook/
│ │ └ Python/
│ │ └ python-3.9.1/ <= 展開して配置したパッケージ
このときフォルダー名は「python-3.9.1-embed-win32」から「python-3.9.1」に短く変更しておきます。
3. pipを使えるようにする
JupyterLabをはじめとするライブラリをインストールするには「pip」と呼ばれるツールが必要ですが、埋め込み可能なパッケージのPythonには「pip」は含まれません。そこで、「pip」が使えるように、以下の方法により手動でインストールします。
(1) python39._pthの編集
先ほど配置した「python-3.9.1」フォルダーの中にあるファイルpython39._pth
をメモ帳で開き、以下のように#import site
の先頭の#
を削除(コメントアウトを解除)し上書き保存します。
import site
を有効にすることで、Python起動時にsite.main()
が実行され、ライブラリの保管場所(site-packages
フォルダー)がパスに追加されるようになります。
(2) get-pip.pyのダウンロード
以下のリンクからpipインストール用のコードget-pip.py
をダウンロードし「python-3.9.1」フォルダーに保存します。ダウンロードはリンクを右クリックしたメニューから保存できます。
https://bootstrap.pypa.io/get-pip.py
(3) get-pip.pyを実行してpipをインストールする
get-pip.py
をコマンドプロンプトを用いてPythonで実行してpipをインストールします。
作業は「python-3.9.1フォルダー」で行うので、以下のようにエクスプローラーでこのフォルダーを選択した状態でボックスにcmd
を入力実行してコマンドプロンプトを起動します。
コマンドプロンプトが起動したら以下のコマンドを入力して実行します。
python.exe get-pip.py
以下のように「Successfully installed pip ~」と表示されればpipのインストールは成功です。茶色いWARNINGはここでは気にしないで大丈夫です(指摘されているパスは、後ほどバッチファイルで対応します)。
python get-pip.py
と入力しても同じく実行できますが、本記事ではpython.exe
と明示的に入力しています。
4. ライブラリをインストールする
これで「pip」が使えるようになったので、JupyterLabをはじめてとするライブラリをインストールします。
(1) JupyterLabのインストール
さきほどpipをインストールしたコマンドプロンプトに以下のコマンドを入力して実行すると「JupyterLab 」のインストールが開始されます。
python.exe -m pip install jupyterlab
JupyterLab自体が使用する多数のライブラリも一緒にインストールするので、しばらく完了するまで待ちます。以下のように「Successfully installed ~」と表示されれば完了です。
pipをインストールしたときと同じく茶色いWARNINGが表示されますが、指摘されているパスは、後ほどバッチファイルで対応しますのでここでは気にしないで大丈夫です。
(2) 他のライブラリのインストール
ついでによく用いるライブラリをインストールしておきます。今回は、「openpyxl 」、「beautifulsoup4 」、「numpy 」、「pandas 」、「matplotlib 」、「japanize-matplotlib 」、「seaborn 」の7つのライブラリをインストールします。
JupyterLabのインストールの後に、続けて以下のコマンドをコマンドプロンプトで実行します。
python.exe -m pip install openpyxl
python.exe -m pip install beautiflsoup4
python.exe -m pip install numpy
python.exe -m pip install pandas
python.exe -m pip install matplotlib
python.exe -m pip install japanize-matplotlib
python.exe -m pip install seaborn
なお、この方法で後からいつでもインストールできるので、ここでは必要なライブラリだけにしておいても大丈夫です。
(3) jediのアンインストール
最後に以下のコマンドをコマンドプロンプトで実行して、「jedi」というライブラリをアンインストールします。このライブラリがあると「JupyterLabのコード補完機能」が競合して作動しないので、ここでアンインストールしておきます。
python.exe -m pip uninstall jedi
アンインストールの途中で「Proceed (y/n)?」と表示されたら以下のように「y」を入力します。
JupyterLabのコード補完機能とは
JupyterLabでは入力の途中でTABキーを押すと以下のように候補が表示されます。
5. 起動用バッチファイルと設定ファイルを作成する
JupyterLab起動用のバッチファイル(start-jupyterlab.bat
)とJupyterLabの設定ファイル(jupyterlab_settings.py
)を「PythonUSB」の中に配置します。
├ ドキュメント/
│ ├ PythonUSB/
│ │ ├ Notebook/
│ │ ├ Python/
│ │ ├ jupyter_notebook_config.py <= 設定ファイル
│ │ └ start-jupyterlab.bat <= 起動用バッチファイル
│ │
この2つのファイルは以下のリンクからダウンロードできるようにしてありますので、ご利用ください。
ファイルの内容は以下の通りです。
起動用バッチファイル
start-jupyterlab.bat
@echo off
set cwdirpath=%~dp0
set pyintpath=%cwdirpath%Python¥python-3.9.1¥
set notebpath=%cwdirpath%Notebook¥
set usrpfpath=%cwdirpath%_user_profile¥
set PYTHONHOME=
set PYTHONPATH=
set JUPYTER_CONFIG_DIR=%usrpfpath%jupyter
set IPYTHONDIR=%usrpfpath%ipython
set MPLCONFIGDIR=%usrpfpath%matplotlib
set LOCALAPPDATA=%usrpfpath%appdata¥Local
set APPDATA=%usrpfpath%appdata¥Roaming
set PATH=%PATH%;%pyintpath%;%pyintpath%Scripts¥
cd /d %notebpath%
echo JupyterLabを起動中です。このウィンドウは閉じないでください。JupyterLabの「File」メニューから「ShutDown」を選択すると自動で閉じます。
call %pyintpath%pythonw.exe %pyintpath%Scripts¥jupyter-lab.exe ^
--config=%cwdirpath%jupyter_notebook_config.py ^
--LabApp.user_settings_dir=%usrpfpath%jupyterlab¥lab¥user-settings ^
--LabApp.workspaces_dir=%usrpfpath%jupyterlab¥lab¥workspaces
%~dp0
はバッチファイルでよく用いられます。実行されているディレクトリのパスを取得できます。ここでは、このバッチファイルがある「PythonUSB」フォルダーのパスになります。python-3.9.1
の部分は、ダウンロードしたPythonのバージョンに応じて変更してください(たとえば、Python 3.11.2の場合はpython-3.11.2)。- JupyterLabを起動するとWebブラウザや各種ライブラリのプロファイルが生成されます。それらは通常パソコンのユーザープロファイルフォルダーに保存されますが、今回はこれらもUSBに保存されるようにします。そのため、プロファイルの保存先を指定する「APPDATA」などの環境変数を、
set
コマンドで一時的に「PythonUSB」フォルダの下の「_user_profile」フォルダーを示すように書き換えています。 - JupyterLabを起動するのに
python.exe
ではなくpythonw.exe
を用いることで、起動中のメッセージを非表示にしています(python.exe
に書き換えれば表示するようにできます)。 - 設定ファイルの
jupyter_notebook_config.py
もUSBから読み込むように、jupyter-lab.exe
を実行するときに--config
オプションにより「PythonUSB」フォルダーに指定しています。
JupyterLabでなく「Jupyter Notebook」を使いたい場合
従来からの「Jupyter Notebook」の方を使いたい場合は、以下のようにバッチファイルのjupyter-lab.exe
の部分をjupyter-notebook.exe
に書き換えるだけです。これでこのバッチファイルを実行するとJupyter Notebookが起動するようになります。
...
call %pyintpath%pythonw.exe %pyintpath%Scripts¥jupyter-notebook.exe ^
--config=%cwdirpath%jupyter_notebook_config.py ^
--LabApp.user_settings_dir=%usrpfpath%jupyterlab¥lab¥user-settings ^
--LabApp.workspaces_dir=%usrpfpath%jupyterlab¥lab¥workspaces
設定ファイル
jupyter_notebook_config.py
...
# 814行目だけコメントアウトを解除して値を「1」にしてある。
c.ServerApp.webbrowser_open_new = 1
...
- このファイルを編集すれば、JupyterLabの設定を変更できます。デフォルトでは831行すべてがコメントアウトされており、そのままだとデフォルトの設定になります。
- 今回は814行目だけコメントアウトを解除して、値を「1」に変更してあります。こうすることでブラウザが新しいタブではなく「新しいウィンドウ」で開くようになります(ただし反映されない場合もあります)。
ブラウザをChromeに変更したい場合
JupyterLabを起動すると自動的にデフォルトのブラウザが選択されます。今回の例ではMicrosoft Edgeが起動していますが、これをいつもChromeブラウザが開くように変更するには、jupyter_notebook_config.py
の末尾に以下のコードを書き加えてください。
# jupyter_notebook_config.pyに以下のコードを追加
import os.path
import webbrowser
chrome_exe = "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe"
if os.path.isfile(chrome_exe):
webbrowser.register("chrome", None, webbrowser.GenericBrowser(chrome_exe))
c.NotebookApp.browser = "chrome"
6. 起動してみる
USBにコピーする前に「ドキュメント」フォルダーにある状態で起動してみます。以下のようにエクスプローラーでstart-jupyterlab.bat
をダブルクリックします。
すると以下のようにコマンドプロンプトに続いてデフォルトのブラウザが自動的に起動します。
しばらく待つと以下のようにJupyterLabの画面が表示されますので、以下のようにNotebookのところの「Python3」をクリックしてみます。
すると「Untitled.ipynb」という新規のタブが開くので、以下のコードを入力して簡単なプログラム(コサインカーブの描画)を実行してみましょう。
セルにコードを入力したら、Shift + Enter でコードを実行できます。
%matplotlib inline
from matplotlib import pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.cos(x)
plt.plot(x, y)
コードを実行すると以下のようにコサインカーブ(余弦波)が表示されます。
なお、ここで「Matplotlib is building the font cache; this may take a moment.」と表示されているのは、Matplotlibがフォントのキャッシュファイルを出力しているので、しばらく待つよう知らせています。次回からこのメッセージは表示されません。
これで起動の確認ができたので、終了します。終了は、「File」メニュー ▶「Shut down」を選択します。以下のようなダイアログが表示されるので、「Shut Down」をクリックします。
以下のように「Sever stopped」と表示されたら(このときコマンドプロンプトは自動で閉じられます)、ブラウザを閉じて終了させます。
ファイルは「Notebook」フォルダーに保存されます
前述のstart-jupyterlab.bat
でカレントを「PythonUSB」フォルダーにある「Notebook」フォルダーに設定しているので、このフォルダーがJupyterLabの作業フォルダーになります。今回作成した「Untitled.ipynb」ファイルは、この「Notebook」フォルダーに自動保存されます。
また、JupyterLabを起動すると以下のように「Notebook」フォルダーの中身が左側のサイドバーに表示されるので、講習やデモではサンプルをこの「Notebook」フォルダーの中に入れて配布するとわかりやすくなります。
ファイル名を変更するには?
ファイル名を変更するには、JupyterLabの左側でファイルを右クリックで表示されるメニューから「Rename」を選択して新しいファイル名を入力します。
7. USBにコピーする
あとは「PythonUSB」フォルダーをUSBにコピーするだけですが、「_user_profile」フォルダーには先ほど試しに起動したときのWebブラウザなどのプロファイルが保存されてるので、以下のように削除してからUSBにコピーします。
なお、この「PythonUSB」フォルダーの容量は以下のように400MB程度ですが、起動するとプロファイルが100MB程度は生成されますので、運用するには1GB以上は空き容量を確保しておくのが望ましいです。
ファイル数が約18,000もあるので、コピーは少し時間がかかります(複数のUSBメモリにコピーする場合などは、ZIP形式に圧縮してからコピーして展開すると時間を短縮できます)。
コピーが完了したら、使用するパソコンにUSBを差し込んで、前述と同様にstart-jupyterlab.bat
をダブルクリックするとJupyterLabが起動します。
初回はプロファイルを書き込むため少し起動に時間がかかりますが、次回からはスムーズに起動するようになります。弊社でモバイル用に使用しているASUS E203MA(Celeron N4000)では2回目以降は10秒程度で起動しています。
最後に(留意すること)
今回の方法で構築した環境を使うときには、以下の2つに気を付けてください。特にUSBメモリのアクセス速度はとても大事です。低速のUSBメモリだと快適に使うことができません。
読み書きスピードが高速のUSBメモリを使用する
JupyterLabは非常に多くのファイルを用いますので、読み書きスピードが遅いUSBメモリだと実用性に乏しくなります。パソコンのインターフェイスはUSB 3.1以上の規格、USBメモリは以下のような高速のもの(またはSSD)を使うようにするのがポイントです。
「Notebook」フォルダーはこまめにバックアップをとる
あくまでもUSBメモリなので、コードやデータは忘れないでバックアップをとっておくことが必要です。今回の構成では、「Notebook」フォルダーにコードが保存されるので、このフォルダーはこまめにバックアップをとるようにします。
今回の記事には、Pythonの環境構築に関する様々なエッセンスが含まれています。ぜひ他にもいろいろと調べながら、自分が使いやすい環境を構築してみてください。