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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pip

pipとは、Pythonを用いて書かれているパッケージソフトのインストールや管理を行うためのパッケージマネジメントシステムです。pipを使う主なメリットは、コマンドラインインターフェースにて容易にPythonパッケージソフトをインストール可能だという点です。

Q&A

解決済

1回答

8340閲覧

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

__PORNO___

総合スコア10

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pip

pipとは、Pythonを用いて書かれているパッケージソフトのインストールや管理を行うためのパッケージマネジメントシステムです。pipを使う主なメリットは、コマンドラインインターフェースにて容易にPythonパッケージソフトをインストール可能だという点です。

0グッド

1クリップ

投稿2019/08/26 13:27

編集2019/08/30 01:24

sudoなしupgrade

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

bash

1pip install --upgrade pip

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

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

pipを入力すると、

bash

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

となります

推測

推測①

bash

1which -a pip

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

bash

1/usr/bin/pip 2~/.local/bin/pip 3/usr/sbin/pip 4~/.local/bin/pip 5~/.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ファイル内の記述が書き換わらなかったのではないかと考えています。

補足情報

bash

1ec2-user:/ $ python -V 2Python 3.6.8 3ec2-user:~/environment $ cat /proc/version 4Linux 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初心者で完全に行き詰っています。お力をお貸しいただければ幸いです。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/08/27 00:51

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

回答1

0

ベストアンサー

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

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

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

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

投稿2019/08/31 04:13

編集2019/08/31 04:18
frodo821

総合スコア322

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

__PORNO___

2019/08/31 04:53 編集

手を差し伸べていただきありがとうございます。>< どうやらpython -m pip では、pipの使用方法が表示されたので成功していると思います。 sudo python -m pip install -I pip では、 /usr/bin/python: No module named pip となったので、勝手なことをしますが--userオプションをつけてみるとインストールに成功したようです。やってしまった後に思ったのですが、管理者権限の話が正しければ、これはまずかったかなと反省してます。 pipは叩けませんでした..。 あいかわらずのTraceback、内容も同じでした。
frodo821

2019/08/31 05:06

もしかすると、はじめからユーザーモードでインストールされていたのかもしれません。 だとすると、rootでインストールされた最初からあるpipが更新されないのは納得です。 今少し調べたのですが、Linuxかつrootでインストールするには、apt-getやyumなどでインストールする必要があるようです。メインで使っているのがWindowsなので、ここの問題は気付けませんでした。 現状でもaliasを使って、`alias pip="python -m pip"`とすることで同じように使えます。
__PORNO___

2019/08/31 06:06

ありがとうございます。確かにaliasで設定すると使えるようになりました。 ただ、モヤモヤしますね。pipは使えるようになったので現状維持でも構わないです。 sudoをつけてアップグレードしていればこの問題は起こらなかったのでしょうか? sudoをつけるということはrootディレクトリにアクセスするということだと私は解釈しているのですが、もしそうであれば、pipはrootにインストールされているということですよね? pipの初期設定ディレクトリは/usr/bin/pipだそうです。 <= このディレクトリはユーザーモードですか? わからないことを上手く言語化できず、支離滅裂な文章です。ごめんなさい。
frodo821

2019/08/31 06:24 編集

sudoを付けて実行するというのは、一時的にrootユーザーとなってその権限でコマンドを実行するということです。rootディレクトリとは/のことであり、rootユーザーやroot権限とは別物です。 sudoをつけても、恐らくインストールされるディレクトリは変わりません。ひとつだけ不可解なのは、sudo python -m pip install -I pipでNo module named pipというエラーがでているにも関わらず、sudo python -m pip install -I --user pipで正常にコマンドが実行できていることです。前者でエラーが起きているならば、後者でも同じエラーが起きるはずなのです。 pipの初期インストール先は/usr/binです。ユーザー権限で実行できるファイルのうち、/usrがマウントしたあとに使えるコマンドのバイナリは基本的にすべてここに格納されるため、そうなっています。
__PORNO___

2019/08/31 08: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となっているのですが、これはなぜでしょうか?
frodo821

2019/08/31 13:30

-Iは--ignore-installedオプションの省略形です。何らかの要因で壊れたインストールになった場合などに、既存のモジュールを無視して再インストールするオプションになります。そして、aliasコマンドで設定したaliasとは、あるコマンドの別名でしかありません。なので、実行バイナリのパスを表示するwhichコマンドの結果は、python -m pipコマンドの実行バイナリ=pythonのパスを表示したのです。 余談ですが、pythonの-mオプションは名前で指定したモジュールを__main__モジュールとして実行するオプションになります。if __name__ == '__main__'の意味と関係があるのですが、pythonはトップレベルのモジュール名を必ず__main__とします。なので、トップレベルで実行された(=import文で参照されず実行された)ときのみ行いたいコードは、このif文で分岐すればいいのです。
__PORNO___

2019/09/01 05:46

-Iの意味、なるほど理解しました。 importされたときに実行されないようにif文を付けるという話を聞いたことがありましたが、そういうことだったんですね。 たくさんのことを教えていただきありがとうございました。大変勉強になりました!もし宜しければtwitterの方、followさせて頂いても構わないですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問