Open4
『Pythonの開発環境の基本をおさえよう』LTに参加してみた🌟

『Pythonの開発環境の基本をおさえよう』LTに参加してみた🌟
- Pythonは機械学習(LLM含む)やデータ分析でデファクトスタンダードとなっているプログラミング言語です。
- そんなPythonですが、開発環境の整え方、難しくありませんか?
- pip・venv・pyenv・Pipenvなどなど、似たような名前・似たような役割のツールがたくさん登場して、最初は全然意味が分からないと思います。
- Pythonの開発環境には「仮想環境」というものも登場します。
- そもそもこの「Pythonの仮想環境」とはいったいなんなのでしょうか?
- これらの疑問を解消できるよう、この勉強会ではPythonの開発環境の基本を解説していきます。
Youtube Live にて開催 ( 今回のアーカイブも閲覧可能 )
LTのスライド
環境構築のSample

Pythonの仮想環境の仕組み
-
Pythonの仮想環境は、ただのディレクトリです。
- つまり、参照先が仮想環境ごとに変わる。
- 開発プロジェクトA と 開発プロジェクトB で比較して、考える。
- 開発プロジェクトA用のディレクトリを用意して、そこでだけパッケージをinstallする。
- 開発プロジェクトB用のディレクトリを用意して、そこでだけパッケージをinstallする。
-
VSCodeがPython仮想環境のパッケージをうまく認識しないときは、Pythonインタプリタを選び直せば解決します。

Python の開発環境の 3 つの観点とそのためのツールたち🌟
結論
- Docker 環境なら、Docker (Dev Container) と Poetry (ポエトリー) という組み合わせがおすすめ。
- Docker (Dev Container) なしで Python の開発環境を構築する場合は、Rye (ライ) が一番おすすめ。
- Pythonのバージョン管理は、pyenv ではなく asdf がおすすめ。
- asdfなら、Poetry や Pipenv のバージョンの指定にも対応している。
- venv は、activate忘れなどがあるため、他の仮想環境がおすすめ。。。
- pip でのパッケージ管理はツラい。。。
- 明示的に requirements.txt を作成しないと、何のどのバージョンをインストールすればいいのか分からなくなってしまうという問題点。。。
- pip freeze で生成した requirements.txt から、あるパッケージとその依存関係を適切に削除するのも難しいです。
- pip freeze で requirements.txt を生成する方法では、特定の環境だけで必要なパッケージ(例えば開発中だけ必要なフォーマッタやテスト用のライブラリなど)を、他の環境でも必要なパッケージと分けて一覧化するのがとても大変です。
意識すべき観点
- Pythonのバージョン指定
- 仮想環境
- パッケージ管理
Python のバージョン指定 | 仮想環境 | パッケージ管理 |
---|---|---|
pip | × | △ |
venv | × | × |
pyenv | ○ | × |
asdf | ○ | × |
Docker (Dev Container) | ○ | × |
Pipenv | × | ○ |
Poetry | × | ○ |
Rye | ○ | ○ |
○ ... この目的で使える
△ ... この目的で使えるが一部機能がある
× ... この目的で使えない

その他の開発環境の定番ツールたち(リンター・フォーマッター・静的な型チェック)
-
リンター: こう書いた方がいいよと教えてくれるツール
- Flake8, Ruff など
- Ruff の採用が最近だと多い。
-
フォーマッター: コードを自動で整形してくれるツール
- autopep8, Black, isort など。
- 最近、Ruff が フォーマットもサポートしたので、RuffでもOK
-
静的型チェック: タイプヒントをチェックするツール
- Pythonは、タイプヒントを書いても正しさを保証されません。
- Mypyでチェックしましょう。
- VSCodeの場合は、Mypy Type Checker を入れよう!
-
タスクランナー: よく使うコマンドを整理しておくツール
- Python には、デファクトスタンダードのタスクランナーがなくて、Makeがよく使われている印象です。