見出し画像

asdfとPoetryを使ったPython仮想環境の構築

Python の仮想環境構築やバージョン管理では、
venv やpip を使用することが一般的です。

ただ、最近は、
asdfpoetry を使用して
Python の仮想環境構築とバージョン管理をする
動きが出てきています。
その方が、何かと便利だからなんですね。

この記事では、
asdfpoetryを使用することの
メリットをご紹介しながら、
具体的な環境構築の方法について解説していきます。


venvとpipの弱点


venv は仮想環境を構築し、
piprequirements.txt は必要なパッケージのリストを管理します。

しかし、このアプローチにはいくつかの限界があります。
venv は仮想環境を分離するのみで、
Python 自体のバージョン管理機能はありません。

また、piprequirements.txt
パッケージのバージョンを明示的に記述する必要があり、
依存関係の解決が自動化されていません。

ここで、asdfpoetry の組み合わせが
新たな解決策として登場します。

asdfとpoetryの組み合わせのメリット


この組み合わせには、以下のメリットがあります。

  1. 多言語対応のバージョン管理: asdf は Python だけでなく、多くの他のプログラミング言語のバージョンも管理できます。これにより、Python 以外の言語を使用するプロジェクトにおいても一貫したバージョン管理が可能になります。

  2. 依存関係の自動解決: poetrypyproject.toml を使用してプロジェクトの依存関係を管理し、パッケージの依存関係を自動で解決します。これにより、手動での依存関係の管理が不要になり、より効率的な開発プロセスを実現します。

  3. 簡易なパッケージ管理とビルド: poetry はパッケージの作成と公開を一つのツールで簡単に行うことができます。これにより、パッケージ管理とビルドプロセスが大幅に簡素化されます。

  4. プロジェクトごとの設定の簡単化: asdf はプロジェクトごとに異なるバージョンの Python を設定することができ、poetry はその設定に基づいて仮想環境を自動的に作成します。これにより、プロジェクトごとの環境設定が簡単になります。


それでは、具体的な環境構築の方法を見ていきましょう。

asdfのセットアップ


公式ドキュメントに沿って
asdfをセットアップしていきます。

以下の手順は2023年12月時点のものです。
MacOS(zsh)を前提としています。

1. 依存関係のインストール

homebrewを使って依存関係をインストールします

brew install coreutils curl git

2. asdfのダウンロード

git cloneでasdfを落とし込みます

git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.13.1

以下のコードも実行しておくことが推奨されていますので、実行します

brew install asdf


3. asdfのインストール

ZSH&Gitの場合は以下を実行します。
ここが山場です。

. "$HOME/.asdf/asdf.sh"a
fpath=(${ASDF_DIR}/completions $fpath)
autoload -Uz compinit && compinit

WARNING
On macOS, starting a Bash or Zsh shell automatically calls a utility called path_helper. path_helper can rearrange items in PATH (and MANPATH), causing inconsistent behavior for tools that require specific ordering. To workaround this, asdf on macOS defaults to forcily adding its PATH-entries to the front (taking highest priority). This is controllable with the ASDF_FORCE_PREPEND variable.

4. インストール完了確認

一度、ターミナルを閉じて、開き直す
asdf versionと入力してバージョンが表示されればインストール成功

asdf version

もしうまくいかない場合は、以下を実行します

echo ". '$HOME/.asdf/asdf.sh'" > ~/.zshrc


asdfでPythonを使えるようにする


以下は公式ドキュメントです

1. 依存関係のインストール

Pythonをインストールする前に必要な依存関係をインストールします。

brew install openssl readline sqlite3 xz zlib tcl-tk

2. プラグインのインストール

asdf plugin-add python

3.asdf リストの確認

asdf list-all python

asdfのPythonプラグインでインストール可能なバージョンの一覧が表示されます

4.適当なフォルダを作成して、VS-CODEを起動させます

% mkdir ./desktop/python-stepup
% cd ./desktop/python-stepup
% code .


5. .tool-versionsというファイルの作成

できあがったファイルに、
インストールしたプログラムとバージョンを記載します。
ここでは、python 3.11.4と記載します

6.tool versionsの実行

以下のコマンドを実行すると、
tool-versionsに記載のパッケージがインストールされます

% asdf install


7.Pythonが入っているか確認します

% python --version
Python 3.11.4


Poetryのセットアップ


1. poetryのインストール

.tool-versionsにpoetry 1.5.1と入力します

pythonの時と同じ手順を繰り返します。

% asdf install

poetryがちゃんと入っているかを確認するため
Poetryのバージョンを確認します

an.@NOAs-MacBook-Air python-stepup % poetry --version
Poetry (version 1.5.1)


2.poetryの初期化

poetryを使えるようにしていきます。

% poetry init

いろいろ出力されますが、全てENTERを押していきます。

pyproject.tomlファイルが作成されます。
必要に応じて、ファイルの内容を修正していきます。

Pythonのバージョンが正しくなかったりする場合がありますので
修正します。

3.poetryの仮想環境の設定

以下を入力します。

% poetry config virtualenvs.in-project true --local

次に、poetryに使うPythonを指定します。

which pythonコマンドを入力し
pythonが格納されているパスを表示します。
このパスをこぴーして
poetry env use の後に貼り付けます。

% which python
/Users/an./.asdf/shims/python

% poetry env use /Users/an./.asdf/shims/python


バージョンを確認します。

% poetry run python --version
Python 3.11.4


実際に使ってみる


poetryの仮想環境下で
実際にPythonファイルを動かしてみます。

1.パッケージをインストールする

poetryでパッケージをインストールするときの入力は以下の通りです

% poetry add パッケージ名@バージョン

@以下を入力しないと最新バージョンがインストールされます

ここではnumpyの1.26.2をインストールします。

% poetry add numpy@1.26.2

pyproject.tomlをみると、numpyが追加されている


2.poetryでファイルを実行する

poetryでファイルを実行するときのコマンドは以下の通りです

% poetry run python ファイル名

venvと違って仮想環境をあまり意識しなくて
良さそうです。


この記事が気に入ったらサポートをしてみませんか?