時には立ち止まってみるのもいいよ

仕事の合間の息抜き。やってることは仕事と同じ。

python embedded で Portable な poetry 環境つくるお

poetryなプロジェクトをそのままコピーして使えたら、嬉しいんじゃん

てなことで、前回の続きです。

poiuy56.hatenablog.com

 

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^)/