2024 年 4 月にリリース予定の Claudio Jolowicz 著『Hypermodern Python Tooling』の初期バージョンを読む機会がありました。2023 年 6 月版を読み、本が見つからなかったため、レビューを書こうと思いました。この件については以前に。
この本で取り上げられているトピックは、以前はカンファレンス ビデオ、技術記事、チュートリアルでのみ提供されており、どちらがどのタイプのコンテンツに慣れているかに応じて異なります。他の情報源による私の意見では、これらの問題に何らかの注意が払われているとしても、それは非常に表面的です。通常、最終的にはPythonインタープリター自体のインストールのさまざまなバリエーションになります。
2023 年 6 月の時点で、早期アクセス本には 7 つのセクションがあります。
最初のセクションでは、 Python のバージョン管理のリリース サイクルについて説明します。 Windows、 Linux 、macOS などのさまざまなオペレーティング システムでのさまざまなインストール方法、CPython ベースだけでなく、PyPy、IronPython、Jython、Pyston などの Python インタープリターの多くのバージョンをインストールするための pyenv の使用方法について説明します。 Unix システム用の pylauncher の使用例も示します。あるいは、Anaconda を使用したインストールの例が示されています。
2 番目のセクションでは、インタープリター、エントリ ポイント スクリプト、モジュール (標準ライブラリとサードパーティ モジュールの両方を含む)、共有ライブラリ (C などの低レベル言語からコンパイルされたカスタム コードを含む) など、Python 環境がどのように構成されているかについて説明します。 Python3 で導入された組み込み venv モジュールを使用して作成できる仮想環境の使用方法と、異なるオペレーティング システムで仮想環境を有効にする際の違いについても説明します。組み込み pip とサードパーティ pipx の両方のパッケージ マネージャーが導入されています。モジュールの検索方法に関する一般的な情報が記載されています。
3 番目のセクションでは、 Python パッケージ インデックスを紹介します。単純なスクリプトの例を示し、プロジェクトの作成からテスト パッケージ インデックスと実際のパッケージ インデックスの両方へのロードまでのワークフロー全体を示します。 pyproject.toml ファイルは、アプリケーション パッケージを構築するときにメタ情報を指定するために使用されます。最新の標準に準拠したプロジェクト マネージャー ハッチ (https://hatch.pypa.io/latest/) がビルド バックエンドとして使用されます。公式 PyPI アップロード ツール: Twine がパッケージ アップロード ツールとして使用されます。パッケージ オプションとして、SDIST と ホイールがリストされています。プロジェクトの pyproject.toml ファイル内のメタ情報を含む最も重要なフィールドのリストが示されています。
4 番目のセクションでは、おそらく最もあいまいな問題、つまりプロジェクトにおける依存関係の管理の問題が提起されます。オプションは 2 つあります。1 つは可能なバリエーションと組み合わせが記載された required.txt、もう 1 つは pyproject.toml です。驚くべきことに、ここには詩に関する話はありませんが、その説明は第 5 セクションでそれほど長くはかかりません。 pip-tools ツールを使用して、いわゆる依存軌跡を生成するツールの存在について知ったのは非常に興味深いものでした。
5 番目のセクションでは、よく知られた詩について説明します。これは、依存関係の管理、パッケージの作成、パッケージ インデックスへの公開などの日常的なタスクのための自動化ツールを提供します。pyproject との違いについて説明します。 pyproject.toml の構文を理解した前の章で説明したものとの違いについて説明します。 Python エコシステムには、hatch や maturin などの詩の代替手段があります。
セクション 6 では、 Python 開発者向けのリファクタリング要素を使用したテストに関する短い kmb (ヤング ファイター コース) について説明し、unittest と pytest という 2 つのテスト フレームワークについて言及します。これらは基本的なものですが、このトピックについてより詳細に説明している他のソースも提供されています。ここで言及されていないのは鼻だけですが、実際には pytest が近年の事実上のリーダーです。依存関係制約の場合、選択は明らかです:unittest。将来のコードサポートのためのより柔軟な基盤を作成し、テストを簡素化するためのミニリファクタリングコードの例が示されています。
7 番目のセクションでは、標準のトレース モジュールとサードパーティのカバレッジ モジュールを使用したテスト カバレッジの問題について説明します。ただし、さまざまなバージョンの Python インタープリターで実行できるサードパーティ モジュールを使用し、ルール カバレッジの実行 → カバレッジの結合 → カバレッジ レポートの順に実行して、コード カバレッジに関する結合レポートを取得することをお勧めします。最終的には、プロジェクトのある時点で誰もが次のようなジレンマに直面します。「テストするには、コードをリファクタリングする必要があります。しかし、テストなしでリファクタリングするのはリスクが高すぎます。」
ここでは、おそらく、すべてがプロジェクト自体、その範囲、コード自体の品質、およびテスト自体の可用性によって決まります。現実的な方法をとる必要があり、常に基準を 100% 達成する必要はなく、必要ない場合も多いようです。おそらく、これを読んでいる時点では、Nox ツールを使用してストーリー全体を自動化する章はまだ準備ができていません。
まとめの前に、pipxをインストールして使ってみます。
公式ウェブサイトでは、ツールの開発者はこのツールを次のように位置づけています。
「概要:pipxとは何ですか?」
pipx は、Python で書かれたエンドユーザー アプリケーションのインストールと実行を支援するツールです。これは、macOS の brew、JavaScript の npx、Linux の apt にほぼ似ています。
pipと密接に関係しています。実際には pip を使用していますが、コマンド ラインからアプリケーションとして直接実行できる Python パッケージのインストールと管理に重点を置いています。」
パッケージにCLIインターフェイスも付属している場合は、プレインストールせずに 1 つのコマンドで目的のパッケージを直接実行できるため、素晴らしいニュースです。 NodeJS の世界から npx ツールへようこそ ;)
pipx をローカルにインストールした後、5 つの小さなプロジェクトを実行して、それがどれほど速くて簡単であるかを確認してみましょう。
コンソールで、次のコマンドを実行します。 $ pipx run google-speech -l en -o hello_world.mp3 "Hello, world!"
この場合、コマンドを実行したディレクトリに hello_world.mp3 ファイルが作成され、メディアプレーヤーで聞くことができます。
コンソールで次のコマンドを実行します: $ pipx run chksum-cli ./hello_world.mp3 b754e299a96327caaddd44b453f66ed9439c5d64d0d6e55c7e32471115757e5e sha256
ファイルのチェックサムが一致するかどうかの結果が表示されます。
コンソールで次のコマンドを実行します: $ pipx run httpy-cli mail.ru
ヘッダーとリクエストボディを含むHTTPレスポンスが出力されます。
コンソールで次のコマンドを実行します: $ pipx run timy-cli -с
アナログ時計が表示され、CTRL + C キーの組み合わせを使用して停止できます。
コンソールで次のコマンドを実行します: $ pipx run cli-chess
ゲームの種類を選択するメニューが開始されます。
追加のオプションを表示するには、上記のコマンドに --help キーを追加します。
全体的には読みやすいですが、ところどころ少しわかりにくいところがあります。おそらく、重要な例がいくつか欠けているかもしれません。この本では、Wikipedia からランダムな記事を取得するサンプル スクリプトについて説明しています。
気に入った点:
個人的には、pipx ツール (Node.js の世界における npx に類似) を発見しました。これは、何かをすぐに理解して確認する必要がある場合に非常に便利です。実行する cli インターフェースがあるプロジェクトに特に適しています。
ハッチ (https://hatch.pypa.io/latest/) や maturin (https://www. maturin.rs/);
Python インタープリターのさまざまなバージョンにバックポートを使用する例。たとえば、Python3.8 の importlib.metadata とは対照的に、importlib_metadata は Python3.7 のバックポートとして使用されます。本のサンプルコード:
try:
from importlib.metadata import metadata
except ImportError:
from importlib_metadata import metadata
この本に欠けていると思うこと:
Chocolatey (https://chocolatey.org/) など、パッケージ マネージャーを使用して Windows ファミリのオペレーティング システムに Python をインストールするオプションについては説明されていません。
Unix ディストリビューションのソースから Python をビルドする方法については説明しません。
Dockerコンテナ内でPythonを実行する方法はありません。現在、アルパインをベースにした最もシンプルなビルドから始めて、多くのビルドがあります。
プロジェクトを Windows で実行可能 .exe ファイルを実行する方法とは考えられていません (私の実践でもそのようなケースがありました。はい、それが非常にニッチなタスクであることには同意しますが、それでも)。
代替プロジェクト配布の例はありません。たとえば、setuptools と dh-virtualenv を使用して *.deb パッケージ形式で Debian のような配布用の標準パッケージ マネージャー apt を使用するなどです。
pylint、flake8、isort、black、mypy、pyright などのリンターについて説明する章はありません。
しかし、これは私の主観的な意見ですので、異論があるかもしれません。
この本はまだ最終版 (2024 年 4 月にリリース予定) ではありませんが、Python に興味がある人にはお勧めできます。
著者: Daniil Nikitin、Usetech シニア ソフトウェア開発者