PipenvとPoetryを比較してPipenvを使うことにした
Sep 27, 2020 18:40 · 1014 words · 3 minute read
これまでPythonの環境管理にはPipenvを使っていました。
複数人で使うpython製ツールの実行環境構築にpipenvを使ってみたら、とても便利だった
最近はPoetryが伸びているらしいので、試しに使ってみました。
2020 年の Python パッケージ管理ベストプラクティス
今回試した内容をメモしておきます。
目次
Poetryのインストール
% curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
% source $HOME/.poetry/env
Poetryを最新版に更新します。
% poetry self update
You are using the latest version
タブで補完できる設定を追加しておきます。 今回はzshを使っているので、zshの設定です。
% poetry completions zsh > ~/.zfunc/_poetry
それ以外の場合はこちら
Enable tab completion for Bash, Fish, or Zsh
Project Setup
PoetryのProjectを新規作成します。
% poetry new poetry-demo
Created package poetry_demo in poetry-demo
% tree .
.
└── poetry-demo
├── README.rst
├── poetry_demo
│ └── __init__.py
├── pyproject.toml
└── tests
├── __init__.py
└── test_poetry_demo.py
3 directories, 5 files
% cat poetry-demo/pyproject.toml
[tool.poetry]
name = "poetry-demo"
version = "0.1.0"
description = ""
authors = ["***"]
[tool.poetry.dependencies]
python = "^2.7"
[tool.poetry.dev-dependencies]
pytest = "^4.6"
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
ライブラリ追加
試しにrequestsを追加してみます。
% poetry add requests
pyproject.toml に追加されました。
% cat pyproject.toml
[tool.poetry]
name = "poetry-demo"
version = "0.1.0"
description = ""
authors = ["*****"]
[tool.poetry.dependencies]
python = "^2.7"
requests = "^2.24.0"
[tool.poetry.dev-dependencies]
pytest = "^4.6"
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
スクリプト実行
requestsを使ったスクリプトを実行します。
% cat sample.py
import requests
r = requests.get('https://github.com/timeline.json')
print r.text
% poetry run python sample.py
{"message":"Hello there, wayfaring stranger. If you're reading this then you probably didn't see our blog post a couple of years back announcing that this API would go away: http://git.io/17AROg Fear not, you should be able to get what you need from the shiny new Events API instead.","documentation_url":"https://docs.github.com/v3/activity/events/#list-public-events"}
もしくは
% poetry shell
% python sample.py
その他のコマンド
remove, buildなどのコマンドがあります。
Pythonバージョンの切り替え
Poetry自体にはPythonのバージョンを切り替える機能は無いようです。
Pythonのバージョンを切り替えたい場合は、pyenvを使います。
最後に
2020年現在では、Python2.x系を使う機会は減ってきました。
とはいえ、業務の環境でPython2.x系を使う機会はゼロではないですし、UbuntuやMacにデフォルトでインストールされているPythonは未だに2.x系です。
Poetryのsetup.pyやsetup.cfg、MANIFEST.inなどをpyproject.toml にまとめて記述できる点は魅力に感じますが、今の私の利用用途ではそれほど頻繁には使いません。
というわけで、もうしばらくはPython自体のバージョンを切り替えることができるPipenvを使おうと思います。