Open3

python環境構築 with pyenv and poetry

mitk232mitk232
  • pyenv
    • pythonの異なるバージョンを管理するツール
  • pyenv-virtualenv
    • pythonの仮想環境を作成
    • 同一バージョンでも環境名により新たに名前空間を指定できて、環境の管理がしやすくなる
  • poetry
    • パッケージ管理、依存関係解決、パッケージングなどの設定をpyproject.tomlで一元的に管理できる
mitk232mitk232

dev dependencies

result

settings.json

{
  "python.formatting.blackPath": <black path>,
  "python.formatting.provider": "black",
  "python.analysis.typeCheckingMode": "basic",
  "python.linting.flake8Enabled": true,
  "python.linting.flake8Path": <flake8 path>,
  "python.linting.flake8CategorySeverity.E": "Warning",
  "python.linting.flake8CategorySeverity.F": "Warning",
  "python.sortImports.path": <isort path>,
  "editor.codeActionsOnSave": {
    "source.organizeImports": true
  }
}

pyproject.toml

[tool.isort]
profile = 'black'

.flake8

[flake8]
max-line-length = 88
extend-ignore = E203,W503

black

  • パスを確認
▶ poetry run which black
  • vscode
    • black pathに追加
    • formatting providerをblackに変更
  • black args
    • pyproject.tomlに設定を書いていく

flake8

  • パスを確認
▶ poetry run which flake8
  • vscode
    • flake8 pathに追加
    • lint.flake8 enabled: Trueに変更
    • Severityをお好みで変更(とりあえずWarningにしている)
  • flake8 args
    • pyproject.toml対応していないため、.flake8ファイルを作成する
    • pyproject.tomlに設定を書いていく
    • using black with other tools を参考に追加していく
    • line-length: blackのデフォルトが88文字
    • E203: :の前の空白
    • W503: 演算子が改行の後にくるようにする
# .flake8
[flake8]
max-line-length = 88
extend-ignore = E203,W503

isort

  • パスを確認
▶ poetry run which isort
  • vscode
    • sort imports pathに追加
    • コード保存時に自動実行されるように、code actions on saveを編集
# settings.json
{
  "python.sortImports.path": <isort path>,
  "editor.codeActionsOnSave": {
    "source.organizeImports": true
  }
}
  • isort config
    • pyproject.toml対応しているため、blackを使用している旨を宣言
    • isort >= 5.0.0 であれば profileを書くだけで十分 (using black with other tools)
# pyproject.toml
[tool.isort]
profile = 'black'

references

https://github.com/psf/black/blob/06ccb88bf2bd35a4dc5d591bb296b5b299d07323/docs/guides/using_black_with_other_tools.md
https://blog.imind.jp/entry/2022/03/11/003534
https://qiita.com/nanato12/items/ddf26487eb30714251c3?utm_source=Qiitaニュース&utm_campaign=523e70db17-Qiita_newsletter_526_08_03_2022&utm_medium=email&utm_term=0_e44feaa081-523e70db17-49719421#pythonの設定編