コンテンツへスキップ

Python Jupyter notebook のポータブル版を作成する。

会社でjupyter notebook をインストールしようとすると、pip install のコマンドがエラーになってしまう。

社内ネットワークの様な、インタネット未接続の環境でもjupyter notebook を使いたい。

オフライン環境でインストールするには、方法が2つ考えられます。
ライブラリをダウンロードしておいてオフラインでインストールする方法と、
オンライン環境でインストール済みのjupyter を作成して持ち込む方法です。

依存ライブラリを全部事前にダウンロードするとかでも対応できるようですが、
それなりにスキルが必要っぽいので、後者で。

Python Jupyter notebook のポータブル版を作成する

Python のダウンロード

埋め込み版のpython を使用します。

Welcome to Python.org

使用したいバージョンで探してダウンロード。「embeddable」がついているやつで。

Download Windowsembeddable package (64-bit)

Python の設定

フォルダの構造をこんな感じにして解凍したフォルダを配置。

└─Python_embed
    ├─Notebook
    └─Python
        └─python-3.11.0-embed-amd64 ←-- 解凍したフォルダ

解凍したフォルダの中身から、
「python<バージョン>.pth」を探してテキストエディタで開き、
import site のコメントアウトを外す。

これをやらないとpip が動かない。

pip の導入

https://bootstrap.pypa.io/

get-pip.py をダウンロードして解凍したフォルダに配置。

配置したフォルダ内でコマンドプロンプトを実行して、「python.exe get-pip.py」を実行する。

python.exe get-pip.py

※現時点ではまだ、インターネット接続が必要。

インターネット接続がない場合はエラーになります。

Jupyter lab、notebook のインストール

python.exe -m pip install jupyterlab

「PATH にこのフォルダを設定することを考えよう」という警告がめっちゃ出ますが、
起動時にバッチで処理するので気にしないでOK です。
しかもいっぱいで出ますが、同じパス(Scripts フォルダ)を指しています。

ノートブックをインストール

python.exe -m pip install notebook

これはアンインストールする。

python.exe -m pip uninstall jedi

起動用バッチの作成

Jyupter notebook 用のコンフィグファイルの作成

コンフィグファイルを以下のコマンドを実行して生成する。

cd Scripts
jupyter-notebook.exe --generate-config

起動フォルダ内に配置。
(ただし、起動バッチで場所を指定しています。)

起動用のバッチファイル作成

この段階で、python_embed フォルダがポータブルな環境になっています。
フォルダごとコピーして、これから作成する起動バッチを実行すれば、Jyupter が起動します。

起動するときに環境変数を指定して、
テンプファイルやら、何やらの生成ファイルとかが起動フォルダ内で完結するように設定します。

pip でインストールした時にPATH に入れるように提言されていたフォルダもSET でPATH に入れてます。

@echo off
::Execution folder path
::set cwdirpath=C:\PTC\python_embed\
set cwdirpath=%~dp0
::Relative path to the folder where the Python executable is stored
set pyintpath=%cwdirpath%python\python-3.11.3-embed-amd64\
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

::Add path to Scripts folder.
::Also added path to WEB Driver.
set PATH=%PATH%;%pyintpath%;%pyintpath%Scripts\;%cwdirpath%edgedriver_win64\
cd /d %notebpath%

call %pyintpath%python.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

バッチを実行すると、コマンドプロンプトが出てきて

seleniumを使う場合

python.exe -m pip install selenium

seleniumを使う場合はブラウザ・エンジンも同梱して、PATH に追加されるようにする。

参考:WebDriver を使用して Microsoft Edge を自動化する

呼び出せる。

ブラウザエンジンの入手先

Edge:Microsoft Edge WebDriver

Chorme:ChromeDriver

Jyupter が起動するときのブラウザ

既存のブラウザが実行される。

既定のアプリで指定した、edge が起動した。

jupyter_notebook_config.py ファイルに下記の記述を追記しておくと、、、

import os.path
import webbrowser

chrome_exe = "C:\Program Files\Google\Chrome\Application\chrome.exe"
if os.path.isfile(chrome_exe):
    webbrowser.register("chrome", None, webbrowser.GenericBrowser(chrome_exe))
    c.NotebookApp.browser = "chrome"

※「Chorme.exe =」にはその環境で動作しているChrome の実行ファイルを指定する。

Chorme が起動する。
Chorme.exe = のパスが間違っている場合は、既定のブラウザが起動すると思われる。

ハマり道

Error: reqwest::Error { kind: Request, url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("chromedriver.storage.googleapis.com")), port: None, path: "/LATEST_RELEASE_107", query: None, fragment: None }, source: hyper::Error(Connect, ConnectError("dns error", Os { code: 11001, kind: Uncategorized, message: "そのようなホストは不明です。" })) }
[I 2022-11-22 14:03:24.920 ServerApp] Saving file at /preference.ipynb
[W 2022-11-22 14:03:24.923 ServerApp] Notebook preference.ipynb is not trusted

一回オンラインで起動できれば、そのままオフライン環境に戻しても起動するが、環境が変わるとまた同じ現象が起きる。
起動できたときに何か設定ファイル的なものを保存している様子もなく、、、

いろいろと試して、WEBDriver へのパス指定をexe に直に指定すると、一回インターネット接続現象がおきるという事に気付く。
フォルダまでのパスに変更しところエラーが出なくなった。

SessionNotCreatedException: Message: session not created:
 This version of Microsoft Edge WebDriver only supports Microsoft Edge version 114

同じリリースで近しいバージョンを使用する。
このドライバーって、ブラウザを操作するやつだから、バージョン合わせないと動かないという。

多分、これ↓に替わった。

c.NotebookApp.webbrowser_open_new = 2

参考サイト

参考というか、、、答えですけど^^
プランとしては2通りあったんですが、ポータブル版を作成する方法にしました。
オフラインでpip を使用するのは、かなりの熟練度が要りそう。

USBメモリがあればどこでも使えるPython + JupyterLab環境の作り方

オフラインでpip installしてプロキシ回避する方法

(Visited 31 times, 1 visits today)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です