2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

centos7にてとあるパッケージのインストールにpython3.8以上が必要になったのですが、インストールや環境設定で気をつける部分が多かったので記録として。

version

# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
# python -V
Python 2.7.5

デフォルトではpython2.7がインストールされている
python3も標準リポジトリに存在するがyum install python3などでインストールするとpython3.6.8になる

# yum list python3
Available Packages
python3.i686                                                         3.6.8-19.el7_9                                                       updates
python3.x86_64                                                       3.6.8-19.el7_9                                                      updates

python3.8のインストール

python3.8をインストールするため、SCLをリポジトリに登録してrh-python38をインストールします
インストール後、scl enableでpython3.8の有効化を行います

# yum install -y centos-release-scl
# yum install -y rh-python38
# scl enable rh-python38 bash
# python -V
Python 3.8.13

注意点

1. Cannot find a valid baseurl for repo

centos7のサポート終了につき、yum install時に以下のようなエラーが出ることがあるかと思います

Cannot find a valid baseurl for repo: base/7/x86_64
Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64

そのため/etc/yum/repos.d/CentOS-*ファイル中のrepositoryのurlを以下のように直接かsedコマンドで編集します(参考

// before
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/

// after
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=http://vault.centos.org/centos/$releasever/os/$basearch/
# sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
# sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
# sed -i 's|# baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

2. scl enable

インストールしたpythonを有効にするためにscl enableを使うと以下のようにパスが上書きされますが、exitや再起動などで設定はリセットされるので再度更新が必要

# which python
/usr/bin/python
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# scl enable rh-python38 bash

# which python
/opt/rh/rh-python38/root/usr/bin/python
# echo $PATH
/opt/rh/rh-python38/root/usr/local/bin:/opt/rh/rh-python38/root/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

毎回更新するのが面倒なのでログイン時に反映させたい場合
/etc/profile.d配下に適当なスクリプトを用意します

/etc/profile.d/enablepython38.sh
#!/bin/bash
source scl_source enable rh-python38

これで毎回scl enableせずに済みます

3. scl enable使わずにやる場合

exportコマンドでパスを通します
こちらも同様にexitや再起動でリセットされるので注意

# python -V
Python 2.7.5
# export PATH=/opt/rh/rh-python38/root/usr/local/bin:/opt/rh/rh-python38/root/usr/bin:$PATH
# python -V
Python 3.8.13

またはlnコマンドでシンボリックリンクを作成
これはexitなどしても引き続き反映され続ける

# ln -s /opt/rh/rh-python38/root/bin/python3.8 /usr/bin/python3
# python3 -V
Python 3.8.13

以下のように/usr/bin/pythonへシンボリックリンク作成する場合は注意

# ln -sf /opt/rh/rh-python38/root/bin/python3.8 /usr/bin/python
# python -V
Python 3.8.13

以下のようにyumが使えなくなることがある
これはyumのスクリプトがpython2.7で動いていることによるらしい

# yum install which
  File "/usr/bin/yum", line 30
    except KeyboardInterrupt, e:
                            ^
SyntaxError: invalid syntax

この状況で解決する場合は/usr/bin/yumの1行目を#! /usr/bin/python2にします

// before
# head -1 /usr/bin/yum
#!/usr/bin/python

// after
# head -1 /usr/bin/yum
#! /usr/bin/python2

デフォルトのシンボリックリンクは以下

# ls -l /usr/bin/python
lrwxrwxrwx 1 root root 7 Jul 14 12:12 /usr/bin/python -> python2
# ls -l /usr/bin/python2
lrwxrwxrwx 1 root root 9 Jul 14 12:12 /usr/bin/python2 -> python2.7
2
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?