見出し画像

pyenv + poetry 環境構築



概要

Pythonの環境構築のまとめです。Pythonのバージョン管理にpyenv、依存関係管理とパッケージ管理にpoetryを使用しています。フォーマッターにruffを設定する手順についても最後にTipsでまとめています。


参考リンク

Poetry documentation (日本語訳)

Poetry 公式ドキュメント


手順


仮想環境作成

Pythonのインストール可能なバージョンの確認

pyenv install --list

Pythonをインストール

pyenv install 3.11.7

Poetryをインストール

pip install poetry

仮想環境をプロジェクト直下に生成

poetry config virtualenvs.in-project true 

pyproject.toml作成

poetry init

sub-shellを起動(仮想環境が使えるshell)

poetry shell

Pythonのバージョン確認

Python -V

pyenv installでinstallしたバージョンと同じであることを確認


パッケージインストール

パッケージ名でインストール

poetry add numpy pandas

requirements.txtからインストール

cat requirements.txt | xargs poetry add


パッケージ依存関係の更新

poetry update


requirements.txt出力

poetry export -f requirements.txt --output requirements.txt --without-hashes


Tips

Makefileで実行コマンドを管理すると楽

PHONY: update-lib

update-lib:
	poetry install --no-root
	poetry update
	poetry config warnings.export false
	poetry export -f requirements.txt --output requirements.txt --without-hashes

パッケージはグループで管理できる

poetry add mkdocs --group docs

--group (-G): The group to add the dependency to.
--dev (-D): Add package as development dependency. (Deprecated, use -G dev instead)

https://python-poetry.org/docs/cli/#options-4

プロジェクトのディレクトリを作成するときの設定


https://python-poetry.org/docs/pyproject/#packages

[tool.poetry]
# ...
packages = [
    { include = "my_package" },
    { include = "extra_package/**/*.py" },
]

ruffの設定

ruffをインストール

poetry add ruff --group dev

pyproject.tomlでruffの設定を記述

[tool.ruff]
src = ["scripts"]
target-version = "py311"
line-length = 119
exclude = [".mypy_cache"]
extend-select = ["I"]
fixable = ["I"]
ignore = ["I001"]


[tool.ruff.lint.isort]
known-first-party = ["steps", "utils"]

.vscode/settings.jsonで保存時にruffが起動するように設定

{
    "[python]": {
        "editor.formatOnSave": true,
        "editor.codeActionsOnSave": {
            "source.fixAll": "explicit",
            "source.organizeImports": "explicit"
        },
        "editor.defaultFormatter": "charliermarsh.ruff"
    }
}

この記事が気に入ったらサポートをしてみませんか?