はじめに
2025/1/8 に嵌ったエラーの備忘録です
エラーの内容
.tool-versions
ファイルに aws-sam-cli 1.132.0
と書かれている状態で以下のコマンドを実行しました
mise install
すると、以下のエラーが発生しました
mise ERROR [~/some-path/.tool-versions] aws-sam-cli@1.132.0: error running list-all: exited with code 1
asdf-pyapp: [ERROR] Unable to parse versions for 'aws-sam-cli'
mise ERROR error resolving versions
mise ERROR Run with --verbose or MISE_VERBOSE=1 for more information
エラー原因
エラーメッセージに従い、 --verbose
をつけて実行してみます
mise install --verbose
実行結果
DEBUG ARGS: /opt/homebrew/bin/mise install --verbose
DEBUG EnvResults
DEBUG config: ~/some-path/.tool-versions
DEBUG $ /Users/somebody/.local/share/mise/plugins/aws-sam-cli/bin/list-all
DEBUG ToolRequest.is_installed: error running list-all: exited with code 1
asdf-pyapp: [ERROR] Unable to parse versions for 'aws-sam-cli'
DEBUG install_some_versions: aws-sam-cli@1.132.0
DEBUG $ /Users/somebody/.local/share/mise/plugins/aws-sam-cli/bin/list-all
Error:
0: error running list-all: exited with code 1
asdf-pyapp: [ERROR] Unable to parse versions for 'aws-sam-cli'
Location:
src/plugins/asdf_plugin.rs:120
Version:
2024.12.19 macos-arm64 (2024-12-23)
Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Run with RUST_BACKTRACE=full to include source snippets.
mise ERROR [~/some-path/.tool-versions] aws-sam-cli@1.132.0: error running list-all: exited with code 1
asdf-pyapp: [ERROR] Unable to parse versions for 'aws-sam-cli'
mise ERROR error resolving versions
mise ERROR Run with --verbose or MISE_VERBOSE=1 for more information
~/.local/share/mise/plugins/aws-sam-cli/bin/list-all
でエラーが起こっていることが分かります
asdf install でも同じエラーが発生します
内容を確認すると、以下のようになっています
#!/usr/bin/env bash
set -euo pipefail
current_script_path=${BASH_SOURCE[0]}
plugin_dir=$(dirname "$(dirname "$current_script_path")")
toolname=$(basename "$plugin_dir")
# shellcheck source=../lib/utils.bash
source "${plugin_dir}/lib/utils.bash"
get_package_versions "${toolname}" | sort_versions | xargs echo
../lib/utils.bash
を参照しているので、 ~/.local/share/mise/plugins/aws-sam-cli/lib/utils.bash
を確認します
すると、以下のような行が存在します
version_output_raw=$("${ASDF_PYAPP_RESOLVED_PYTHON_PATH}" -m pip install ${pip_install_args[@]+"${pip_install_args[@]}"} "${package}==" 2>&1) || true
つまり、 python -m pip install aws-sam-cli==
というコマンドが内部的に実行されていることが分かります
ではこれを実行してみましょう
python -m pip install aws-sam-cli==
実行結果
ERROR: Invalid requirement: 'aws-sam-cli==': Expected end or semicolon (after name and no valid version specifier)
aws-sam-cli==
^
これがエラーの原因です
pip を使って aws-sam-cli のバージョンを取得しようとしていますが、これがエラーになっています
実は、以前は pip install aws-sam-cli==
というコマンドでインストール可能なバージョンの一覧が取得できていました
しかし、 pip 24.1 以降ではこのコマンドが使えなくなってしまいました
Remove support for legacy versions and dependency specifiers.
Packages with non standard-compliant versions or dependency specifiers are now ignored by the resolver. Already installed packages with non standard-compliant versions or dependency specifiers must be uninstalled before upgrading them. (#12063)
pip の新しいバージョンでは以下のコマンドでインストール可能なバージョンの一覧が取得できます
pip index versions <パッケージ名>
実はエラーを出している asdf-pyapp に Pull Request も出されていますが、残念ながら放置状態です
aws-sam-cli や awscli など、 pip でインストールするタイプのツールは asdf-pyapp を使用しています
これらのツールについては同様のエラーが発生すると思われるので、以下の対処を行う必要があります(Pull Request がマージされるまでは)
対処方法
もちろん、 pip のバージョンを 23 以前に落とすという方法でも対処可能ですが、推奨はできません
別の方法で対応します
mise
まず今使っている aws-sam-cli
プラグインをアンインストールします
mise plugin remove aws-sam-cli
~/.config/mise/config.toml
に以下の行を追加します
[alias]
aws-sam-cli = "https://github.com/kenichikat/asdf-pyapp.git"
本来であれば aws-sam-cli
のプラグインには https://github.com/amrox/asdf-pyapp.git
が使用されますが、これを https://github.com/kenichikat/asdf-pyapp.git
(Pull Request を出している人のフォーク)に設定します
この状態で改めてプラグインをインストールします
mise plugin add aws-sam-cli
これでエラーが発生しなくなります
asdf
まず今使っている aws-sam-cli
プラグインをアンインストールします
asdf plugin remove aws-sam-cli
https://github.com/kenichikat/asdf-pyapp.git
(Pull Request を出している人のフォーク)を指定してプラグインを再インストールします
asdf plugin add aws-sam-cli https://github.com/kenichikat/asdf-pyapp.git
これでエラーが起こらなくなります
まとめ
pip のバージョンアップでこのような影響があるとは
とりあえずはプラグインのリポジトリー指定で回避できますが、どうにか Pull Request をマージしてもらえないものか