LoginSignup
2
2

More than 3 years have passed since last update.

Cloud9を作ったらPythonとpipのバージョンが違う時の対応方法

Last updated at Posted at 2020-12-02

事象 : Python3なのにpipがPython2になっている

  • 環境 : Cloud9(EC2 instance / Amazon Linux 2)

はじめてのCloud9を作った!ら、Pythonとpipのバージョンが違う。
image.png
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

原因 : バージョンの確認方法が間違っているから

Python3の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」にした・・・対応にならない対応・・・

作り直したCloud9
# ユーザーのバージョン
$ 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)
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2