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エンジニア ブログ