Bot 環境構築・インフラ

仮想通貨botの開発記録#103(2024/9/8)「Pythonの仮想環境構築【pyenv+Poetry】 」

2024年9月8日

前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。

今回は「pythonの仮想環境をpyenv+poetryで構築する方法」をまとめました。

解決したかったこと

・Pythonの仮想環境構築をpyenvベースで実際に試してみる

・今後も応用が効く技術の土台作りをする(Dockerでの管理)

・触ったことのない技術に触れて理解する(今回はPoetry)

・仮想環境で開発するメリットを実感する

・構築した仮想環境をVS Codeエディタで使えるようにする

Yodaka

仮想通貨bot開発の参考になれば幸いです。

Poetryとは?

Poetryは、Pythonプロジェクトの依存関係管理パッケージ管理をシンプルかつ効率的に行うためのツールです。従来のpipvirtualenvのようなパッケージインストールツールとは異なり、Poetryは仮想環境の管理、依存関係の解決、パッケージの公開まで一貫して扱えるオールインワンツールです。

Poetryの主な目的は、Pythonのプロジェクトをよりシンプルに管理し、依存関係の問題を解消することです。また、プロジェクトのパッケージ化や配布もサポートします。


Poetryの特徴

  1. 依存関係の自動解決
    • Poetryは依存関係を自動的に解決し、正確に管理します。従来のpiprequirements.txtでは、手動で依存関係を管理する必要がありますが、Poetryではpyproject.tomlファイルを使用し、依存関係が自動的に追加・更新されます。
  2. 仮想環境の管理
    • 仮想環境を自動で作成・管理し、プロジェクトごとに環境を分離してくれます。これにより、異なるプロジェクトが異なるバージョンのパッケージを使用していても、相互に干渉しないようになります。
  3. プロジェクトのパッケージ化
    • Poetryを使うと、簡単にPythonのパッケージを作成し、PyPI(Python Package Index)に公開できます。プロジェクトが進む中でのパッケージ化の準備を容易に行うことができます。
  4. pyproject.toml ファイルの使用
    • Poetryは、pyproject.tomlというファイルに依存関係やプロジェクトの設定情報を保存します。このファイルは、Pythonの標準的なパッケージ管理ファイルであり、プロジェクトの構成を明示的に管理できます。
  5. ロックファイルの生成
    • Poetryは、poetry.lockというファイルを生成し、依存パッケージのバージョンを厳密にロックします。これにより、プロジェクトの実行環境が常に同じ状態に保たれ、再現性の高い開発環境が作れます。

Poetryのメリット

  1. 依存関係管理のシンプルさ
    • 依存関係をpyproject.tomlで宣言し、Poetryがその解決や管理を自動で行います。これにより、依存関係の競合やバージョンの問題が解消されやすくなります。
  2. 仮想環境の自動管理
    • Poetryはプロジェクトごとに仮想環境を自動作成・管理します。特にpyenvpyenv-virtualenvと連携することが可能で、異なるプロジェクト間でPythonのバージョンや依存関係を分離できます。
  3. 再現性のある環境の提供
    • poetry.lockファイルにより、正確な依存関係をロックできるため、チームメンバーやサーバー間で同じ環境を再現するのが容易です。
  4. オールインワンツール
    • Poetryは、依存関係管理から仮想環境管理、プロジェクトのパッケージ化まで、プロジェクトの全体を一つのツールで管理できるため、複数のツールを使う必要がなくなります。
  5. 直感的なコマンド操作
    • Poetryのコマンドは直感的で、使いやすい設計になっています。例えば、依存関係を追加する際には、poetry add <package>で簡単にインストールできます。

Poetryのデメリット

  1. 新しいツールの学習コスト
    • Poetryは従来のpipvirtualenvとは異なる操作方法を持つため、使い始めには学習コストがかかります。特に、requirements.txtに慣れている開発者には少し戸惑うかもしれません。
  2. 他ツールとの互換性
    • Poetryはrequirements.txtなどの従来の形式とも互換性を持っていますが、依存関係や環境の設定方法が異なるため、既存のプロジェクトに導入する際には少し手間がかかることがあります。
  3. 仮想環境の自動管理が不要な場合も
    • Poetryはデフォルトで仮想環境を自動的に作成・管理しますが、すでにpyenvcondaなどで仮想環境を管理している場合には、これが不要と感じることがあります。この場合は、仮想環境の自動管理を無効にする設定も可能です。
  4. 一部の開発環境との衝突
    • 特にVSCodeやPyCharmのような開発ツールで、既存の仮想環境管理システム(pyenvconda)との設定が競合する場合があります。この点は環境設定の調整が必要です。


Poetryを使うべき場面

  • 依存関係が複雑なプロジェクトでは、Poetryの依存関係解決機能が非常に役立ちます。
  • パッケージの公開を考えているプロジェクトでは、Poetryはパッケージの管理やPyPIへの公開が簡単に行えます。
  • チーム開発では、Poetryのpoetry.lockにより全員が同じ環境を簡単に再現できるため、チーム全体での環境差異による問題を最小限に抑えることができます。

ここまでのまとめ

Poetryは、Pythonの依存関係管理、仮想環境管理、パッケージの公開などをシンプルに統一する強力なツールです。使いこなすことで、よりスムーズで一貫性のある開発体験を提供します。ただし、学習コストや他のツールとの互換性など、導入時に考慮するべき点もあります。

特に、複数のプロジェクトを管理する開発者やチームでの開発を進めている場合にPoetryは非常に便利です。

手順

Poetryを使って仮想環境を管理する方法もあります。Poetryは、Pythonの依存関係とパッケージ管理を簡単に行うためのツールで、仮想環境の管理機能も備えています。

以下では、Poetryを使って仮想環境を管理する手順を説明します。

1. Poetryのインストール

まず、Poetryをインストールする必要があります。Poetryのインストールは簡単で、以下のコマンドをターミナルで実行します。

curl -sSL https://install.python-poetry.org | python3 -

または、公式ドキュメントから最新のインストール方法を確認することができます(Poetry公式インストールガイド)。

インストールが完了したら、ターミナルを再起動するか、以下のコマンドを実行してPoetryを使えるようにします。

source $HOME/.poetry/env

2. pyenvでPythonバージョンを設定(任意)

もし特定のPythonバージョンを使用したい場合、pyenvを使ってそのバージョンをインストールし、プロジェクトに適用できます。

pyenv install 3.12.4
pyenv local 3.12.4

これにより、指定したバージョンのPythonがプロジェクト内で使用されます。

3. Poetryプロジェクトのセットアップ

次に、Poetryで新しいプロジェクトをセットアップします。プロジェクトディレクトリに移動して、以下のコマンドを実行します。

poetry init

これにより、pyproject.tomlというファイルが作成されます。このファイルは、Pythonの依存関係やプロジェクト設定を管理するためのファイルです。Poetryはこのファイルを基にライブラリやパッケージのインストールを行います。

4. 仮想環境の作成

Poetryは自動的に仮想環境を作成して管理します。プロジェクトディレクトリに移動して次のコマンドを実行します。

poetry install

このコマンドによって、pyproject.tomlに基づいて必要な依存関係がインストールされ、仮想環境が作成されます。

5. 仮想環境の有効化と無効化

Poetryを使って作成した仮想環境を手動で有効化したい場合は、以下のコマンドを使用します。

poetry shell

これにより、仮想環境が有効になり、その環境内でpythonpipを使うことができます。

仮想環境を無効化したい場合は、通常のシェルのようにexitコマンドで終了できます。

exit

6. 依存関係の管理

Poetryは依存関係の追加・削除も簡単に行えます。以下のコマンドで依存パッケージをインストールできます。

poetry add <package_name>

例えば、requestsパッケージをインストールするには次のようにします。

poetry add requests

不要なパッケージを削除する場合は、以下のコマンドを使います。

poetry remove <package_name>

7. VSCodeでPoetry仮想環境を使う

VSCodeでPoetryの仮想環境を使いたい場合、以下の手順で設定できます。

a. VSCodeのPythonインタープリタを設定

  1. VSCodeでプロジェクトを開き、コマンドパレットを表示します (Ctrl + Shift + P)。
  2. Python: Select Interpreter」を選択します。
  3. 自動的にPoetryで作成された仮想環境がリストに表示されます。もし表示されない場合は、以下のコマンドで仮想環境のパスを確認し、直接設定します。
poetry env info --path 

これにより、仮想環境のパスが表示されるので、そのパスを使ってVSCodeでPythonインタープリタを設定します。


ここまでのまとめ

Poetrypyenv-virtualenvに代わる強力なツールで、依存関係の管理や仮想環境の管理をシンプルにしてくれます。

  • pyenvと組み合わせて使用することもでき、特定のPythonバージョンを指定して仮想環境を作成することが可能です。
  • Poetryの仮想環境は自動的に管理されるので、手動で仮想環境を作成する手間が少なく、シンプルにプロジェクトの開発が進められます。
  • VSCodeとの連携も容易で、仮想環境をすぐに使えるようになります。

つまずいたこと&解決方法

Yodaka

私が上記の手順で実行した際に、上手くいかなかった部分どうやって解決したのかを記しておきます。

環境変数の設定

source $HOME/.poetry/env

上記のコマンドをターミナルに入力したところ、「source: no such file or directory: /~~」と表示されました。

このエラーメッセージの原因はPoetryのインストールが完了していないか、インストール時に環境変数が正しく設定されていないためです。

Yodaka

解決方法は「再インストール」か「環境変数を正しく設定すること」です。

私は2. Poetryのパスを確認する以降の手順で解決しました。

1. Poetryを再インストール

まず、Poetryを再インストールしてみます。以下のコマンドをターミナルで実行してください。

curl -sSL https://install.python-poetry.org | python3 -

これにより、Poetryが正しくインストールされます。

2. Poetryのパスを確認する

Poetryのインストールが完了すると、通常は$HOME/.poetry/binにインストールされますが、環境変数に追加されていない可能性があります。次に、Poetryのパスを確認します。

Poetryがインストールされているディレクトリを確認するには、以下のコマンドを実行します。

echo $HOME/.poetry/bin

3. 環境変数にPoetryを追加する

もしPoetryのインストールディレクトリが正しく確認できたら、そのパスを環境変数PATHに追加します。

.bashrc.zshrc(使用しているシェルによって異なります)に以下の行を追加します。

bashを使っている場合

echo 'export PATH="$HOME/.poetry/bin:$PATH"' >> ~/.bashrc

zshを使っている場合

echo 'export PATH="$HOME/.poetry/bin:$PATH"' >> ~/.zshrc
Yodaka

私が実際に入力したのは以下の部分(Poetryのパス設定の下の1行)です。これは、echo 'export PATH="$HOME/.poetry/bin:$PATH"' >> ~/.zshrcPoetryを使うためのパス設定を.zshrcに追加する際は、pyenvcondaの初期化部分とは独立して、他の設定と競合しないように追加する必要があるためです。

【.zshrcファイルの一部】

# Poetryのパス設定 この部分を追加した
export PATH="$HOME/.poetry/bin:$PATH"

# pyenvの初期化
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

# condaの初期化
# >>> conda initialize >>>

追加したら、ターミナルを再起動するか、以下のコマンドで設定を反映させます。

source ~/.bashrc  # bashの場合
source ~/.zshrc   # zshの場合

4. Poetryが正しくインストールされたか確認する

Poetryが正しくインストールされたか確認するには、以下のコマンドを実行します。

poetry --version

Poetryのバージョンが表示されれば、インストールと設定が成功したことになります。

Poetry で仮想環境を作成する

Pythonのバージョンを3.12.4に変更したい場合:

Poetryで新しい仮想環境を作成して、Python 3.12.4を使用するように変更できます。次のようにpyenvを使ってまずPython 3.12.4をインストールし、Poetryでそのバージョンを指定して新しい環境を作成しましょう。

pyenv install 3.12.4  # まだインストールしていない場合
pyenv local 3.12.4  # プロジェクトディレクトリでPython 3.12.4を設定

その後、Poetryで仮想環境を再作成します。

poetry env use 3.12.4
Yodaka

これにより、PoetryがPython 3.12.4の仮想環境を新たに作成し、その仮想環境が使えるようになります。

Poetryの状態を確認する

Poetryの仮想環境のパスを確認するためには、以下のコマンドを使用します。

1. 現在のプロジェクトの仮想環境のパスを確認する

Poetryで現在使用している仮想環境のパスを確認するには、次のコマンドを実行します。

poetry env info --path

このコマンドを実行すると、仮想環境のディレクトリパスが表示されます。例えば、以下のようなパスが表示されるかもしれません。

/Users/your-name/Library/Caches/pypoetry/virtualenvs/projectname-NIU9O)-py3.9

このパスが、現在のプロジェクトでPoetryが管理している仮想環境の場所です。

2. 仮想環境がどのバージョンのPythonを使っているか確認する

仮想環境内でどのPythonバージョンが使用されているかを確認するためには、次のコマンドを使います。

poetry run python --version

これにより、仮想環境内で使用されているPythonのバージョンが表示されます。

パスを参照してVS Codeのpythonインタープリタにpoetryで作成した仮想環境を設定する

VSCodeでPoetryで作成した仮想環境をPythonインタープリタとして設定する手順は、以下の通りです。仮想環境のパスを指定して、VSCodeにその仮想環境を認識させる方法を説明します。

手順

1.Poetryで仮想環境のパスを確認する
まず、Poetryで作成した仮想環境のパスを確認します。以下のコマンドをターミナルで実行して、仮想環境のパスを取得します。

poetry env info --path

例えば、次のようなパスが表示されるかもしれません:

/Users/your-name/Library/Caches/pypoetry/virtualenvs/projectname-NIU9O)-py3.12

このパスをメモしておきます。

2.VSCodeでPythonインタープリタを設定する
次に、VSCodeでその仮想環境をPythonインタープリタとして設定します。

a. VSCodeのターミナルを開く

  • Poetryの仮想環境が自動的にリストに表示されない場合は、「Enter interpreter path」を選択します。
  • 次に、仮想環境のパス(例:/Users/your-name/Library/Caches/pypoetry/virtualenvs/projectname-NIU9O)-py3.12/bin/python)を指定します。
  • 仮想環境のパスには/bin/pythonが含まれている必要があるため、最終的には次のようなパスになります:
/Users/your-name/Library/Caches/pypoetry/virtualenvs/projectname-NIU9O)-py3.12/bin/python

3.VSCodeに仮想環境が設定されたか確認するPythonインタープリタの設定が完了した後、ターミナルで次のコマンドを実行して、正しいPythonバージョンと仮想環境が選択されているか確認します。

python --version

これで、Poetryの仮想環境に設定したPythonのバージョンが表示されるはずです。


まとめ

  1. Poetryで仮想環境のパスを確認して、そのパスをVSCodeに設定します。
  2. VSCodeでPythonインタープリタを選択し、仮想環境のパスを指定してPythonを実行できるようにします。

まとめ

今回は「pyenv+poetryで仮想環境を構築する方法」をまとめました。

私自身が上手くいかなかったことと解決策をまとめることで、今後の開発を振り返る時にも役立つ内容になっているはずです。

また、ひとつずつ手を動かして進めることを通して、何となく分かった気になっていたことがたくさんあることにも気がつきました。

Yodaka

ある程度できるようになったことであっても、再び基礎レベルで理解しようとすることを通してより深く理解することができることも実感できました。

今後もこの調子でbot開発の経過をまとめていきます。

-Bot, 環境構築・インフラ