pip installのバージョン指定が"zsh ~ not found"となる場合の回避策
はじめに
pip installをmacOS環境のzshにてバージョン指定で実行した際にエラーが出てしまったので、原因を調査してみました。
もし同じようなことにお悩みの方がいて解決の糸口になれば幸いです
pip install時に有効なパッケージのバージョンを調べる方法
久々にpythonをさわったので、まずは予備知識から。
意外と知らないバージョン検索方法です。
# pip install [package name]== の形式で実行するとERRORとなるがバージョン一覧を出力してくれる
$ pip install selenium==
Collecting selenium==
ERROR: Could not find a version that satisfies the requirement selenium== (from versions: 0.9.2, 1.0.1, 1.0.3, 2.0.dev0, 2.0.dev1, 2.0.dev2, 2.0.dev3, 2.0.dev4, 2.0.dev5, 2.0.dev6, 2.0.dev9138, 2.0.dev9212, 2.0.dev9231, 2.0.dev9284, 2.0.dev9306, 2.0.dev9307, 2.0.dev9310, 2.0.dev9338, 2.0.dev9340, 2.0.dev9341, 2.0.dev9429, 2.0a5, 2.0b2, 2.0b3.dev0, 2.0b3, 2.0b4.dev0, 2.0rc1, 2.0rc2, 2.0rc3, 2.0.0, 2.0.1, 2.1.0, 2.2.0, 2.3.0, 2.4.0, 2.5.0, 2.6.0, 2.7.0, 2.8.0, 2.8.1, 2.9.0, 2.10.0, 2.11.0, 2.11.1, 2.12.0, 2.12.1, 2.13.0, 2.13.1, 2.14.0, 2.15.0, 2.16.0, 2.17.0, 2.18.0, 2.18.1, 2.19.0, 2.19.1, 2.20.0, 2.21.0, 2.21.1, 2.21.2, 2.21.3, 2.22.0, 2.22.1, 2.23.0, 2.24.0, 2.25.0, 2.26.0, 2.27.0, 2.28.0, 2.29.0, 2.30.0, 2.31.0, 2.32.0, 2.33.0, 2.34.0, 2.35.0, 2.36.0, 2.37.0, 2.37.1, 2.37.2, 2.38.0, 2.38.1, 2.38.2, 2.38.3, 2.38.4, 2.39.0, 2.40.0, 2.41.0, 2.42.0, 2.42.1, 2.43.0, 2.44.0, 2.45.0, 2.46.0, 2.46.1, 2.47.0, 2.47.1, 2.47.2, 2.47.3, 2.48.0, 2.49.0, 2.49.1, 2.49.2, 2.50.0, 2.50.1, 2.51.0, 2.51.1, 2.52.0, 2.53.0, 2.53.1, 2.53.2, 2.53.3, 2.53.4, 2.53.5, 2.53.6, 3.0.0b1, 3.0.0b2, 3.0.0b3, 3.0.0, 3.0.1, 3.0.2, 3.3.0, 3.3.1, 3.3.2, 3.3.3, 3.4.0, 3.4.1, 3.4.2, 3.4.3, 3.5.0, 3.6.0, 3.7.0, 3.8.0, 3.8.1, 3.9.0, 3.10.0, 3.11.0, 3.12.0, 3.13.0, 3.14.0, 3.14.1, 3.141.0, 4.0.0a1)
ERROR: No matching distribution found for selenium==
他のやり方としては、PyPIを参考にGUIで検索するのもよいでしょう。
1個前のバージョンをインストールしてみよう!
PyPIにもバージョン指定のインストール方法が記されているのでコピペして実行してみます。
https://pypi.org/project/selenium/3.14.1/
どれどれ。。。
$ pip install selenium==3.14.1
zsh: 3.14.1 not found
なぜかzshさんが出てきた?
ちなみに当方の環境は、Macのzshを使っていました。
こんなのを試してみる
いきなりzshが出てきてびっくりしたので、echoでも試してみました。
$ echo a==1
zsh: 1 not found
でました、zshさん。なるほど、pipは関係なさそうです。
原因
詳しく調査していくと、zsh環境下で hoge==fuga
のような形式で記述をすると予約語 (expansion)とぶつかってしまうということでした。
ちなみに、 hoge==fuga
は下記のaliasとして機能してしまうようでした(驚き
# fugaなんてないからnot found
$ echo hoge=$(which fuga)
hoge=fuga not found
参考: ZSH Gem #11: Path and filename expansion
さらに、 =hoge
の形だと、hogeというコマンドの絶対パスのaliasになるそうです(これも知らなかった!&何かに使えそう!
# echoの絶対パスをechoする
$ echo =echo
/bin/echo
hoge==
の形式では、特にexpansionとぶつかることがないようなので、バージョン検索だけは動いたというわけです。
# この形はexpansionには存在しないため、普通にhoge==が出力される
$ echo hoge==
hoge==
解決方法
ここまでお読みいただいた方はうすうす感づいているかも知れませんが、==
みたいな記述が必要な時は""
(ダブルクオーテーション)や''
(シングルクオーテーション)で囲ってやりましょう。
# zsh環境下で=や==を含む場合は''で囲いましょう
$ pip install 'selenium==3.14.1'
Collecting selenium==3.14.1
Downloading https://files.pythonhosted.org/packages/b0/c9/52390baa8d6b65c3e3b89f522c3a0fcf58f2b4faf37893ef9d97cddde699/selenium-3.14.1-py2.py3-none-any.whl (902kB)
|████████████████████████████████| 911kB 2.3MB/s
Requirement already satisfied: urllib3 in ./venv/lib/python3.7/site-packages (from selenium==3.14.1) (1.25.3)
Installing collected packages: selenium
Found existing installation: selenium 3.141.0
Uninstalling selenium-3.141.0:
Successfully uninstalled selenium-3.141.0
Successfully installed selenium-3.14.1
これで、実現したかったことができました
(原因が気になってしまい、いろいろ調べてしまったらなかなか面白かったので記事にしましたw
案外ハマりそうだけどあまり記事がなかったので、お困りの方の助けになれば幸いです)
Author And Source
この問題について(pip installのバージョン指定が"zsh ~ not found"となる場合の回避策), 我々は、より多くの情報をここで見つけました https://qiita.com/ruwatana/items/fcb2a31bd3a1f252a033著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .