質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.20%

pipをアップグレードしてからTracebackが現れるようになった

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,630

__PORNO___

score 10

sudoなしupgrade

Cloud9にて、sudoなしでpipのアップグレードをしてしまいました。

pip install --upgrade pip


それ以降pipが機能しなくなりました。

発生している問題・エラーメッセージ

pipを入力すると、

Traceback (most recent call last):
  File "/usr/bin/pip", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 3241, in <module>
    @_call_aside
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 3225, in _call_aside
    f(*args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 3254, in _initialize_master_working_set
    working_set = WorkingSet._build_master()
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 583, in _build_master
    ws.require(__requires__)
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 900, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 786, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'pip==7.1.0' distribution was not found and is required by the application


となります

推測

推測①

which -a pip


which で all オプションをつけてpipを探すと以下のディレクトリが見つかりました。

/usr/bin/pip
~/.local/bin/pip
/usr/sbin/pip
~/.local/bin/pip
~/.local/bin/pip


これが正常なのかはわかりませんが、もしかするとpipのインストールディレクトリがおかしいのかと私は考えています。

推測②
上で書いたTracebackのエラーメッセージをよく読んでみると
The 'pip==7.1.0' distribution was not found and is required by the application
と書いてありました。

このメッセージを検索してみると、stackoverflowにて、/usr/bin/pipに書かれているバージョンがインストールされているバージョンと違うと書かれていました。

Tracebackにあげられた、これらのディレクトリの書き込みには管理者権限が必要であるため、sudoを付けないupgradeでpipファイル内の記述が書き換わらなかったのではないかと考えています。

補足情報

ec2-user:/ $ python -V
Python 3.6.8
ec2-user:~/environment $ cat /proc/version
Linux version 4.14.128-87.105.amzn1.x86_64 (mockbuild@koji-pdx-corp-builder-64003) (gcc version 7.2.1 20170915 (Red Hat 7.2.1-2) (GCC)) #1 SMP Thu Jun 20 00:43:44 UTC 2019


Linux初心者で完全に行き詰っています。お力をお貸しいただければ幸いです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • dyoshikawa

    2019/08/27 09:51

    Linuxディストリビューションはなんですか?
    AmazonLinuxかUbuntuだと思いますが。
    バージョンも記載してほしいです。

    キャンセル

回答 1

checkベストアンサー

+1

恐らく、質問者の推測は正しいです。

pipを直接叩く代わりに、python -m pipを叩いてみてください。こちらで呼び出すことが可能であれば、ライブラリのインストールには成功しています。

Pythonのライブラリ(正確にはsetuptoolsというライブラリをインストールするためのライブラリ)には、scriptというコマンドラインスクリプトを生成する機能があります。おそらく、これがうまくいっていない可能性があります。

もし、前述の回避策が実行できたら、rootでpython -m pip install -I pipを実行してみてください。pipを叩けるようになっているかもしれません。詳しい環境がわからないので、確証はありませんが……。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/08/31 17:18

    >sudoを付けて実行するというのは、一時的にrootユーザーとなってその権限でコマンドを実行するということです。rootディレクトリとは/のことであり、rootユーザーやroot権限とは別物です。
    なるほど、勉強になります。

    >前者でエラーが起きているならば、後者でも同じエラーが起きるはずなのです。
    すみません、これは私の書き方が悪かったです。sudoを外して入力しました。

    まとめると
    原因:
    sudoなしでのアップグレード

    解決方法:
    python -m pip install -I --user pip を pipで呼び出せるようにaliasコマンドで設定。
    ^---このコマンドの意味は、
         -mでpipを探し出しユーザーモードでインストール Iオプションの意味はなんですか?

    alias の設定をした後にwhich pip をすると/usr/bin/pythonとなっているのですが、これはなぜでしょうか?

    キャンセル

  • 2019/08/31 22:30

    -Iは--ignore-installedオプションの省略形です。何らかの要因で壊れたインストールになった場合などに、既存のモジュールを無視して再インストールするオプションになります。そして、aliasコマンドで設定したaliasとは、あるコマンドの別名でしかありません。なので、実行バイナリのパスを表示するwhichコマンドの結果は、python -m pipコマンドの実行バイナリ=pythonのパスを表示したのです。

    余談ですが、pythonの-mオプションは名前で指定したモジュールを__main__モジュールとして実行するオプションになります。if __name__ == '__main__'の意味と関係があるのですが、pythonはトップレベルのモジュール名を必ず__main__とします。なので、トップレベルで実行された(=import文で参照されず実行された)ときのみ行いたいコードは、このif文で分岐すればいいのです。

    キャンセル

  • 2019/09/01 14:46

    -Iの意味、なるほど理解しました。

    importされたときに実行されないようにif文を付けるという話を聞いたことがありましたが、そういうことだったんですね。

    たくさんのことを教えていただきありがとうございました。大変勉強になりました!もし宜しければtwitterの方、followさせて頂いても構わないですか?

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.20%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る