53602


`centos7`のデフォルトの`python`のバージョンを3.7に変更したいです。

現在のステータスですが、

  * `python`と打つと、`2.7.5`でコンソールログインします。
  * `/usr/bin`配下に`python2.7`と`python3.6`のモジュールがある
  * `pip`や`pipenv`インストール済み
  * `python3.7`をDL→インストール→`/usr/local/bin/python3.7`として入る

どうすればpythonのデフォルトを3.7にできますでしょうか？pythonのリンクを`ln`コマンドで変えるのでしょうか。それとも`pip`等で正しくやる方法があるのでしょうか？  
pythonに対し明るくないので、ご教示ください。

* * *

以下情報です。

コンソールログイン:

[code]

    docker bin # python
    Python 2.7.5 (default, Oct 30 2018, 23:45:53) 
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 
    
[/code]

モジュールの場所:

[code]

    docker Python-3.7.2 # ls -la /usr/bin/ | egrep "python"
    lrwxrwxrwx.   1 root root          7  3月  1 18:31 python -> python2
    lrwxrwxrwx.   1 root root          9  3月  1 18:31 python2 -> python2.7
    -rwxr-xr-x.   1 root root       7216 10月 31 08:46 python2.7
    -rwxr-xr-x.   2 root root      11376 12月  6 06:04 python3.6
    lrwxrwxrwx.   1 root root         26  3月  1 18:36 python3.6-config -> /usr/bin/python3.6m-config
    -rwxr-xr-x.   2 root root      11376 12月  6 06:04 python3.6m
    -rwxr-xr-x.   1 root root        173 12月  6 06:04 python3.6m-config
    -rwxr-xr-x.   1 root root       3435 12月  6 06:01 python3.6m-x86_64-config
    
[/code]

python3.7インストール済み:

[code]

    docker bin # python3.7
    Python 3.7.2 (default, Mar 20 2019, 17:47:11) 
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> quit();
    
[/code]

python3.7の場所:

[code]

    docker bin # which python3.7
    /usr/local/bin/python3.7
    
[/code]


CC BY-SA 4.0
2019-03-20T09:21:53.550
53587
2019-03-20T16:05:57.903
27539
question
python centos
pythonのデフォルトバージョンを3.7にしたい


「デフォルトバージョンを変えたい」がどのレベルの話なのかによりますが、単に「`python`とコマンドを実行したときにpython3.7が起動してほしい」だけであれば、PATHの参照順やaliasなどで対応すべきでしょう。

[code]

    export PATH=/usr/local/bin:$PATH   # /usr/local/bin 以下にpython3.7がある場合
        または
    alias python='/usr/bin/python3'
    
[/code]

`/usr/local/bin`などの標準PATH以外に独立してインストールしてあるなら、`python`という名前で参照できるようシンボリックリンクを張るのもOKでしょう。

[code]

    $ cd /usr/local/bin
    $ ln -s python3.7 python
    
[/code]

@kunif
さんの回答にもある通り、CentOS/RHEL7では`yum`コマンドなどのシステムレベルでまだPython2に依存している部分があります。`/usr/bin`や`/bin`以下の`python`をシンボリックリンクで置き換えてしまうのはおすすめしません。


CC BY-SA 4.0
2019-03-20T15:37:12.757
53602
2019-03-20T15:37:12.757
3060
53587
answer


`python`で自分の期待するpythonが起動してほしい、というのは理解できるものの、案外難しいです。pipenvがインストールされていてpython3.7は起動できる状態のようなので、手間は増えますが、

[code]

    mkdir appname
    cd appname
    pipenv install --python 3.7
    
[/code]

とすれば、以後、`appname`の中であれば、

[code]

    pipenv shell
    
[/code]

でpipenv環境のシェルを起動し

[code]

    python
    
[/code]

で3.7が起動するはずです。

環境がさらに複雑になりますがpyenvをインストールしてもよいのであれば、pyenv環境に3.7をインストールし、pyenv global
3.7.xする方法もあります。これだと素直に`python`でpython3.7が起動するようになります。

システムに複数バージョンがインストールされている場合、安直にaliasやシンボリックリンクで`python`のコマンド名を置き換えてしまうと、`python`を素直に起動するだけならともかく、周辺ツールがうまく動かないことがあります。(バージョン付き`python`を期待している、または逆)。ここら辺の挙動が理解できて自分で解決できるならよいですが、よくわからないならツールに頼った方がよいでしょう。

さらにCentOSの場合、システムが/usr/bin/pythonがpython2である前提なので、これを触るのはリスクが高いのでやめておきましょう。「依存しているコマンドのshebangを書き換える」なんてやると、yum
updateしたときに死にます。

また、自分でpython(に限ったことではないのですが)をビルドすると、ビルド時に依存するライブラリがインストールされていなくて後でエラーになって悩むことがあるので、あまりおすすめできません。3.7が使いたいのであれば、最近のUbuntu(Debianも?)だとパッケージで3.7が使えるので、CentOSにこだわりがないなら他のディストリビューションを使うのも手です。CentOSでなければならないなら、EPELの3.6を使う方が安全です。(`python`コマンドでpython3.7を起動したい問題の解決にはなりません)


CC BY-SA 4.0
2019-03-20T16:05:57.903
53605
2019-03-20T16:05:57.903
5793
53587
answer