26 ポイント 投稿者 geniuskey 2024-07-14 | 5件のコメント | WhatsAppで共有

Modern Good Practices for Python Development

Stuart EllisによるPythonの現代的ベストプラクティスでは、Python開発時に考慮すべき重要な事項が扱われています。主な内容は次のとおりです:

Pythonを使う

  • OSに組み込まれているPythonの使用を避ける: OSに組み込まれたPythonは古いバージョンである可能性があります。
  • 複数バージョンをサポートするツールでPythonをインストール: pyenvmise のようなツールを使用。
  • 最新版の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.

アプリケーション設計

  • print() の代わりに logging を使う。
  • 設定には TOML 形式を使う: PEP 680.
  • 非同期 I/O は必要な場合にのみ使う。

ライブラリ

  • argparse でコマンドライン入力を処理。
  • pathlib でファイルおよびディレクトリパスを処理。
  • os.listdir() の代わりに高速で効率的な os.scandir() を使う: PEP 471.
  • 外部コマンドの実行時には subprocess を使う: PEP 324.
  • Webクライアントとして requests の代わりに httpx を使う。

プロジェクトのベストプラクティス

詳しくは 全文 を参照してください。
.
.

Hacker NewsのPython Modern Practices議論まとめ

Python Modern Practicesに関するHacker Newsでの議論では、さまざまなツールや方法論に対するユーザーの意見が共有されました:

  1. UVの利用を推奨: UVは高速で使いやすく、問題が発生した際のサポートも良い。 by screye
  2. Ryeへの言及: RyeはPythonインタープリタのピン留めとダウンロードをサポートしており、uvとの統合も予定されている。 by rat87
  3. 現在のツールのシンプルさを強調: Mamba環境と基本のpipで問題はなく、ツールを変える必要性を感じない。 by helsinki
  4. 基本ツールを好む: pip、venv、virtualenvwrapperを使えば大半の問題を解決できる。 by throwadobe
  5. Pipenvの利用を擁護: Pipenvは完全なソリューションとして使ってきたが、なぜもっと広く使われていないのかわからない。 by routerl
  6. Poetryの問題点: PoetryはGitコミットのバージョン識別子を追加できないなどの問題があり、失望した。 by alisonatwork
  7. CondaとMamba: Condaは依存関係管理がはるかに強力で、Mambaはより高速だ。 by wanderingmind
  8. Packagingの問題: Pythonのパッケージング問題は社会的要因による部分が大きく、今後も常に問題であり続けるだろう。 by jampekka
  9. Pyenvの代替提案: MiseはPyenvより高速で、Nodeプロジェクトもサポートする。 by odie5533
  10. Pydanticモデルとデータクラス: Pydanticモデルは検証機能が強力だが遅く、データクラスは軽量で効率的だ。 by martinky24

詳しくは Hacker Newsの議論 を参照してください.

5件のコメント

 
kaydash 2024-07-15

ライブラリの軽量化に関する内容はありませんね。
miniconda3 の仮想 env を使い、未使用の lib を削除してポータブルに配布するほうが、yarn のような分散処理システムではより良い性能を確保できました。

 
savvykang 2024-07-15

なぜ pip-tools や uv を使うべきなのでしょうか? それがモダンだとか良いという主張には、まったく根拠が見当たりません。

 
savvykang 2024-07-15

pip の依存関係指定子(dependency specifier)にハッシュを含めるべき理由として、現在の pip の挙動ではビルドバージョンを明示できない問題があるようですね。こうした文脈なしに指針だけを列挙するガイドは、あまり説得力がないように見えます。

 
jwseo 2024-07-16

主に何を使っていますか??

 
savvykang 2024-07-16

これまでは pip freeze だけで作業していましたが、Windows/Linux をサポートするライブラリだけを選んで使っており、パッチバージョンの変更で発生した問題もまだありませんでした。それでも、問題は理解できたので必要性は分かっています。ただ、pip-toolsuv がもう少し成熟したら使うことを検討する予定です。