🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

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

yum

yumコマンドは、UNIX系OSのRPMパッケージのインストールなどを行うためのプログラムのことです。

Python

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

pip

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

Q&A

解決済

1回答

7915閲覧

pipのシンボリック変更について

pokemonta

総合スコア170

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

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

yum

yumコマンドは、UNIX系OSのRPMパッケージのインストールなどを行うためのプログラムのことです。

Python

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

pip

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

0グッド

0クリップ

投稿2019/11/20 09:07

編集2019/11/21 01:08

pipの参照先のpythonを変更したいです。

現状は、以下の通りです。2系の古いpythonを参照しています
これをPython 3.7.2に変更したいです。
[ec2-user]$ pip -V
pip 19.3.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)

inputは以下の通りです。sudo版とバージョンが違ったので
シンボリックで同じバージョンになるようにしました。

[ec2-user]$ python --version
Python 3.7.2
[ec2-user]$ sudo python --version
Python 3.7.2

[ec2-user]$ which python
~/.pyenv/shims/python
[ec2-user]$ sudo which python
/bin/python

[ec2-user]$ ls -l ~/.pyenv/shims/python
-rwxrwxr-x 1 ec2-user ec2-user 408 Sep 21 14:12 /home/ec2-user/.pyenv/shims/python

[ec2-user]$ ls -l /bin/python
lrwxrwxrwx 1 root root 34 Nov 20 07:59 /bin/python -> /home/ec2-user/.pyenv/shims/python

追加調査の結果
[ec2-user@]$ pip show pip
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Name: pip
Version: 19.3.1
Summary: The PyPA recommended tool for installing Python packages.
Home-page: https://pip.pypa.io/
Author: The pip developers
Author-email: pypa-dev@groups.google.com
License: MIT
Location: /usr/lib/python2.7/site-packages
Requires:
Required-by:

Locationを変えることでいけるのでしょうか?
変え方がわかりませんが

さらに調査。シンボリックを同じにすることで他で不都合がでてきましたので戻しました。
[ec2-user@]$ ls -l /bin/python
lrwxrwxrwx 1 root root 7 Aug 29 22:47 /bin/python -> python2

ちなみにpip3を指定すると3.7.2になります。
この古い2.7を消せば解決すると思いますがいかがでしょうか?消し方教えて下さい

[ec2-user@]$ pip -V
pip 19.3.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)

[ec2-user@]$ pip3 -V
pip 18.1 from /home/ec2-user/.pyenv/versions/3.7.2/lib/python3.7/site-packages/pip (python 3.7)

11/21 質問に対する回答
[ec2-user ~]$ which pyenv
~/.pyenv/bin/pyenv
[ec2-user ~]$ which pip
~/.pyenv/shims/pip
[ec2-user ~]$ echo $PATH
/home/ec2-user/.pyenv/shims:/home/ec2-user/.pyenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin

11/21 さらに追加
[ec2-user@ip-172-31-47-166 ~]$ pyenv versions
system

  • 3.7.2 (set by /home/ec2-user/.python-version)

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

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

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

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

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

quickquip

2019/11/20 13:16 編集

which pyenv と which pip と echo $PATH の結果はなんでしょうか
pokemonta

2019/11/21 00:39

調査結果を本文に追記しました。ここから何が見えるのでしょうか?
quickquip

2019/11/21 00:55

pipもpythonも.pyenv/shimsの中のものを見ているのに、pythonとpipが違うものを指すという謎の状況だということがわかります。(確証が得られたのは「pipもpythonも.pyenv/shimsの中のものを見ているのに」の部分)
quickquip

2019/11/21 00:59

pyenv versions の結果はどうなりますか? * マークが付くのは system ですか? 3.7.2 ですか?
pokemonta

2019/11/21 01:08

さらに追記させて頂きました
guest

回答1

0

ベストアンサー

こんな変なことになっている可能性として私が思いつく状況は

  1. ~/.pyenv/shims/pip/usr/bin/pipを指すようなリンクになっている
  2. ~/.pyenv/shims/pip の中身が /usr/bin/pipと同じになっている
  3. ~/.pyenv/versions/3.7.2/bin/pip/usr/bin/pipを指すようなリンクになっている
  4. ~/.pyenv/versions/3.7.2/bin/pip の中身が /usr/bin/pipと同じになっている

ぐらいです。

/usr/bin/pipと同じになっている」というのは1行目のshebangが #!/usr/bin/python (あるいはpython2 とか python2.7 とか)になっている、ということです。

1.か2.なら pyenv rehashで直ると思います。
3.か4.なら python -m pip install pip --force-reinstallで直ると思います。(この時のpythonはpyenv配下の3.7.2であること)


基本的に/binの下をどうこうしようと思ってはいけないです。(ディストリビューションをメンテナンスする人とか、ディストリビューションを自分で作る人でないかぎり)


追記

pyenvを使う目的は大きくは2つあると思っています。

  1. 様々なバージョンのPythonを1つの所にまとめて、ただしその中では別々に分離した形でインストールできる
  2. 様々な場所で「その中でどのPythonを使うのか」を管理できる(shimsの仕組みや、pyenv localやpyenv shell)

私は後者のpyenv localのような発想が嫌いなのでその機能は使いませんが、前者の機能とshimsの仕組みは便利で使っています。

前者の説明で「インストール」が曖昧です。ここでの「インストール」は
「ソースをテンポラルにダウンロードして、それなりのビルドオプションでビルドする」「アーカイブをテンポラルにダウンロードして展開する」ということを自動でやってくれる、そしてそのビルド先/展開先はpyenvの中のディレクトリが自動で指定される
という程度の話です。

システムのPythonとは別のPythonが欲しい時に「自分でビルドする技術がなくても、それなりのオプションでビルドされたCPythonが簡単に作れる」ぐらいに思っておけばいいかと。

投稿2019/11/21 03:59

編集2019/11/22 00:44
quickquip

総合スコア11231

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

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

pokemonta

2019/11/21 04:07

ほんまに謎ですわ。クリーンアンインストールできないですか? [ec2-user]$ ls ~/.pyenv/shims/pip /home/ec2-user/.pyenv/shims/pip [ec2-user]$ ls ~/.pyenv/shims/pip /home/ec2-user/.pyenv/shims/pip [ec2-user]$ ls ~/.pyenv/versions/3.7.2/bin/pip /home/ec2-user/.pyenv/versions/3.7.2/bin/pip [ec2-user]$ ls ~/.pyenv/versions/3.7.2/bin/pip /home/ec2-user/.pyenv/versions/3.7.2/bin/pip [ec2-user]$ sudo python --version Python 2.7.16 [ec2-user]$ python --version Python 3.7.2
quickquip

2019/11/21 05:12

↑は、1. と 3. の可能性が消えただけです。ここに謎はないです。
quickquip

2019/11/21 05:13 編集

> クリーンアンインストールできないですか? pyenvは消して使わないようにすればいいだけでしょう。アンインストールも何もないです。
pokemonta

2019/11/21 14:02

え~と。すみません。 こんな感じですかね?(https://qiita.com/yasudadesu/items/1177aa93229e7c4b7a45) 私の認識では、pyenvは環境の切り替えができるツールだと思っています。 つまりいろんなバージョンをいれることができて切り替えできる。 今回は、pyenvで3.7でpythonを入れまして、pyenv versionsでも3.7で表示されています。 つまりここは問題ないと思いまいましたがいかがでしょうか
quickquip

2019/11/22 00:29

macOSの話ですね。Homebrewがpyenvコマンドを置く場所と、pyenvがPythonを入れる場所が違うのでこんな感じになるでしょうけど、Linuxなら同じ場所にあるから消すだけですね。 > 今回は、pyenvで3.7でpythonを入れまして、pyenv versionsでも3.7で表示されています。つまりここは問題ないと思いまいましたがいかがでしょうか 「その中のpipがおかしい」が質問の本題かと思います。
pokemonta

2019/11/22 02:20 編集

[ec2-user]$ rm -rf ~/.pyenv [ec2-user]$ python --version Python 2.7.16 [ec2-user]$ sudo python --version Python 2.7.16 こんな感じになりました
pokemonta

2019/11/22 02:33 編集

[ec2-user]$ pip -V -bash: pip: command not found [ec2-user]$ pyenv versions -bash: /home/ec2-user/.pyenv/bin/pyenv: No such file or directory
quickquip

2019/11/22 02:37

それでpyenvを入れ直せばいいんじゃないでしょうか。 pyenvを消したいなら bashrcかzshrcかどこかに eval "$(pyenv init -)" が残っているのを削除してシェルの再起動すればいいかと。
quickquip

2019/11/22 02:38

というか/binになにかやっちゃったんだったら(そしてその履歴や意味が把握できないんだったら)OSごと入れ直してもいいのでは。
quickquip

2019/11/22 02:39 編集

というか「その中のpipがおかしい」が質問の本題かと思いますが、そのことを無視して「入れ直せばいい」という解決を選んだのだったらこの質問は終了では?
pokemonta

2019/11/22 04:06

pyenvを上記方法で消して、pyenvを使わない方法でpython3,7をインストールせよと理解しました。
quickquip

2019/11/22 04:20 編集

そうではなくて、pyenvの中身を消しちゃったのだったら ・質問の状況をもう再現できない ・私の回答をもう試せない ですよね。ということです。 クリーンアンインストールできないですか? という時点で私の回答は無視されてるわけなのです。
quickquip

2019/11/22 04:37 編集

> シンボリックで同じバージョンになるようにしました。 あたりのせいでpyenvをおかしくなったのだとして、質問時点の状況としてどういう可能性がありえるか、というのが回答です。 pyenvは変なことをしなければそんな変なことにはならないツールですよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問