Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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


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

ま た お ま え か

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

hasegit
ゲーム開発に憧れて、プログラミングをしたくてこの業界に来たものの、何故かインフラをガッツリやらされて生きてきたおじさん。自動化至上主義。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした