pip search の代替

pip search が廃止されて結構長いこと時間が経っているが、いい感じの代替が見つかったのでメモする。

pypi に pypi-search というのが登録されていたので試してみた。

2024-12-24 追記: pypi-search で検索できなくなった。

2024-9-3 追記: pipx でインストールすることにした

pypi-search インストール

// pipenv 内で実行していたので pipx に変更する
//$ pip install pypi-search
$ pipx install pypi-search
$ pipy-search mqtt
[INFO] :: Searching for package `mqqt`...
[INFO] :: Could not find package `mqqt`
[INFO] :: Searching for other packages that match that query...

Here are some packages that match `mqqt`:
=========================================================================================================================================================================================================================

Name         : dyrkdevice
Version      : 0.1.0
Release date : Oct 24, 2021
Description  : Library for implementing a dyrk device

$ $ pypi-search -help
usage: pypi-search [-h] [-d] [--version] [-o] search

Search for PyPi packages

positional arguments:
  search             Package to show information on

options:
  -h, --help         show this help message and exit
  -d, --description  Show package description
  --version          show program's version number and exit
  -o, --open         Open homepage in browser

これでいちいち pypi をブラウザで開く必要がなくなりそうで助かるなと。

Ubuntu 24.04 かそれに含まれる Python 3.12.3 は pip が venv の中でしか実行できないらしい。先日インストールできたのははからずも、venv 内で作業していたため後日 pypi-search を実行できないことに気がついた。pipx なら実行できるらしい。

python 製のコマンドツールはちょくちょくあるので pipx でインストールするようにしよう。恐らく pip –user と同じようなことをしているのだと思われる。

pypi-search のエラー 12/24 追記

今日の時点で実行するとこんなエラーが起きている

$ pypi-search  numpy
[INFO] :: Searching for package `numpy`...
Traceback (most recent call last):
  File "/home/mnishi/.local/bin/pypi-search", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "/home/mnishi/.local/share/pipx/venvs/pypi-search/lib/python3.12/site-packages/pypi_search/main.py", line 35, in main
    version_info = pypi.get_version_info()
                   ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mnishi/.local/share/pipx/venvs/pypi-search/lib/python3.12/site-packages/pypi_search/utils.py", line 41, in get_version_info
    version_no = package_name_header.text.split()[1]
                 ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'text'

ソース見てみると .local/share/pipx/venvs/pypi-search/lib/python3.12/site-packages/pypi-search の utils.py で URL を開いている。(package_name は、検索したい文字列)

ここで .text が返ってこないらしい。

        self.response: Optional[requests.Response] = requests.get(
            f'http://pypi.org/project/{self.package_name}'
        )
        try:

試しに、wget するとエラーを意味する html が返ってきてよく見ると javascript が動かないとだめってことらしい。恐らく以前からのスクレーピング対策が強化されたようだ。

それもあるのか、pypi-search の Github に行くとアーカイブになっていた。javascript 対応するのが面倒なのでもうやめることにしたのだと思う。

うーん、困った。

[参考]

【備忘録】Ubuntu 24.04 で Python3.12 の Pip を利用する #Linux – Qiita

俺流!PEP668とうまくやっていく方法 | スクエニ ITエンジニア ブログ