python embedded で Portable な poetry 環境つくるお
poetryなプロジェクトをそのままコピーして使えたら、嬉しいんじゃん
てなことで、前回の続きです。
embedなpythonでpipが使えるところまでできました。
これに、
- pyenv
- poetry
をインストールします。
pyenvのインストール
これは普通にインストールするだけですね。
python -m pip install pyenv-win --target C:\python-emb\.pyenv
みたいな感じで pip を使って install するだけです。
インストール先のターゲットをpython-emb本体の下に作っておきましょう。
poetryのインストール
こちらは普通にインストールするとHOMEディレクトリの下にインストールされてしまうので、POETRY_HOME環境変数を設定してからインストールします。
$ENV:POETRY_HOME = 'C:\python-emb\pypoetry'
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -
こんな感じにすると、poetryがpython-embの下にインストールされます。
プロジェクトの環境を再構築
poetry install すると .venv が出来上がりますが、poetryを実行したときの環境を引き継いで .venv/pyvenv.cfg に絶対パスが書かれてしまいます。
これがデフォルトのpoetryやPOETRY_HOMEの場所と異なっているとうまく動かないようです。。(ひどい仕様だと思うよ)
ポータブルにするのは配布用なので、ついでに .venv も作り直しましょう
cd project_dir
del .venv
$ENV:POETRY_HOME = 'C:\python-emb\pypoetry'
C:\python-emb\pypoetry\bin\poetry.exe install
プロジェクト配布用アーカイブ
.venvにpoetryの絶対パスがかかれたりするので、python-embを展開するパスは固定で決めてしまった方が簡単で良いと思います。
- python-emb.zip :python-embedded + pip + pyenv + poetry 環境
- project.zip : poetryで .venv 作成済みのプロジェクトフォルダ一式
の2つに分けて配布して、python-emb.zip はprojectを作った時と同じフォルダに展開してもらえば、ZIPを展開するだけでprojectのpythonスクリプトが実行する環境が整います!
あとは、実行用BATファイルを作っておけばダブルクリックで実行できてカンペキです!
cd project_dir
set POETRY_HOME=C:\python-emb\pypoetry
%POETRY_HOME%\bin\poetry.exe run python main.py
\(^o^)/