[Python]Poetryをインストールして使ってみた
はじめに
今までPythonのパッケージ管理は何も考えずにpipを使っていました。(requires.txtで一括インストールなどもラクだったので)
最近poetryを使用する記事や資料を拝見することが多くなったので、今回は試しに使用してみたいと思います。
※誤植などもあると思うので適宜修正しています。
TL;DR
poetryのインストール~一番シンプルな仮想環境の構築まで記載ます。(自分が勉強した際の備忘録)
自分なりの解釈も記載しているので長くなります。
前提環境
pc: mac book pro
shell: zsh
python: v3.9.10(pyenvでインストール。poetryをインストールできるversion。)
インストール
curl、pipを使用する2通りの方法があるようですが、こちらに記載があるcurlの方法でインストールしていきます。
curlでのインストール
下記のコマンドでインストールをします。
# HOMEにいない場合は移動
$ cd
# インストール
$ curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
インストール後に $HOME/.profile というファイルができるそうです。自分の場合はzprofileという名前でした。(zshだから?)
このファイルを下記のように実行してあげるとパスが通ります。
ファイルの中身はexport PATH="HOME/.poetry/bin:$PATH"
です。
(必要に応じて次の変更をしてください。HOME -> $HOME)
なので、zshrcに直接書き込んでもできます。
# poetryのPATHを通す
$ sh $HOME/.zprofile
# コマンドで入れる場合
$ echo 'export PATH="$HOME/.poetry/bin:$PATH"' >> ~/.zshrc
# ファイルを編集する場合
$ vim ~/.zshrc
# 一番下(どこでも良いが)に下記を追記
export PATH="$HOME/.poetry/bin:$PATH"
設定の変更をshellに読み込ませるために下記のコマンドを実行するか新しいshellウインドウを開きます。
# shellに変更を適用
$ source ~/.zshrc
pipでのインストール
もし、pipを使う場合は下記のコマンドのようです。
pip install poetry
バージョン確認
PATHを通したらpoetryコマンドでを実行してバージョン確認をしてみます。
$ poetry -V
Poetry version 1.1.13
poetryでの環境構築
プロジェクト作成
公式Dosを参考に実施します。
(日本語の記事もあるようです。)
poetry new
new
でプロジェクトの雛形を生成できます。--name
オプションで指定をするとプロジェクト内に作成されるディレクトリの名前を変更できます。デフォルトではプロジェクトと同じ名前になるようです。
--src
オプションでsrcディレクトリの階層をして出来そうです。
$ poetry new my-package
Created package my_package in my-package (--name sampleApp)
$ tree
my-package
├── README.rst
├── my_package(sampleApp)
│ └── __init__.py
├── pyproject.toml
└── tests
├── __init__.py
└── test_my_package.py
2 directories, 5 files
poetry init
poetry init
では pyproject.toml のみ作成できます。
対話形式で質問されるので、必要に応じて入力します。
Package name
は入力無しの場合はカレントディレクトリの名前となります。
$ poetry init
This command will guide you through creating your pyproject.toml config.
Package name [<folder>]: my-package2
Version [0.1.0]:
Description []:
Author [name <email>, n to skip]: n
License []:
Compatible Python versions [^3.9]:
Would you like to define your main dependencies interactively? (yes/no) [yes]
...
Search for package to add (or leave blank to continue):
Would you like to define your development dependencies interactively? (yes/no) [yes]
Search for package to add (or leave blank to continue):
Generated file
[tool.poetry]
name = "my-package2"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
[tool.poetry.dependencies]
python = "^3.9"
[tool.poetry.dev-dependencies]
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
Do you confirm generation? (yes/no) [yes]
環境のセットアップ
上記までの処理で .toml ファイルができているので、必要があればインストールしたいパッケージなどを追記します。今回は何も修正せずに後で追加するようにします。
poetry newで作成されたディレクトリ内で作業をしていきます。
下記のpyproject.tomlを使用します。
[tool.poetry]
name = "my-package"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
[tool.poetry.dependencies]
python = "^3.9"
[tool.poetry.dev-dependencies]
pytest = "^5.2"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
下記のコマンドで仮想環境をスタートします。
$ poetry install
Creating virtualenv my-package in <path>/my-package/.venv
...
Installing the current project: my-package (0.1.0)
仮想環境 my-package が作成されます。この時、仮想環境のpathが表示されますが、設定によってpathは変わってきます。今回はプロジェクト内に作成する設定にしているのでmy-project内に作成されています。設定の変更などは下の方に書きます。
下記のコマンドで作成した仮想環境にアクセスなどできます。
# 仮想環境へのアクセス
$ poetry shell
# 仮想環境から出る
$ exit
仮想環境の外からプログラムなどを実行したい場合はrun
を使います。
poetry run python app.py
パッケージ管理
パッケージの追加
$ poetry add <package-name>
パッケージの削除
$ poetry remove <package-name>
Poetryの設定
設定の確認
config
コマンドでpoetryの設定を確認できます。
$ poetry config --list
cache-dir = "<cache-dir>"
experimental.new-installer = true
installer.parallel = true
virtualenvs.create = true
virtualenvs.in-project = true
virtualenvs.path = "{cache-dir}/virtualenvs" # <cache-dir>/virtualenvs
virtualenvs.create
仮想環境を作成せずにグローバルでインストールしたい時はこちらの値をfalseにすれば良いでそうです。
$ poetry config virtualenvs.create false
仮想化が必要ない場合は設定しておきましょう。(コンテナ内で使用する場合?)
virtualenvs.in-project
仮想環境を作成する場合はvirtualenvs.path
で指定されたpathに仮称環境が作成されます。
仮想環境をプロジェクト内に作成したい場合はvirtualenvs.in-project
をtrueにします。
$ poetry config virtualenvs.in-project true
既に仮想環境が存在する場合は、適用されないので、既存の仮想環境を削除する必要があるようです。
# 仮想環境のパスを確認
$ poetry shell
Spawning shell within <virtualenvs.path>/my-package-XVicfC3z-py3.9
# 仮想環境が出る
$ exit
# 仮想環境の削除
$ rm -rf <virtualenvs.path>/my-package-XVicfC3z-py3.9
その他
バージョン確認
$ poetry -v
バージョンの更新
$ poetry self update
パッケージの確認
$ poetry show
参考
- Introduction
- Commands
- Poetry documentation (ver. 1.1.6 日本語訳)
- [Python]Poertyでプロジェクトのパッケージ管理をする
- 【Python】Poetry始めてみた & Pipenv から poetry へ移行した所感
最後に
poetryの場合は仮想環境構築までできるのは便利かもしれないと思いました。
dockerなどで環境構築するときは仮想環境はいらない?(時と場合によりますね)
peotryで環境作成する際のパッケージ追加をなるべく自動したい。
この記事自体がすごく長くて読みづらいと思うので、将来的にいくつかのセクションごとに分けてみやすくしたいです。
Discussion