前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。
今回は「pythonの仮想環境をpyenv+poetryで構築する方法」をまとめました。
解決したかったこと
・Pythonの仮想環境構築をpyenvベースで実際に試してみる
・今後も応用が効く技術の土台作りをする(Dockerでの管理)
・触ったことのない技術に触れて理解する(今回はPoetry)
・仮想環境で開発するメリットを実感する
・構築した仮想環境をVS Codeエディタで使えるようにする
仮想通貨bot開発の参考になれば幸いです。
Poetryとは?
Poetryは、Pythonプロジェクトの依存関係管理とパッケージ管理をシンプルかつ効率的に行うためのツールです。従来のpip
やvirtualenv
のようなパッケージインストールツールとは異なり、Poetryは仮想環境の管理、依存関係の解決、パッケージの公開まで一貫して扱えるオールインワンツールです。
Poetryの主な目的は、Pythonのプロジェクトをよりシンプルに管理し、依存関係の問題を解消することです。また、プロジェクトのパッケージ化や配布もサポートします。
Poetryの特徴
- 依存関係の自動解決
- Poetryは依存関係を自動的に解決し、正確に管理します。従来の
pip
やrequirements.txt
では、手動で依存関係を管理する必要がありますが、Poetryではpyproject.toml
ファイルを使用し、依存関係が自動的に追加・更新されます。
- Poetryは依存関係を自動的に解決し、正確に管理します。従来の
- 仮想環境の管理
- 仮想環境を自動で作成・管理し、プロジェクトごとに環境を分離してくれます。これにより、異なるプロジェクトが異なるバージョンのパッケージを使用していても、相互に干渉しないようになります。
- プロジェクトのパッケージ化
- Poetryを使うと、簡単にPythonのパッケージを作成し、PyPI(Python Package Index)に公開できます。プロジェクトが進む中でのパッケージ化の準備を容易に行うことができます。
pyproject.toml
ファイルの使用- Poetryは、
pyproject.toml
というファイルに依存関係やプロジェクトの設定情報を保存します。このファイルは、Pythonの標準的なパッケージ管理ファイルであり、プロジェクトの構成を明示的に管理できます。
- Poetryは、
- ロックファイルの生成
- Poetryは、
poetry.lock
というファイルを生成し、依存パッケージのバージョンを厳密にロックします。これにより、プロジェクトの実行環境が常に同じ状態に保たれ、再現性の高い開発環境が作れます。
- Poetryは、
Poetryのメリット
- 依存関係管理のシンプルさ
- 依存関係を
pyproject.toml
で宣言し、Poetryがその解決や管理を自動で行います。これにより、依存関係の競合やバージョンの問題が解消されやすくなります。
- 依存関係を
- 仮想環境の自動管理
- Poetryはプロジェクトごとに仮想環境を自動作成・管理します。特に
pyenv
やpyenv-virtualenv
と連携することが可能で、異なるプロジェクト間でPythonのバージョンや依存関係を分離できます。
- Poetryはプロジェクトごとに仮想環境を自動作成・管理します。特に
- 再現性のある環境の提供
poetry.lock
ファイルにより、正確な依存関係をロックできるため、チームメンバーやサーバー間で同じ環境を再現するのが容易です。
- オールインワンツール
- Poetryは、依存関係管理から仮想環境管理、プロジェクトのパッケージ化まで、プロジェクトの全体を一つのツールで管理できるため、複数のツールを使う必要がなくなります。
- 直感的なコマンド操作
- Poetryのコマンドは直感的で、使いやすい設計になっています。例えば、依存関係を追加する際には、
poetry add <package>
で簡単にインストールできます。
- Poetryのコマンドは直感的で、使いやすい設計になっています。例えば、依存関係を追加する際には、
Poetryのデメリット
- 新しいツールの学習コスト
- Poetryは従来の
pip
やvirtualenv
とは異なる操作方法を持つため、使い始めには学習コストがかかります。特に、requirements.txt
に慣れている開発者には少し戸惑うかもしれません。
- Poetryは従来の
- 他ツールとの互換性
- Poetryは
requirements.txt
などの従来の形式とも互換性を持っていますが、依存関係や環境の設定方法が異なるため、既存のプロジェクトに導入する際には少し手間がかかることがあります。
- Poetryは
- 仮想環境の自動管理が不要な場合も
- Poetryはデフォルトで仮想環境を自動的に作成・管理しますが、すでに
pyenv
やconda
などで仮想環境を管理している場合には、これが不要と感じることがあります。この場合は、仮想環境の自動管理を無効にする設定も可能です。
- Poetryはデフォルトで仮想環境を自動的に作成・管理しますが、すでに
- 一部の開発環境との衝突
- 特にVSCodeやPyCharmのような開発ツールで、既存の仮想環境管理システム(
pyenv
やconda
)との設定が競合する場合があります。この点は環境設定の調整が必要です。
- 特にVSCodeやPyCharmのような開発ツールで、既存の仮想環境管理システム(
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
これにより、仮想環境が有効になり、その環境内でpython
やpip
を使うことができます。
仮想環境を無効化したい場合は、通常のシェルのようにexit
コマンドで終了できます。
exit
6. 依存関係の管理
Poetry
は依存関係の追加・削除も簡単に行えます。以下のコマンドで依存パッケージをインストールできます。
poetry add <package_name>
例えば、requests
パッケージをインストールするには次のようにします。
poetry add requests
不要なパッケージを削除する場合は、以下のコマンドを使います。
poetry remove <package_name>
7. VSCodeでPoetry仮想環境を使う
VSCodeでPoetry
の仮想環境を使いたい場合、以下の手順で設定できます。
a. VSCodeのPythonインタープリタを設定
- VSCodeでプロジェクトを開き、コマンドパレットを表示します (
Ctrl + Shift + P
)。 - 「Python: Select Interpreter」を選択します。
- 自動的に
Poetry
で作成された仮想環境がリストに表示されます。もし表示されない場合は、以下のコマンドで仮想環境のパスを確認し、直接設定します。
poetry env info --path
これにより、仮想環境のパスが表示されるので、そのパスを使ってVSCodeでPythonインタープリタを設定します。
ここまでのまとめ
Poetry
はpyenv-virtualenv
に代わる強力なツールで、依存関係の管理や仮想環境の管理をシンプルにしてくれます。
pyenv
と組み合わせて使用することもでき、特定のPythonバージョンを指定して仮想環境を作成することが可能です。Poetry
の仮想環境は自動的に管理されるので、手動で仮想環境を作成する手間が少なく、シンプルにプロジェクトの開発が進められます。- VSCodeとの連携も容易で、仮想環境をすぐに使えるようになります。
つまずいたこと&解決方法
私が上記の手順で実行した際に、上手くいかなかった部分とどうやって解決したのかを記しておきます。
環境変数の設定
source $HOME/.poetry/env
上記のコマンドをターミナルに入力したところ、「source: no such file or directory: /~~」と表示されました。
このエラーメッセージの原因はPoetry
のインストールが完了していないか、インストール時に環境変数が正しく設定されていないためです。
解決方法は「再インストール」か「環境変数を正しく設定すること」です。
私は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
私が実際に入力したのは以下の部分(Poetryのパス設定の下の1行)です。これは、echo 'export PATH="$HOME/.poetry/bin:$PATH"' >> ~/.zshrc
でPoetry
を使うためのパス設定を.zshrc
に追加する際は、pyenv
やconda
の初期化部分とは独立して、他の設定と競合しないように追加する必要があるためです。
【.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
これにより、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のバージョンが表示されるはずです。
まとめ
- Poetryで仮想環境のパスを確認して、そのパスをVSCodeに設定します。
- VSCodeでPythonインタープリタを選択し、仮想環境のパスを指定してPythonを実行できるようにします。
まとめ
今回は「pyenv+poetryで仮想環境を構築する方法」をまとめました。
私自身が上手くいかなかったことと解決策をまとめることで、今後の開発を振り返る時にも役立つ内容になっているはずです。
また、ひとつずつ手を動かして進めることを通して、何となく分かった気になっていたことがたくさんあることにも気がつきました。
ある程度できるようになったことであっても、再び基礎レベルで理解しようとすることを通してより深く理解することができることも実感できました。
今後もこの調子でbot開発の経過をまとめていきます。
何でも実際にやってみると何となく分かったつもりでいたことがたくさんあることに気がつくことができるし、これをもっと高速で回せるようにしていきたいな。
頭でっかちの私には無理して手を動かすくらいがちょうど良いのかもしれない。— よだか(夜鷹/yodaka) (@yodakablog) September 8, 2024