LoginSignup
24
33

More than 5 years have passed since last update.

ソースからPythonをインストール

Last updated at Posted at 2017-09-10

yumからpythonを入れてもいいけど、最新版があるとも限らないし、
かといってむやみやたらにリポジトリを増やすのが嫌いなので、ソースからインストゥール。
なお、OSはCentOS7。

# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

0.全手順

# cd /usr/local/src
# curl -O https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
# tar Jxf Python-3.6.2.tar.xz
# cd Python-3.6.2
# ./configure --prefix=/usr/local/python362 --with-ensurepip
# yum -y install zlib-devel openssl-devel tk-devel
# make
# make test
# make install
# ln -s /usr/local/python362/bin/python3.6 /bin/python3
# ln -s /usr/local/python362/bin/pip3.6 /bin/pip3

1.最新版のソースを入手する

いちいちブラウザを開くのは面倒なので?curlで探す。
-sでプログレス表示を抑止。

# curl -s https://www.python.org/downloads/source/ | grep -i latest
            <li><a href="/downloads/release/python-362/">Latest Python 3 Release - Python 3.6.2</a></li>
            <li><a href="/downloads/release/python-2713/">Latest Python 2 Release - Python 2.7.13</a></li>

最新版は3.6.2なので、ダウンロードする。
-Oはリモートと同じ名前でローカルにoutput。
手前のコンパイルなので、置き場所は、ユーザ/usr/local/srcにしておく。

# cd /usr/local/src
# curl -O https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz

解凍する。xz形式はtarのJオプションで解凍可能。

# tar Jxf Python-3.6.2.tar.xz

2.インストール

configureを実行する。
インストール先は、後々最新バージョンを入れることを考えて、
/usr/local/python362にしたいので、configureでprefixを指定する。
ついでに、pipはよく使うので、併せてインストールするように指定する。

# cd Python-3.6.2
# ./configure --prefix=/usr/local/python362 --with-ensurepip

configureを実行することで、システムのライブラリやらコマンドやら、
コンパイルに必要なものをチェックして、
オプションで与えられたprefixやらを盛り込んだMakefileを作成する。

次に、pip前提パッケージを導入しておく(なければ)。

# yum -y install zlib-devel openssl-devel tk-devel

続いて、makeでMakefileをもとにコンパイルする。

# make

その次に、make testでちゃんとmakeしたものが動くかテストする。

# make test
(略)
zipimport.ZipImportError: can't decompress data; zlib not available
(略)
Tests result: FAILURE
make: *** [test] エラー 1

ダメならこんな感じになる。(pip前提のzlibが入ってないときのエラー)

SUCCESSしたらようやくmake installでインストール。

# make install

3.リンクの作成

/bin配下に、python3とpip3へのリンクを作ってやる。

# ln -s /usr/local/python362/bin/python3.6 /bin/python3
# ln -s /usr/local/python362/bin/pip3.6 /bin/pip3

最後にバージョンを表示して確認。

# python3 -V
Python 3.6.2
# pip3 -V
pip 9.0.1 from /usr/local/lib/python3.6/site-packages (python 3.6)

以上でおしまい。

怪談話を見たい人は以降も読み進めて頂きたく。

4.リンクの貼り換えはやっちゃダメ

最初こっちをやったらハマったので、教訓として残しとく。

既存のリンクがバージョン2へのリンクなので、これを切り替える。
ついでに、pipのリンクも作ってやる。

# which python
/bin/python
# ls -l /bin/python
lrwxrwxrwx. 1 root root 7  5月  2 13:00 /bin/python -> python2
# mv /bin/python /bin/_python
# ln -s /usr/local/python362/bin/python3.6 /bin/python
# ln -s /usr/local/python362/bin/pip3.6 /bin/pip

最後にバージョンを表示して確認。

# python -V
Python 3.6.2
# pip -V
pip 9.0.1 from /usr/local/python362/lib/python3.6/site-packages (python 3.6)

では終わらなかった…。

じゃあインストールしたし、試しにpipでscipyでも入れてみるか、と。

# pip install scipy
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

ああなるほど、SSLが必要なんすね。ということで、yumでopenssl-develを入れよう。(※本当は再makeが必要)

# yum -y install openssl-devel
  File "/bin/yum", line 30
    except KeyboardInterrupt, e:
                            ^
SyntaxError: invalid syntax

(゜ホ゜)…という顔でしばし固まった。
理由は、Python3からexceptの書き方が変わったこと。
っていうかyumがpythonで実装されているなんて知らなかった…。

従って、応急処置でshebangを以下の通り変更。本当は人様のスクリプトに手を加えたくないが…。

#!/usr/bin/python2

で動くかなと思ったら

# yum -y install openssl-devel
(略)
Downloading packages:
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax


ユーザーのキャンセルで終了しています

ま た お ま え か

…ということで、むやみやたらに既存をいじってはいけません。

24
33
1

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
24
33