【プログミング】Linux CentOS7 に Python 3.6 をソースからインストールする手順

管理人サッスーは立場が弱いエンジニアだ。
いつも「はいはい」言っている。
つまり断れない性格だ。

 

とうとう会社から Python でプログラムを作るように指令が下ってしまった。。
ちなみに、前任者が開発したPythonのプログラムを確認したところ、「マルチスレッド」のプログラムだった。

 

しかし、しょせん我々はインフラ系のエンジニアだ。
プロのプログラマーではない。

 

 

 

もしプロのプログラマーで、Web系とか0.0001秒のレスポンスを競い合っているような場合なら、マルチスレッドでほんのちょっとでも処理時間を短縮させることに意義があるだろうが、サッスーはインフラ系のエンジニアでプログラムはさっぱり分からない。

(もしプロレベルで分かっているなら、とっととアメリカに行って年収1500万円のPythonプログラマーになっている)

 

 

 

 

管理人サッスーは、プログラムは趣味としては大好きで、Rubyを使って金融情報をスクレイピングして統計情報を出したりして遊んでいたが(ボリンジャーバンドのようなもの。ちなみに株で勝ったことがない)、せいぜいその程度だ。
本格的なゲームとか開発したいと思った時期もあったが、そんな能力はない。

 

 

だから、しょせんインフラ系のエンジニアなんだから、マルチスレッドなんて不要だ。
時間が短縮できないというなら、残業すればいいと思っている。
つまり、プログラムやシステムに頼ってはいけないということだ。
(エンジニアが言ってはいけない言葉であるが)

 

早速だが、Pythonの勉強を始めた。

まずは自分の環境に最新のPythonをインストールしたい。

 

以下は、サッスーの環境(CentOS7)に、Python3.6をインストールした手順である。

 

Python3.6環境の構築手順

まずはPythonの環境を整える。

 

現在の環境を見てみよう。

 

$ python
Python 2.7.5 (default, Sep 15 2016, 22:37:39)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>>

 

サッスーの仮想マシンはCentOS7である。

$ cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

 

 

特にPythonをインストールしていないのだが、デフォルトで入っていた。

Pythonのバージョンは、2.7.5 だ。

 

 

Wikiを確認したら、最新は3.5だ。

公式サイトを確認したら、3.6がリリースされていた。
(2017年1月18日現在)

ということは、現在のサッスーの環境は古いということになる。

アップデートできるかどうか調べてみた。

 

 

 

yumからPythonを3.6にできるか確認

 

$ sudo yum update python

========================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
========================================================================================================
更新します:
python x86_64 2.7.5-48.el7 base 90 k
依存性関連での更新をします:
python-libs x86_64 2.7.5-48.el7 base 5.6 M

トランザクションの要約
========================================================================================================
更新 1 パッケージ (+1 個の依存関係のパッケージ)

総ダウンロード容量: 5.7 M
Is this ok [y/d/N]:

 

 

なるほど。

このままyumでupdateしても2.7.5か。
どうするか。

どうするも何も、どうせ業務ではないのだから、一番新しい技術に触った方がいいに決まっている。

 

だから最新の3.6にしたい。

yumコマンドで python 3.6 をインストールできないのでソースファイルをダウンロードしてコンパイルする方式にする。

ディレクトリは /usr/local/ にする。

 

ソースファイルはここからダウンロードした。

https://www.python.org/downloads/

 

 

CentOS7から以下のようにしてwgetでソースをゲットする。

$ wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz

 

 

解凍する
$ tar xvfz Python-3.6.0.tgz
$ cd Python-3.6.0

 

 

ディレクトリを移動すると、configureスクリプトがあるので実行する。

python を /usr/local にインストールしたかったので、prefix で指定する。

./configure –prefix=/usr/local

 

 

makeコマンドを実行する。

$ make

 

 

make installコマンドを実行する。

※ファイルを /usr/local に移動する必要が出てくるので、sudo で実行した。

$ sudo make install

 

エラーが出た!

 

 

Traceback (most recent call last):
File “/tmp/Python-3.6.0/Lib/runpy.py”, line 193, in _run_module_as_main
“__main__”, mod_spec)
File “/tmp/Python-3.6.0/Lib/runpy.py”, line 85, in _run_code
exec(code, run_globals)
File “/tmp/Python-3.6.0/Lib/ensurepip/__main__.py”, line 4, in <module>
ensurepip._main()
File “/tmp/Python-3.6.0/Lib/ensurepip/__init__.py”, line 189, in _main
default_pip=args.default_pip,
File “/tmp/Python-3.6.0/Lib/ensurepip/__init__.py”, line 102, in bootstrap
_run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
File “/tmp/Python-3.6.0/Lib/ensurepip/__init__.py”, line 27, in _run_pip
import pip
zipimport.ZipImportError: can’t decompress data; zlib not available
make: *** [install] エラー 1

 

エラーを見た感じ、zlibが足りなさそうだから、zlibをインストールしてみる。

$ yum install zlib

 

依存性の解決をしています
–> トランザクションの確認を実行しています。
—> パッケージ zlib.x86_64 0:1.2.7-15.el7 を 更新
—> パッケージ zlib.x86_64 0:1.2.7-17.el7 を アップデート
–> 依存性解決を終了しました。

依存性を解決しました

========================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
========================================================================================================
更新します:
zlib x86_64 1.2.7-17.el7 base 90 k

トランザクションの要約
========================================================================================================
更新 1 パッケージ

総ダウンロード容量: 90 k
Is this ok [y/d/N]: y
Downloading packages:
No Presto metadata available for base
zlib-1.2.7-17.el7.x86_64.rpm | 90 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
更新します : zlib-1.2.7-17.el7.x86_64 1/2
整理中 : zlib-1.2.7-15.el7.x86_64 2/2
検証中 : zlib-1.2.7-17.el7.x86_64 1/2
検証中 : zlib-1.2.7-15.el7.x86_64 2/2

更新:
zlib.x86_64 0:1.2.7-17.el7

完了しました!

 

 

zlib をインストールしたところで、再度makeコマンドを実行。

 

$ make install

 

またエラーが。

Traceback (most recent call last):
File “/tmp/Python-3.6.0/Lib/runpy.py”, line 193, in _run_module_as_main
“__main__”, mod_spec)
File “/tmp/Python-3.6.0/Lib/runpy.py”, line 85, in _run_code
exec(code, run_globals)
File “/tmp/Python-3.6.0/Lib/ensurepip/__main__.py”, line 4, in <module>
ensurepip._main()
File “/tmp/Python-3.6.0/Lib/ensurepip/__init__.py”, line 189, in _main
default_pip=args.default_pip,
File “/tmp/Python-3.6.0/Lib/ensurepip/__init__.py”, line 102, in bootstrap
_run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
File “/tmp/Python-3.6.0/Lib/ensurepip/__init__.py”, line 27, in _run_pip
import pip
zipimport.ZipImportError: can’t decompress data; zlib not available
make: *** [install] エラー 1

 

今度はシステム全体をアップデートしてみる。

$ sudo yum update

 

 

OSを再起動する。

$ sudo reboot

 

 

OS 再起動後に、現在のバージョンの確認

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

 

最新の CentOS7.3 にバージョンアップしていた。

 

 

 

再度チャレンジ

$ sudo make install

Traceback (most recent call last):
File “/tmp/Python-3.6.0/Lib/runpy.py”, line 193, in _run_module_as_main
“__main__”, mod_spec)
File “/tmp/Python-3.6.0/Lib/runpy.py”, line 85, in _run_code
exec(code, run_globals)
File “/tmp/Python-3.6.0/Lib/ensurepip/__main__.py”, line 4, in <module>
ensurepip._main()
File “/tmp/Python-3.6.0/Lib/ensurepip/__init__.py”, line 189, in _main
default_pip=args.default_pip,
File “/tmp/Python-3.6.0/Lib/ensurepip/__init__.py”, line 102, in bootstrap
_run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
File “/tmp/Python-3.6.0/Lib/ensurepip/__init__.py”, line 27, in _run_pip
import pip
zipimport.ZipImportError: can’t decompress data; zlib not available
make: *** [install] エラー 1

やっぱり駄目だった。

 

他の方法を考えた方が速い?

いろいろGoogleで検索してみる。

 

あ。そもそも開発環境が整ってないとか?

 

かもしれない。なぜなら、開発環境を構築した記憶がないからだ!

早速開発環境を整える。

 

$ sudo yum groupinstall development

 

 

更にも必要そうなものを一式追加してみる。
$ sudo yum install zlib-dev openssl-devel sqlite-devel bzip2-devel

 

 

再度挑戦

$ sudo make install

 

if test -f /usr/local/bin/python3 -o -h /usr/local/bin/python3; \
then rm -f /usr/local/bin/python3; \
else true; \
fi
(cd /usr/local/bin; ln -s python3.6 python3)
if test “3.6” != “3.6m”; then \
rm -f /usr/local/bin/python3.6-config; \
(cd /usr/local/bin; ln -s python3.6m-config python3.6-config); \
rm -f /usr/local/lib/pkgconfig/python-3.6m.pc; \
(cd /usr/local/lib/pkgconfig; ln -s python-3.6.pc python-3.6m.pc); \
fi
rm -f /usr/local/bin/python3-config
(cd /usr/local/bin; ln -s python3.6-config python3-config)
rm -f /usr/local/lib/pkgconfig/python3.pc
(cd /usr/local/lib/pkgconfig; ln -s python-3.6.pc python3.pc)
rm -f /usr/local/bin/idle3
(cd /usr/local/bin; ln -s idle3.6 idle3)
rm -f /usr/local/bin/pydoc3
(cd /usr/local/bin; ln -s pydoc3.6 pydoc3)
rm -f /usr/local/bin/2to3
(cd /usr/local/bin; ln -s 2to3-3.6 2to3)
rm -f /usr/local/bin/pyvenv
(cd /usr/local/bin; ln -s pyvenv-3.6 pyvenv)
if test “x” != “x” ; then \
rm -f /usr/local/bin/python3-32; \
(cd /usr/local/bin; ln -s python3.6-32 python3-32) \
fi
rm -f /usr/local/share/man/man1/python3.1
(cd /usr/local/share/man/man1; ln -s python3.6.1 python3.1)
if test “xupgrade” != “xno” ; then \
case upgrade in \
upgrade) ensurepip=”–upgrade” ;; \
install|*) ensurepip=”” ;; \
esac; \
./python -E -m ensurepip \
$ensurepip –root=/ ; \
fi
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-9.0.1 setuptools-28.8.0

 

ようやくpython3.6のインストールが成功した!

 

 

 

python3.6の動作を確認してみる

 

確認してみる。

# pwd
/usr/local/bin

 

 

# ls
2to3 idle3 pip3.6 python3 python3.6-config pyvenv
2to3-3.6 idle3.6 pydoc3 python3-config python3.6m pyvenv-3.6
easy_install-3.6 pip3 pydoc3.6 python3.6 python3.6m-config
#

 

ん~。気のせいかもしれないが、python3、python3.6、python3.6mの3種類があるね(笑)

何度もやり直したからな~

 

 

とりあえず、/usr/local/bin/python3.6 にパスを通しておこう。

$ python3.6 –version
Python 3.6.0

あれ。すでにパスは通っていた。

 

# python –version
Python 2.7.5

デフォでPython 3.6 を使用したい。

 

ちなみに yum コマンドに影響がないかチェック。
yumはPythonを使用しているから。

$ yum list

zsh.x86_64 5.0.2-25.el7 base
zsh-html.x86_64 5.0.2-25.el7 base
zziplib.i686 0.13.62-5.el7 base
zziplib.x86_64 0.13.62-5.el7 base
zziplib-devel.i686 0.13.62-5.el7 base
zziplib-devel.x86_64 0.13.62-5.el7 base
zziplib-utils.x86_64 0.13.62-5.el7 base

特に問題なさそう。

 

よし。これからPythonでのプログラムをガッツリ勉強する!

 

 

 

 

コメントを残す

メールアドレスが公開されることはありません。