Stuart EllisのPythonにおける現代的ベストプラクティス
(stuartellis.name)Modern Good Practices for Python Development
Stuart EllisによるPythonの現代的ベストプラクティスでは、Python開発時に考慮すべき重要な事項が扱われています。主な内容は次のとおりです:
Pythonを使う
- OSに組み込まれているPythonの使用を避ける: OSに組み込まれたPythonは古いバージョンである可能性があります。
- 複数バージョンをサポートするツールでPythonをインストール: pyenv や mise のようなツールを使用。
- 最新版のPythonを使う: セキュリティパッチと性能向上のため、最新の安定版を使用。
- 開発者向けアプリケーションの実行に pipx を使う: pipx を通じて隔離された環境でアプリケーションを実行。
- プロジェクト用ツールを使う: PDM, Hatch, Mise, Rye を推奨。
Pythonプロジェクトを開発する
- コード整形: Ruff を使用。
- コードリンティング: Ruff を推奨。
- pytest でテスト: 関連プラグイン(pytest-randomly, pytest-cov)を使用。
- パッケージング: wheel パッケージを使い、必要に応じてコンテナイメージまたは PyInstaller を使用。
言語構文
- 型ヒントを使う: PEP 484, PEP 526.
- 文字列フォーマットに f-string を使う: PEP 498.
- タイムゾーンを認識する datetime オブジェクトを使う: PEP 615.
アプリケーション設計
ライブラリ
- argparse でコマンドライン入力を処理。
- pathlib でファイルおよびディレクトリパスを処理。
- os.listdir() の代わりに高速で効率的な os.scandir() を使う: PEP 471.
- 外部コマンドの実行時には subprocess を使う: PEP 324.
- Webクライアントとして requests の代わりに httpx を使う。
プロジェクトのベストプラクティス
pyproject.tomlファイルを使う: PEP 517, PEP 518, PEP 621, PEP 660.- src レイアウトを使う: src レイアウトとフラットレイアウトの比較.
- 開発には仮想環境を使う: venv, PDM, Hatch, Mise を推奨。
- パッケージのインストールに要件ファイルを使う: pip-tools による pip-compile または uv を使用。
詳しくは 全文 を参照してください。
.
.
Hacker NewsのPython Modern Practices議論まとめ
Python Modern Practicesに関するHacker Newsでの議論では、さまざまなツールや方法論に対するユーザーの意見が共有されました:
- UVの利用を推奨: UVは高速で使いやすく、問題が発生した際のサポートも良い。 by screye
- Ryeへの言及: RyeはPythonインタープリタのピン留めとダウンロードをサポートしており、uvとの統合も予定されている。 by rat87
- 現在のツールのシンプルさを強調: Mamba環境と基本のpipで問題はなく、ツールを変える必要性を感じない。 by helsinki
- 基本ツールを好む: pip、venv、virtualenvwrapperを使えば大半の問題を解決できる。 by throwadobe
- Pipenvの利用を擁護: Pipenvは完全なソリューションとして使ってきたが、なぜもっと広く使われていないのかわからない。 by routerl
- Poetryの問題点: PoetryはGitコミットのバージョン識別子を追加できないなどの問題があり、失望した。 by alisonatwork
- CondaとMamba: Condaは依存関係管理がはるかに強力で、Mambaはより高速だ。 by wanderingmind
- Packagingの問題: Pythonのパッケージング問題は社会的要因による部分が大きく、今後も常に問題であり続けるだろう。 by jampekka
- Pyenvの代替提案: MiseはPyenvより高速で、Nodeプロジェクトもサポートする。 by odie5533
- Pydanticモデルとデータクラス: Pydanticモデルは検証機能が強力だが遅く、データクラスは軽量で効率的だ。 by martinky24
詳しくは Hacker Newsの議論 を参照してください.
5件のコメント
ライブラリの軽量化に関する内容はありませんね。
miniconda3 の仮想 env を使い、未使用の lib を削除してポータブルに配布するほうが、yarn のような分散処理システムではより良い性能を確保できました。
なぜ pip-tools や uv を使うべきなのでしょうか? それがモダンだとか良いという主張には、まったく根拠が見当たりません。
pip の依存関係指定子(dependency specifier)にハッシュを含めるべき理由として、現在の pip の挙動ではビルドバージョンを明示できない問題があるようですね。こうした文脈なしに指針だけを列挙するガイドは、あまり説得力がないように見えます。
主に何を使っていますか??
これまでは
pip freezeだけで作業していましたが、Windows/Linux をサポートするライブラリだけを選んで使っており、パッチバージョンの変更で発生した問題もまだありませんでした。それでも、問題は理解できたので必要性は分かっています。ただ、pip-toolsやuvがもう少し成熟したら使うことを検討する予定です。