はじめに
最近個人開発でよくPythonを使ってるのですが、仕事でも使うようになり、そろそろ開発環境を真面目に構築しようと思い、色々調べたのでご紹介しようと思います
構成
今回は以下のパッケージを使用しました
- パッケージ管理+仮装環境
- rye
- Linter
- ruff
- 静的型チェック
- mypy
rye
ちなみに業務の方ではryeではなく、poetry+venv(pyenv)の構成で使っています
一応公式には実験的プロジェクトでプロダクトでの利用は不向きと判断したからです
Rye は、Rust の Rustup と Cargo からインスピレーションを得て、Python に新しいタイプのパッケージング エクスペリエンスを構築する実験的な取り組みです。まだ製品化の準備ができていませんが、フィードバックや提案をいただければ幸いです。
- まずはryeをダウンロードします
公式サイトの通りに進めます
私はWindowsを使っているので、そこに記載の通りにダウンロード→インストールして進めました
- プロジェクトに入って初期化する
私は既存のプロジェクトに対してpipからの移行だったので、トップディレクトに入って下記コマンドを実行しました
rye init -r requirements.txt
新規でプロジェクト作成する場合は
rye init
でよさそうです
パッケージを追加するときは
rye add パッケージ名
で追加します
Pythonのバージョンを変更する際は下記のコマンドを実行します 例はPython3.10に変更しています
rye pin 3.10
そうすると、.python-versionのファイルが書き変わってると思います
3.10.13
- project.scripts→tool.rye.scriptsに書き換える
正直違いがわかってないのですが、npmみたいに直接実行したいコマンドをベタ書きするなら後者に書き換える必要があるようです(init.pyじゃないとだめ??)
前者はデフォルトで「"test_project:hello"」のように少し変わった書き方をしていますが、よくわからないです(^_^;)
書き換え後は以下のような感じです
[tool.rye.scripts] main = "python main.py" home = "python home/home.py"
- パッケージインストール
下記コマンドで設定値を反映させます
rye sync
rye addでパッケージ追加した場合やPythonバージョンを書き換えた際は都度上記コマンドで反映させます
- 仮想環境に入る
syncすると.venvフォルダができると思います 仮想環境へ入るやり方は二つあります
- ..venv\Scripts\activate + deactivate
- rye shell + exit
どちらも入った後は
rye run コマンド名
で先ほど設定したコマンドを実行することが可能です 個人的には後者は仮想環境に入ってるのか入ってないのかがわからないので、従来通り前者の方がいいかもしれないですが、全社の方がコマンド打ちやすいのでなんとも言えないところですね。好みでいいと思います
ryeの感想としては、使っただけでは実験的プロジェクト感を感じなかったので、普通に使いたい気持ちです npmに慣れている私としては非常に使い勝手が良かったです
mypy&ruff
- パッケージ追加
下記コマンドを実行するだけです
rye add --dev mypy ruff
syncも忘れずに
- VSCodeの設定ファイル更新
こちらも設定します
{ "recommendations": [ "charliermarsh.ruff", "ms-python.mypy-type-checker" ] }
{ "python.defaultInterpreterPath": "${workspaceFolder}/.venv/Scripts/", "[python]": { "editor.formatOnSave": true, "editor.defaultFormatter": "charliermarsh.ruff", "editor.codeActionsOnSave": { "source.fixAll": "explicit", "source.organizeImports": "explicit" } } }
- 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]
まとめ
まだ細かい設定はあると思いますが、後は開発しながらカスタマイズしていけばいいと思います
みなさんおすすめの設定や環境があれば教えていただけると幸いです
今回も最後まで見ていただきありがとうございました