事象 : Python3なのにpipがPython2になっている
- 環境 : Cloud9(EC2 instance / Amazon Linux 2)
はじめてのCloud9を作った!ら、Pythonとpipのバージョンが違う。
Python3を指定しているのになぁぜぇ
AWS Cloud9にてpython3を使用して開発する際の注意事項 - Qiitaを参考に確認してみた。
$ python -V
Python 3.7.9
$ pip -V
pip 9.0.3 from /usr/lib/python2.7/site-packages (python 2.7)
$ sudo python -V
Python 2.7.18
$ sudo pip -V
pip 9.0.3 from /usr/lib/python2.7/site-packages (python 2.7)
$ which python
alias python='python3'
/usr/bin/python3
$ sudo which python
/bin/python
$ which pip
/usr/bin/pip
$ sudo which pip
/bin/pip
原因 : バージョンの確認方法が間違っているから
$ python -m pip ...
対応 : 正しい方法でバージョンを確認する
$ python -m pip -V
pip 9.0.3 from /usr/lib/python3.7/site-packages (python 3.7)
# ついでにアップデート
$ python -m pip install --upgrade --user pip
Collecting pip
Downloading https://files.pythonhosted.org/packages/ab/11/2dc62c5263d9eb322f2f028f7b56cd9d096bb8988fcf82d65fa2e4057afe/pip-20.3.1-py2.py3-none-any.whl (1.5MB)
100% |████████████████████████████████| 1.5MB 682kB/s
Installing collected packages: pip
Successfully installed pip-20.3.1
$ python -m pip -V
pip 20.3.1 from /home/ec2-user/.local/lib/python3.7/site-packages/pip (python 3.7)
# ちなみにpip3を使うと注意されます。
$ pip3 -V
WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.
Please see https://github.com/pypa/pip/issues/5599 for advice on fixing the underlying issue.
To avoid this problem you can invoke Python with '-m pip' instead of running pip directly.
pip 20.3.1 from /home/ec2-user/.local/lib/python3.7/site-packages/pip (python 3.7)
間違った原因 : 古いバージョンのpipをみているから
ユーザのPythonがaliasでpython3を参照しているので、pipも種類がほかにあるのでは?と思ってみてみたらあった。
$ ls -la /usr/bin/ | grep pip
-rwxr-xr-x 1 root root 2291 Jul 31 2018 lesspipe.sh
-rwxr-xr-x 1 root root 206 Jan 28 2020 pip
-rwxr-xr-x 1 root root 206 Jan 28 2020 pip2
lrwxrwxrwx 1 root root 9 Nov 6 19:57 pip-2 -> ./pip-2.7
lrwxrwxrwx 1 root root 8 Nov 6 19:57 pip-2.7 -> ./pip2.7
-rwxr-xr-x 1 root root 206 Jan 28 2020 pip2.7
-rwxr-xr-x 1 root root 206 Jan 28 2020 pip3
lrwxrwxrwx 1 root root 9 Nov 6 19:57 pip-3 -> ./pip-3.7
lrwxrwxrwx 1 root root 8 Nov 6 19:57 pip-3.7 -> ./pip3.7
-rwxr-xr-x 1 root root 206 Jan 28 2020 pip3.7
対応 : Cloud9を「Amazon Linux」で作り直す
「Amazon Linux 2」を「Amazon Linux」にした・・・対応にならない対応・・・
# ユーザーのバージョン
$ python -V
Python 3.6.12
$ pip -V
pip 9.0.3 from /usr/lib/python3.6/dist-packages (python 3.6)
# rootのバージョン
$ sudo python -V
Python 3.6.12
$ sudo pip -V
pip 9.0.3 from /usr/lib/python3.6/dist-packages (python 3.6)
# alternativesも登録されている
$ sudo update-alternatives --config python
There are 2 programs which provide 'python'.
Selection Command
-----------------------------------------------
* 1 /usr/bin/python2.7
+ 2 /usr/bin/python3.6
Enter to keep the current selection[+], or type selection number: 2
うまくいかない対応 : alternativesにpipを登録してpipの新しいバージョンを指定する
参考 : 複数のPython バージョンをupdate-alternativesで管理する (Ubuntu) - Qiita
この方法・・・うまくいったと思ったら・・・後でYumが壊れて対応したので・・・この方法もダメということで。
# もともと/usr/bin/pipがあるので、
$ sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3.7 1
failed to link /usr/bin/pip -> /etc/alternatives/pip: /usr/bin/pip exists and it is not a symlink
# /usr/bin/pipをリネームして、
$ sudo mv /usr/bin/pip /usr/bin/pip-old
$ ls -la /usr/bin/ | grep pip
-rwxr-xr-x 1 root root 2291 Jul 31 2018 lesspipe.sh
-rwxr-xr-x 1 root root 206 Jan 28 2020 pip2
lrwxrwxrwx 1 root root 9 Nov 6 19:57 pip-2 -> ./pip-2.7
lrwxrwxrwx 1 root root 8 Nov 6 19:57 pip-2.7 -> ./pip2.7
-rwxr-xr-x 1 root root 206 Jan 28 2020 pip2.7
-rwxr-xr-x 1 root root 206 Jan 28 2020 pip3
lrwxrwxrwx 1 root root 9 Nov 6 19:57 pip-3 -> ./pip-3.7
lrwxrwxrwx 1 root root 8 Nov 6 19:57 pip-3.7 -> ./pip3.7
-rwxr-xr-x 1 root root 206 Jan 28 2020 pip3.7
-rwxr-xr-x 1 root root 206 Jan 28 2020 pip-old
# alternativesにpipの新しいバージョンを指定して登録する
$ sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3.7 1
# Python3のpipになった!
$ python -m pip -V
pip 20.3 from /home/ec2-user/.local/lib/python3.7/site-packages/pip (python 3.7)
知らなかったのですがpip10以降はpip
は非推奨でpython -m pip
と書いて使うそうです。
参考 : pipを直で使うのは非推奨っぽい? - Qiita
$ pip -V
WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.
Please see https://github.com/pypa/pip/issues/5599 for advice on fixing the underlying issue.
To avoid this problem you can invoke Python with '-m pip' instead of running pip directly.
pip 20.3 from /home/ec2-user/.local/lib/python3.7/site-packages/pip (python 3.7)
うまくいかない対応 : aliasで新しいバージョンのpipを設定する
.bashrcにaliasを設定して新しいバージョンのpipを使おうと思った、
ら、その後pip install --upgrade --user pip
しておかしなことになってしまった。
# aliasを設定して
$ vi ~/.bashrc
$ cat ~/.bashrc | grep pip
alias pip=pip3
# 反映して
$ source ~/.bashrc
# 新しいバージョンを使うことにする
$ pip -V
pip 9.0.3 from /usr/lib/python3.7/site-packages (python 3.7)
# 古いからアップデートしよーーっと
$ pip install --upgrade --user pip
# pip3もpip3.7も消失してわけわからん状態になり・・・Cloud9を作り直した
$ ls -la /usr/bin/ | grep pip
-rwxr-xr-x 1 root root 2291 Jul 31 2018 lesspipe.sh
-rwxr-xr-x 1 root root 206 Jan 28 2020 pip
-rwxr-xr-x 1 root root 206 Jan 28 2020 pip2
lrwxrwxrwx 1 root root 9 Nov 6 19:57 pip-2 -> ./pip-2.7
lrwxrwxrwx 1 root root 8 Nov 6 19:57 pip-2.7 -> ./pip2.7
-rwxr-xr-x 1 root root 206 Jan 28 2020 pip2.7
lrwxrwxrwx 1 root root 9 Nov 6 19:57 pip-3 -> ./pip-3.7
lrwxrwxrwx 1 root root 8 Nov 6 19:57 pip-3.7 -> ./pip3.7
うまくいかない対応 : Pythonのバージョンを3に設定する
参考 : Cloud9 Python3でpipも3にする | ヤマムギ
# えーーー何も表示されない!
$ sudo update-alternatives --config python
$
# alternativesにPythonないし!
$ sudo alternatives --list
libnssckbi.so.x86_64 auto /usr/lib64/pkcs11/p11-kit-trust.so
mta auto /usr/sbin/sendmail.postfix
cifs-idmap-plugin auto /usr/lib64/cifs-utils/cifs_idmap_sss.so
ld auto /usr/bin/ld.bfd
iptables auto /usr/sbin/iptables-legacy
java auto /usr/lib/jvm/java-11-amazon-corretto.x86_64/bin/java
javac auto /usr/lib/jvm/java-11-amazon-corretto.x86_64/bin/javac
go auto /usr/lib/golang/bin/go
# じゃ、登録してみよう!
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3
$ sudo alternatives --list | grep python
python auto /usr/bin/python3
# おぉ表示された!そしてPython3が選択されている
$ sudo update-alternatives --config python
There is 1 program that provides 'python'.
Selection Command
-----------------------------------------------
*+ 1 /usr/bin/python3
Enter to keep the current selection[+], or type selection number: 1
# 何も変わらない・・・
$ python -V
Python 3.7.9
$ pip -V
pip 9.0.3 from /usr/lib/python2.7/site-packages (python 2.7)
うまくいかない対応 : Python3のpipでpipをアップグレードする
終わって思う・・・これでなんでpipがPython3のになると思ったのか・・・困ると何でもやってしまう。
参考 : python -m pip install --upgrade pip でアップグレードできない時|Naoki|note
# ユーザなのに--userをつけないと怒られる
$ python -m pip install --upgrade pip
Collecting pip
Downloading https://files.pythonhosted.org/packages/55/73/bce122d1ed0217b3c1a3439ab16dfa94bbeabd0d31755fcf907493abf39b/pip-20.3-py2.py3-none-any.whl (1.5MB)
100% |████████████████████████████████| 1.5MB 828kB/s
Installing collected packages: pip
Found existing installation: pip 9.0.3
Uninstalling pip-9.0.3:
Exception:
Traceback (most recent call last):
File "/usr/lib64/python3.7/shutil.py", line 566, in move
os.rename(src, real_dst)
PermissionError: [Errno 13] Permission denied: '/usr/bin/pip' -> '/tmp/pip-t_dmgr1g-uninstall/usr/bin/pip'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.7/site-packages/pip/basecommand.py", line 215, in main
status = self.run(options, args)
File "/usr/lib/python3.7/site-packages/pip/commands/install.py", line 365, in run
strip_file_prefix=options.strip_file_prefix,
File "/usr/lib/python3.7/site-packages/pip/req/req_set.py", line 778, in install
requirement.uninstall(auto_confirm=True)
File "/usr/lib/python3.7/site-packages/pip/req/req_install.py", line 754, in uninstall
paths_to_remove.remove(auto_confirm)
File "/usr/lib/python3.7/site-packages/pip/req/req_uninstall.py", line 115, in remove
renames(path, new_path)
File "/usr/lib/python3.7/site-packages/pip/utils/__init__.py", line 267, in renames
shutil.move(old, new)
File "/usr/lib64/python3.7/shutil.py", line 581, in move
os.unlink(src)
PermissionError: [Errno 13] Permission denied: '/usr/bin/pip'
# --userをつけてアップグレードする
$ python -m pip install --upgrade --user pip
Collecting pip
Using cached https://files.pythonhosted.org/packages/55/73/bce122d1ed0217b3c1a3439ab16dfa94bbeabd0d31755fcf907493abf39b/pip-20.3-py2.py3-none-any.whl
Installing collected packages: pip
Successfully installed pip-20.3
# 当然変わらない・・・
$ pip -V
pip 9.0.3 from /usr/lib/python2.7/site-packages (python 2.7)