質問: python 自体はほとんどかいたことがない初心者です AWS ラムダでサポートしてる最新の 3.7 を使うために pyenv というのを使ってもともとあった python とは別の 3.7.0 をインストールしてみたのですが global も local でバージョンが 3.7.0 の状態で aws コマンドを打つと ``` > aws pyenv: aws: command not found The `aws' command exists in these Python versions: 3.5.0/envs/aws aws ``` となります 3.7.0 をインストールした直後なのでコマンドがないのはバージョン管理が動いてる証拠でわかるのですが この状態で pip install awscli して `Requirement already satisfied: awscli in $HOME/.local/lib/python3.7/site-packages (1.16.172)` にインストールは成功したみたいで .local/bin/aws を叩くと動くのですが この状態で aws コマンドをたたいてみたんですがやはり .pyenv/shims/aws という場所をみにいってしまい同じエラーが出ます コマンド自体はあるのにないというエラーが出る理由も謎なのですが この .pyenv/shims というパスは何のためのパスなのでしょうか pyenv の設定でいろんなブログで ``` export PYENV_ROOT="$HOME/.pyenv" if [ -d "${PYENV_ROOT}" ]; then export PATH="$PATH:$HOME/.pyenv/bin" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)" fi ``` こういうのを .bashrc にかけといってるんですがこれのせいで .pyenv/shims/bin というパスが最優先で追加されてみにいってしまいます これでは pyenv で切り替えても古いコマンドをみにいってしまって意味がないように思うのですが 使い方が間違っているのでしょうか .pyenv/shims/aws というのを消せば普通に動きそうな気はしますが 何か理由があって存在してるものを消すとあとあと困りそうなので 3.7 の状態でインストールされたコマンドを絶対パスなしで呼び出すにはどうすればいいんでしょうか ### 追記: .bash_history を確認しましたが python のインストールは ``` pyenv install 3.7.0 ``` で行いました いまこういう状態です ``` pyenv versions system 3.5.0 3.5.0/envs/aws * 3.7.0 (set by [カレントディレクトリ]/.python-version) anaconda3-5.2.0 aws > pyenv local 3.7.0 > pyenv global 3.7.0 > pyenv --version pyenv 1.2.7 > pip --version pip 19.1.1 from $HOME/.pyenv/versions/3.7.0/lib/python3.7/site-packages/pip (python 3.7) ``` aws とついてる 2 つは明示的にインストールした覚えがないのですが... このあたりが何かおかしいのでしょうか... OS は Mac OS 10.13.6 です
回答: `Requirement already satisfied: awscli in $HOME/.local/lib/python3.7/site-packages (1.16.172)` とあって、`$HOME/.local`にawscliがインストールされていることになっています。 これは「「pyenvでインストールされたPython3.7.0」以外のPython3.7.0」でインストールしたawscliではないでしょうか? 「「pyenvでインストールされたPython3.7.0」以外のPython3.7.0」が作成したawsコマンドなので、pyenvの管轄外になっていてshimsを経由して呼び出せなくなっているのでは。 `$HOME/.local/lib/python3.7/site-packages`を含めて`$HOME/.local/`の下をチェックして、不要になっている(=「「pyenvでインストールされたPython3.7.0」以外のPython3.7.0」が作成したであろう)ファイルを確認するのが最初でしょうか。