poetry show は、poetry の設定ファイルの pyproject.tomlに記載された利用可能なパッケージ名を表示してくれる。

例えば、ターミナルで poetry install を行う前に、poetry showを行うと以下のような結果がでる。

poetry show result

そして、grep で上記の結果を表示させてみると

1
2
> poetry show | grep aiohttp
aiohttp                  (!) 3.8.1       Async http client/server framework (asyncio)

と パッケージ名に (!)が付与されている。

この(!)ってそもそもどんな意味なのか気になったので調べてみました。

Poetry のコードを直接読んでみると、 test_show_basic_with_not_installed_packages_non_decoratedのテストケースが今回の事例にマッチしており、わかりやすかった。 意味としては、「インストールされたパッケージに対する show コマンドを非装飾モードで結果を出力」へのテストだ。 状況としては、cachypendulumを poetry add して、 cachyのみを poetry install している。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
    poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.1.0"))
    poetry.package.add_dependency(Factory.create_dependency("pendulum", "^2.0.0"))

    cachy_010 = get_package("cachy", "0.1.0")
    cachy_010.description = "Cachy package"

    pendulum_200 = get_package("pendulum", "2.0.0")
    pendulum_200.description = "Pendulum package"

    installed.add_package(cachy_010)

その後に、poetry show を実行した際に以下のように(!)が期待される出力となっている。

1
2
cachy        0.1.0 Cachy package
pendulum (!) 2.0.0 Pendulum package

実際に(!)を付与している部分はここ。 https://github.com/python-poetry/poetry/blob/68f4da8c0af754dd9afd8c96cf97a2b80fced33e/src/poetry/console/commands/show.py#L310-L311

1
2
3
if not self.io.output.is_decorated():
	# Non installed in non decorated mode
	install_marker = " (!)"

is_decorated は、出力結果を装飾するかどうかのフラグを指しており、このフラグの可否でTrueの場合は色がついて装飾されて出力される。 is_decoratedの定義はここにあった。

自分の場合、設定が上手くいかなかったのが原因で内製パッケージを読み込んでいる部分を知らないうちに失敗して、そのパッケージが(!)がついて表示されていた。

おそらくパイプを通すことで、poetry showの装飾フラグがFalseになっていそうではある

まとめ

  • (!)は該当パッケージがインストールされていないことを示している
  • 装飾(decorated)モードが Trueなら、ターミナルでは(!)の代わりに装飾されてパッケージ名が表示される(例えば自分のターミナルなら、未インストールのパッケージ名が赤色で表示される)

蛇足)設定をミスってインストール失敗していた際に、Python の実行画面では

ModuleNotFoundError: No module named

と表示されていたので、やはりログが言っていることは正しかった…!

See Also

Support

記事をお読みくださりありがとうございます。このウェブサイトの運営を支援していただける方を募集しています。 もしよろしければ、下のボタンからサポート(投げ銭)していただけると、ブログ執筆、情報発信のモチベーションに繋がります✨