at backyard

Color my life with the chaos of trouble.

pip install bs4、じゃなくて、pip install beautifulsoup4

久しぶりに Beautiful Soup を使おうと思った。

Pythonのパッケージインストールでいつも困るのは、インストールする際に打つパッケージ名が、自分の記憶になる内容と異なることがある点だ。

例えば Beautiful Soup なら、インストール時のコマンド名は beautifulsoup , beautifulsoup4, bs4 、などがぱっと浮かんでくるがどれでインストールすればよいのかわからない点だ。

こういうときはググってinstallコマンドを探すのだが、たまたまそのときググって何気なく開いた某有名サイトで記述されているコマンドが、

pip install bs4

だった。

一応有名なサイトだし、さすがに間違っていないだろうと思ってインストールしたが、bs4==0.0.1 というインストール後のパッケージバージョンを見て、あ、これは間違ったなとおもった。

※ちなみにbs4でインストールした場合も問題なく Beautiful Soup 自体は使える。ただ普通に使えるけど、なぜ bs4 というパッケージ名でインストールできたのかというのが不安だった。

最近はPythonをはじめ、少し前にあったnpm関連のことなども含め、普通に使えていると思っているパッケージに悪意のあるコードが混ざっていることがよく注目を集めている。

forest.watch.impress.co.jp

上の内容とは異なるものの、bs4というパッケージ名とか、beautifulsoup4をインストールしたと思いこんでいる人に対して悪意あるコードを忍び込ませるには格好のチャンスだろう。

というわけで、完全にbs4もやばいパッケージでは?と思って調べてみたが、当然Beautiful Soup側もこういうことは考慮していたようだ。

pypi.org

これは実際にPyPl内の該当するパッケージの記述である。

ここのプロジェクトの説明文には、

  • Beautiful Soupの開発者が名前のスクワッティングを防ぐために管理しているダミーパッケージであること
  • PyPI の Beautiful Soup Python パッケージの正式名称は beautifulsoup4であること
  • このパッケージは、誤ってpip install bs4と入力しても、Beautiful Soupに行き着くことを保証するものである

という記述が見られる。

というわけで、やばいパッケージを入れてしまったのでは?という私の不安は杞憂に終わることになった。
(というか、インストール前にちゃんとPyPlのページで調べろよ!と反省である)

ちなみに pip search <パッケージ名> でも調べられると書こうと思ったが、いまコマンド打ってみたら、エラーになった。

ERROR: XMLRPC request failed [code: -32500]
RuntimeError: PyPI's XMLRPC API is currently disabled due to unmanageable load and will be deprecated in the near future. See https://status.python.org/ for more information

下記のページを見に行ってもall greenである。

status.python.org

まあ、いいか。

とりあえず pip install する前はちゃんとPyPlにいってインストールコマンドを確認しましょうというお話でした。
(こういうのは他の言語も同様)

ちなみにBeautiful Soup のPyPlページはこちら。

pypi.org

bs4 でも一応は問題なく Beautiful Soup は使えるようだが、正式なインストールコマンドは

pip install beautifulsoup4

となります。