My-MC
@My-MC

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

pip installで正規表現を使ってインストールでextraパッケージをインストールしたい

Q&A

Closed

解決したいこと

GitHub ActionsでCIでビルドしたものをダウンロードし、そこからlintやformatのアクション類を動かそうとしています。
そこで実行するコマンドの検証のために、現在ローカルでコマンドを実行しているのですが、以下のように正規表現を使ったインストールの場合extraパッケージをインストールすることができませんでした。
解決方法を教えて下さい。

環境

OS: Ubuntu 20.04.5 LTS
Python: 3.8.10
pip: 22.3.1

実行コマンド

pip install wheels/*linux*[dev]

発生している問題・エラー

ERROR: Invalid requirement: 'wheels/*linux*[dev]'
Hint: It looks like a path. File 'wheels/*linux*[dev]' does not exist.

自分で試したこと

extraパッケージをオプションから指定できるか調べましたが、見つかりませんでした。
ほかにもスペースを開けて入力などもしましたが、そちらもエラーが出ました。
僕的には[dev]までファイル名だと認識しているのかなと思っています。

0

1Answer

Bash は wheels/*linux*[dev] をファイル名の並びに展開しようとしますが、一致するファイル名(wheels/ 以下にあり linux を含み [dev] で終わる)がなければ展開せずに元の文字列を残します。よって pip install 'wheels/*linux*[dev]' を実行したのと同じことになります。 pip は * を特別扱いしないので、この名前のファイルを読み込もうとして失敗します。

解決するには wheels/*linux* をまずファイル名展開して配列変数に入れ、それを配列展開してください。 "${files[@]}[dev]" と書けばすべてのファイル名の後ろに [dev] がついた形に展開されます。

files=(wheels/*linux*)
pip install "${files[@]}[dev]"
1Like

Comments

  1. @My-MC

    Questioner

    手元で試した結果無事展開されインストールができました。
    丁寧なご回答、解説ありがとうございます。

Your answer might help someone💌