CCCマーケティング データベースマーケティング研究所の Tech Blog

研究所スタッフによる格闘記録やマーケティング界隈についての記事など

Pythonの実験環境をWindows PCにpyenv+poetryで作りました。(poetry導入編)

こんにちは、技術開発ユニットの三浦です。最近寒くなり、日が出ている時間も短くなってきました。冬が近づいてきたなぁと感じます。クリスマスやお正月など、明るい行事がこれからやってくる今頃の時期はいくつになってもワクワクします。

さて、Pythonの実験環境をWindows PCに構築してみた話の続きを今回は紹介させていただきます。前回は1つの端末(OS)の中に複数のPythonのversionをインストールすることが出来るpyenvについて紹介しました。

techblog.cccmk.co.jp

今回はPythonのプロジェクトごとに必要なlibraryや環境などを管理することを可能にするpoetryというツールについて紹介します。

poetry

poetryはPythonのlibraryのインストールやアップデートや依存関係の管理、プロジェクトのbuildや公開などを簡単に行うことを可能にするツールです。

python-poetry.org

プロジェクトごとに仮想環境を作成し、その中に閉じた形でPythonのlibraryを追加してくれるので他のプロジェクトに影響を与えない独立した状態でプロジェクトを作ることができます。

poetryのインストール

公式のHPにはOSごとにインストールの手順が掲載されています。今回はWindowsの手順を行いました。PowerShellを起動して以下のコマンドを実行します。

(Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py -UseBasicParsing).Content | python -

コマンドの実行が完了したら、次のコマンドを実行し、インストールされたpoetryのバージョンが出力されたらOKです。

poetry --version

ちなみにpoetryをアンインストールするときは以下のコマンドを実行します。

(Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py -UseBasicParsing).Content | python - --uninstall

使ってみる

とりあえずテストプロジェクトを作ってみます。 まず適当なフォルダを作り、そこにpoetryのプロジェクトを作ります。PowerShellで

mkdir test
cd test
poetry init

のようにコマンドを実行し、最後のコマンドpoetry initを実行すると対話形式でpoetryのプロジェクトの初期設定がはじまります。それらが終了すると、フォルダの中にpyproject.tomlというファイルが生成されていると思います。このファイルはプロジェクトの説明や依存しているPythonのlibraryが記録されたファイルです。

[tool.poetry]
name = "test"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]

[tool.poetry.dependencies]
python = "^3.10"

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

次にこのプロジェクトに何かlibraryを追加してみます。libraryの追加はaddコマンドで行うことが出来ます。

poetry add flask

pyproject.tomltool.poetry.dependenciesセクションを見ると、今追加したlibraryが追加されていると思います。

addコマンドを実行した際に以下のようなエラーが出ることがありました。私の環境ではnumpyを追加した時に発生しました。

・・・
  • Check your dependencies Python requirement: The Python requirement can be specified via the `python` or `markers` properties

    For numpy, a possible solution would be to set the `python` property to ">=3.10,<3.11"

    https://python-poetry.org/docs/dependency-specification/#python-restricted-dependencies,
    https://python-poetry.org/docs/dependency-specification/#using-environment-markers

エラーメッセージを見る限り、pythonプロパティの設定を">=3.10,<3.11"のように変える必要があるようです。pyproject.tomlファイルのtool.poetry.dependenciesセクションのPythonのversion指定の箇所を

[tool.poetry.dependencies]
python = ">=3.10,<3.11"

のように変更すると追加することが出来ました。

pyenvでlocalに設定したPythonのversionでpoetryのプロジェクトを作る

最後に前回のpyenvと合わせ技で、pyenvのlocalのPythonのversionで、poetryプロジェクトを作ってみます。フォルダを作り、pyenvでlocalのPythonのversionを設定します。

mkdir pyenv-poetry-test
cd pyenv-poetry-test
pyenv local 3.9.8

次にpoetry initを実行し、poetryプロジェクトの初期設定を行います。初期設定が完了したらlibraryを追加していきます。データ分析でよく利用するpandas, jupyterを追加してみます。

poetry add pandas jupyter

仮想環境の中でPythonを動かしてみます。

poetry run python

pyenvでlocal指定したPythonのversionが起動します。最後に仮想環境上でjupyterサーバを起動します。

poetry run jupyter notebook

ブラウザが起動し、jupyter notebookが利用できればOKです。

まとめ

pyenvとpoetryを使ってPythonの実験用の環境をWindows PCに作ってみました。ところどころエラーが出て困った箇所もありました。もし同様のエラーが出た際 、本記事の内容が一助になれば幸いです・・・。