PipenvとPoetryを比較してPipenvを使うことにした

Sep 27, 2020 18:40 · 1014 words · 3 minute read python

これまでPythonの環境管理にはPipenvを使っていました。

複数人で使うpython製ツールの実行環境構築にpipenvを使ってみたら、とても便利だった

最近はPoetryが伸びているらしいので、試しに使ってみました。

2020 年の Python パッケージ管理ベストプラクティス

今回試した内容をメモしておきます。

目次

Poetryのインストール

Poetry Introduction

% 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を新規作成します。

Basic usage

% 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を追加してみます。

Requests: 人間のためのHTTP

% 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などのコマンドがあります。

Commands

Pythonバージョンの切り替え

Poetry自体にはPythonのバージョンを切り替える機能は無いようです。
Pythonのバージョンを切り替えたい場合は、pyenvを使います。

Managing environments

最後に

2020年現在では、Python2.x系を使う機会は減ってきました。
とはいえ、業務の環境でPython2.x系を使う機会はゼロではないですし、UbuntuやMacにデフォルトでインストールされているPythonは未だに2.x系です。

Poetryのsetup.pyやsetup.cfg、MANIFEST.inなどをpyproject.toml にまとめて記述できる点は魅力に感じますが、今の私の利用用途ではそれほど頻繁には使いません。
というわけで、もうしばらくはPython自体のバージョンを切り替えることができるPipenvを使おうと思います。

tweet Share