Poetry に入門する
公式ドキュメントを参考に、基本的な部分を確認します。
環境
Poetry のインストール
$ curl -sSL https://install.python-poetry.org | python3 - $ echo 'export PATH="/home/{ユーザー名}/.local/bin:$PATH"' >> ~/.bash_profile $ source ~/.bash_profile $ poetry --version Poetry version 1.1.13
Bash completion
$ poetry completions bash | sudo tee /etc/bash_completion.d/poetry
Enable tab completion for Bash, Fish, or Zsh
新規プロジェクトの作成
$ poetry new poetry-demo
ディレクトリ構造。
./poetry-demo/ ├── README.rst ├── poetry_demo │ └── __init__.py ├── pyproject.toml └── tests ├── __init__.py └── test_poetry_demo.py
pyproject.toml
[tool.poetry] name = "poetry-demo" version = "0.1.0" description = "" authors = ["Your Name <you@example.com>"] [tool.poetry.dependencies] python = "^3.8" [tool.poetry.dev-dependencies] pytest = "^5.2" [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api"
プロジェクトに Python パッケージのインストール(poetry add コマンド)
Flask をバージョン指定してインストール。
$ poetry add flask=2.1.0
toml ファイルに Flask の記述が追加されている。
poetry-demo/pyproject.toml
[tool.poetry] name = "poetry-demo" version = "0.1.0" description = "" authors = ["Your Name <you@example.com>"] [tool.poetry.dependencies] python = "^3.8" Flask = "2.1.0" [tool.poetry.dev-dependencies] pytest = "^5.2" [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api"
Python 仮想環境の起動
$ poetry shell Spawning shell within /home/mikochi/.cache/pypoetry/virtualenvs/poetry-demo-BneQjLxR-py3.8 mikochi@LAPTOP:~/work/poetry-demo$ . /home/mikochi/.cache/pypoetry/virtualenvs/poetry-demo-BneQjLxR-py3.8/bin/activate (poetry-demo-BneQjLxR-py3.8) mikochi@LAPTOP:~/work/poetry-demo$ python Python 3.8.10 (default, Mar 15 2022, 12:22:08) [GCC 9.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import flask >>> print(flask.__version__) 2.1.0
抜けるときは exit
コマンド。
プロジェクトに Python パッケージのインストール(toml ファイルに追記)
toml ファイルに直接追記することで、 FastAPI をインストールします。
poetry-demo/pyproject.toml
[tool.poetry] name = "poetry-demo" version = "0.1.0" description = "" authors = ["Your Name <you@example.com>"] [tool.poetry.dependencies] python = "^3.8" Flask = "2.1.0" FastAPI = "0.74.0" # add [tool.poetry.dev-dependencies] pytest = "^5.2" [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api"
dependencies and dependency groups
update
コマンドでインストールされます。
$ poetry update
install
コマンドでは、以下の通り怒られます。lock file と pyproject.toml が一致していない。
$ poetry install
Installing dependencies from lock file
Warning: The lock file is not up to date with the latest changes in pyproject.toml. You may be getting outdated dependencies. Run update to update them.
SolverProblemError
lock file とは、
When Poetry has finished installing, it writes all the packages and their exact versions that it downloaded to the
poetry.lock
file, locking the project to those specific versions.
Installing without poetry.lock
Python のバージョンを指定して、 Python 仮想環境を作成する
Poetry は、OS デフォルトの Python バージョンを利用して仮想環境を作成するとのこと。
By default, Poetry will try to use the currently activated Python version to create the virtual environment for the current project.
env use
コマンドで、利用したい Python のパスを指定すると、そのパスの Python で仮想環境を作ってくれます。
$ poetry new poetry-demo2 Created package poetry_demo2 in poetry-demo2 $ cd poetry-demo2/ $ which python3.9 /usr/bin/python3.9 $ poetry env use /usr/bin/python3.9 Creating virtualenv poetry-demo2-SAZXFJgb-py3.9 in /home/mikochi/.cache/pypoetry/virtualenvs Using virtualenv: /home/mikochi/.cache/pypoetry/virtualenvs/poetry-demo2-SAZXFJgb-py3.9
Switching between environments
環境の確認。
$ poetry env info Virtualenv Python: 3.9.13 Implementation: CPython Path: /home/mikochi/.cache/pypoetry/virtualenvs/poetry-demo2-SAZXFJgb-py3.9 Valid: True System Platform: linux OS: posix Python: /usr
Displaying the environment information
でも、TOML ファイルの記述は更新されないので、もやっとします。
poetry-demo2/pyproject.toml
[tool.poetry] name = "poetry-demo2" version = "0.1.0" description = "" authors = ["Your Name <you@example.com>"] [tool.poetry.dependencies] python = "^3.8" [tool.poetry.dev-dependencies] pytest = "^5.2" [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api"
その他、 OS デフォルトの Python バージョンを pyenv で管理することで、仮想環境の Python バージョンを切り替える方法も紹介されていました。
Python スクリプトの実行
テスト用に、以下のスクリプトを用意します。
poetry-demo2/demo.py
import sys def demo(): print(sys.version) if __name__ == "__main__": demo()
run
コマンドに Python コマンドを渡すことで、仮想環境上で Python コマンドを実行してくれます。
$ poetry run python demo.py 3.9.13 (main, May 23 2022, 22:01:06) [GCC 9.4.0]
TOML ファイルの tool.poetry.scripts
セクションに、エイリアスとなる情報を設定できます。
poetry-demo2/pyproject.toml
[tool.poetry] name = "poetry-demo2" version = "0.1.0" description = "" authors = ["Your Name <you@example.com>"] [tool.poetry.dependencies] python = "^3.9.13" [tool.poetry.dev-dependencies] pytest = "^5.2" [tool.poetry.scripts] # add demo = 'demo:demo' # add [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api"
TOML ファイルに設定した名前で実行できるようになります。
$ poetry run demo 3.9.13 (main, May 23 2022, 22:01:06) [GCC 9.4.0]
とりあえず、こんなところで。