👏

[Python]Poertyでプロジェクトのパッケージ管理をする

2021/05/02に公開

はじめに

Pythonはプロジェクトのパッケージ管理方法が定まっていません(そんな風潮があります。)。Railsでいうところのbundler,Gemfileのようにこれ使っとけばいいでしょ。というのがない。

現行ではrequirements.txtやPipenvがいちばんつかわれて、poetryやpyflowというのがどうやら今後期待されているみたい。ということでPoetryの使い方をやっていきます。

参考

おそらく、序盤は公式を確認してもらっても一緒だと思います。

https://python-poetry.org/docs/

https://python-poetry.org/docs/cli/

インストール方法

pipを使う

$ pip install poetry

curlを使う

#HOMEで実行
$ cd

# インストール
$ curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python

# poetryのPATHを通す
$ sh $HOME/.profile

# shellを再起動(source ~/.bashrcでもいいかも)
$ exec $SHELL -l

こんな手順で実行していきます。インストール後にできる「.profile」はbashrcにパスを追加するシェルスクリプトなのでそれを実行してパスを通しています。「cat .profile」とかやると中身みれます。

↓インストール時のスクショ

Poetry適用のプロジェクトを作成する

方法1(init)

カレントディレクトリに、poetryで使うパッケージ管理ファイルのpyproject.tomlを生成するコマンド。たくさん質問されるが、何か追記・変更したいことがなければ、ほとんどEnterでOK。

# 適用したいプロジェクト内で
$ poetry init
Package name [app]: 
Version [0.1.0]: 
Description []: 
Author [None, n to skip]: n
License []:  
Compatible Python versions [^3.8]:
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 dev dependencies (require-dev) interactively (yes/no) [yes] 
Search for package to add (or leave blank to continue): 
Do you confirm generation? (yes/no) [yes] 
tree
.
└── pyproject.toml

方法2(new)

READMEやtestなど、プロジェクトにあったほうが良さげなファイルも一緒に生成してくれる。

$ poetry new sample
$ tree
.
└── sample
    ├── README.rst
    ├── pyproject.toml
    ├── sample
    │   └── __init__.py
    └── tests
        ├── __init__.py
        └── test_sample.py

ライブラリをインストールする

方法1(コマンドで直接追加する)

$ poetry add パッケージ名
# 開発用プロジェクトのみ
$ poetry add パッケージ名 --dev

方法2(pyproject.tomlをもとにインストールする)

すでにpyproject.tomlが存在し、ライブラリの情報が書き込まれているならこれを実行することになると思います。

$ poetry install
# 開発用のライブラリをのぞいてインストールする。(本番用)
# ちなみに開発用ライブラリがインストールされた状態で実行したらそのライブラリは削除されました。
$ poetry install --no-dev

おまけ(バージョンを範囲で指定する)

$ poetry add "Django >=2.2,<2.3"

ライブラリの削除

$ poetry remove パッケージ名

仮想環境の構築

以下のコマンドを叩くだけ。ターミナルの表示に(app-9TtSrW0h-py3.8)みたいなのが追加されると思います。
source venv/bin/activateみたいなことをしなくても良いのはとても楽ですね。
出るときはexit

$ poetry shell

その他のコマンド

poetryのバージョンを確認する

$ poetry -v

poetry自体のバージョンを更新する

$ poetry self update
$ poetry self update

インストールしているライブラリを確認する

$ poetry show

細かい設定をする

poetryを使う人が気にしているのはこのあたりなんじゃないかな?ってことで書きます。

現状の設定を確認する

設定状況の確認方法から

$ poetry config --list
cache-dir = "/root/.cache/pypoetry"
virtualenvs.create = true
virtualenvs.in-project = false
virtualenvs.path = "{cache-dir}/virtualenvs"  # /root/.cache/pypoetry/virtualenvs

仮想環境をプロジェクト内に作成する

$ poetry config virtualenvs.in-project true

このコマンドは、すでに仮想環境が存在する状態では、適用されないようなので、既存の仮想環境を削除してから実施しましょう。
仮想環境の消し方は、poetry shellを実行したときに、仮想環境のパスが表示されるはずなので、そのディレクトリを削除してしまいましょう。

仮想環境を削除する

$ poetry shell
Spawning shell within /root/.cache/pypoetry/virtualenvs/app-9TtSrW0h-py3.8

#上の文を確認して、仮想環境から出る。
$ exit

# 仮想環境を削除
$ rm -rf /root/.cache/pypoetry/virtualenvs/app-9TtSrW0h-py3.8

仮想環境を作らないようにする

仮想環境をつくらず、グローバルにインストールしたいとき。

$ poetry config virtualenvs.create false

これも、仮想環境がすでに存在すると、機能しないっぽいのでお気をつけて。

最後に

こんなところに頭を使うのも面倒だから「これ使っとけ!」なツールが確立したらいいですね。
Pythonのしんどいポイントの1つだと思います。

Discussion