Clean Architecture, Clean Life

仕事・個人での技術的なことつぶやきます

Pythonの開発環境を一新した

はじめに

最近個人開発でよくPythonを使ってるのですが、仕事でも使うようになり、そろそろ開発環境を真面目に構築しようと思い、色々調べたのでご紹介しようと思います

構成

今回は以下のパッケージを使用しました

  • パッケージ管理+仮装環境
    • rye
  • Linter
    • ruff
  • 静的型チェック
    • mypy

rye

ちなみに業務の方ではryeではなく、poetry+venv(pyenv)の構成で使っています

一応公式には実験的プロジェクトでプロダクトでの利用は不向きと判断したからです

Rye は、Rust の Rustup と Cargo からインスピレーションを得て、Python に新しいタイプのパッケージング エクスペリエンスを構築する実験的な取り組みです。まだ製品化の準備ができていませんが、フィードバックや提案をいただければ幸いです。

  1. まずはryeをダウンロードします

公式サイトの通りに進めます

rye-up.com

私はWindowsを使っているので、そこに記載の通りにダウンロード→インストールして進めました

  1. プロジェクトに入って初期化する

私は既存のプロジェクトに対してpipからの移行だったので、トップディレクトに入って下記コマンドを実行しました

rye init -r requirements.txt

新規でプロジェクト作成する場合は

rye init

でよさそうです

パッケージを追加するときは

rye add パッケージ名

で追加します

Pythonのバージョンを変更する際は下記のコマンドを実行します 例はPython3.10に変更しています

rye pin 3.10

そうすると、.python-versionのファイルが書き変わってると思います

3.10.13
  1. project.scripts→tool.rye.scriptsに書き換える

正直違いがわかってないのですが、npmみたいに直接実行したいコマンドをベタ書きするなら後者に書き換える必要があるようです(init.pyじゃないとだめ??)

前者はデフォルトで「"test_project:hello"」のように少し変わった書き方をしていますが、よくわからないです(^_^;)

書き換え後は以下のような感じです

[tool.rye.scripts]
main = "python main.py"
home = "python home/home.py"
  1. パッケージインストール

下記コマンドで設定値を反映させます

rye sync

rye addでパッケージ追加した場合やPythonバージョンを書き換えた際は都度上記コマンドで反映させます

  1. 仮想環境に入る

syncすると.venvフォルダができると思います 仮想環境へ入るやり方は二つあります

  • ..venv\Scripts\activate + deactivate
  • rye shell + exit

どちらも入った後は

rye run コマンド名

で先ほど設定したコマンドを実行することが可能です 個人的には後者は仮想環境に入ってるのか入ってないのかがわからないので、従来通り前者の方がいいかもしれないですが、全社の方がコマンド打ちやすいのでなんとも言えないところですね。好みでいいと思います

ryeの感想としては、使っただけでは実験的プロジェクト感を感じなかったので、普通に使いたい気持ちです npmに慣れている私としては非常に使い勝手が良かったです

mypy&ruff

  1. パッケージ追加

下記コマンドを実行するだけです

rye add --dev mypy ruff

syncも忘れずに

  1. VSCodeの設定ファイル更新

こちらも設定します

.vscode/extentions.json

{
    "recommendations": [
        "charliermarsh.ruff",
        "ms-python.mypy-type-checker"
    ]
}

.vscode/settings.json

{
    "python.defaultInterpreterPath": "${workspaceFolder}/.venv/Scripts/",
    "[python]": {
        "editor.formatOnSave": true,
        "editor.defaultFormatter": "charliermarsh.ruff",
        "editor.codeActionsOnSave": {
            "source.fixAll": "explicit",
            "source.organizeImports": "explicit"
        }
  }
}
  1. pyproject.toml追記

それぞれの設定値やルールを指定します 内容に関しては割愛するので、個人でカスタマイズしてみて下さい

[tool.mypy]
ignore_missing_imports = true

[tool.ruff]
target-version = "py310"

select = ["E", "F", "W", "I", "B"]
fixable = ["ALL"]

ignore = ["E402", "E501"]

補足:pre-commit

個人開発では使っていないですが、業務では以下の形でpre-commitを使っています

まずはadd

rye add --dev pre-commit

設定ファイル追加

.pre-commit-contig.yaml

repos:
  - repo: https://github.com/pre-commit/mirrors-mypy
    rev: v1.2.0
    hooks:
      - id: mypy

  - repo: https://github.com/charliermarsh/ruff-pre-commit
    rev: "v0.1.8"
    hooks:
      - id: ruff
        id: ruff-format
        args: [--fix, --exit-non-zero-on-fix]

まとめ

まだ細かい設定はあると思いますが、後は開発しながらカスタマイズしていけばいいと思います

みなさんおすすめの設定や環境があれば教えていただけると幸いです

今回も最後まで見ていただきありがとうございました