Python

Python 3.x系 環境構築(CentOS 7 ・オフライン環境)

Python 2.x系は2020年で期限を迎えるのでクローズドな開発環境でもそろそろPython 3がマストになってくるお年頃。

だがしかし、CentOS7.xのデフォルトはPython2.xなのです。

# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
# python –version
Python 2.7.5


今回は外部のネットワークに繋がらない孤高なCentOS 7さんにPython 3.x系の環境を構築していきたいと思います。

※CentOS 7 ・Python 3.x環境構築で検索すると、yumする方法がよくヒットしますが、オフラインならソースからインストールした方が楽な気がします。

1.インストール手順

1.python3のソースをダウンロード
https://www.python.org/downloads/source/

2.↑のtarballをサーバに配置

3.解凍
# tar Jxvf Python-3.7.4.xz

4.解凍したフォルダに入る
# cd ./Python-3.7.4

5.makefileの作成
# ./configure --prefix=/usr/local/python374 --with-ensurepip
※python3のインストール先とpipのインストールを指定している。optimizationとか指定する場合もここ。

6.必要なパッケージのインストール
# yum -y install zlib-devel openssl-devel tk-devel libffi-devel

7.make
# make
※エラーが出た場合は→トラブルシューティング

Python build finished successfully!と出力されれば成功です。
※optionalのモジュールのエラー・not found系は必要なければ無視しても問題ありません。

8.インストール
# make install

9.python3で実行できるようにシンボリックリンクを作成
# ln -s /usr/local/python374/bin/python3.7 /usr/bin/python3
“python”に対してシンボリックを張ってしまうとシステムで使ってるpython2の方が死んでしまうので注意。

pipも同様にpip3にシンボリックを作成しておく
# ln -s /usr/local/python374/bin/pip3.7 /usr/bin/pip3

10.確認
# python3 --version
Python 3.7.4と表示されれば完了です。

2.トラブルシューティング

unknown type name ‘uuid_t’ のエラーの対処

makeした際に↓のようなエラーが出た場合

/root/Python-3.7.4/Modules/_uuidmodule.c: In function ‘py_uuid_generate_time_safe’:
/root/Python-3.7.4/Modules/_uuidmodule.c:18:5: error: unknown type name ‘uuid_t’
uuid_t uuid;
^
/root/Python-3.7.4/Modules/_uuidmodule.c:35:5: error: implicit declaration of function ‘uuid_generate_time’ [-Werror=implicit-function-declaration]
uuid_generate_time(uuid);
^
/root/Python-3.7.4/Modules/_uuidmodule.c:36:33: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
return Py_BuildValue(“y#O”, (const char *) uuid, sizeof(uuid), Py_None);

~~中略~~

Failed to build these modules:
_uuid

上記のエラーはuuid.hをmakeの時に参照できていないためエラーになっているようです。以下のいずれかのdefineを切ってmakeしてあげるとうまくいくはずです。

uuid.hが”/usr/include/uuid/uuid.h”にいる場合
# make CFLAGS=-DHAVE_UUID_UUID_H

uuid.hが”/usr/include/uuid.h”にいる場合
# make CFLAGS=-DHAVE_UUID_H

※と思っていたのですが、どちらで指定してもコンパイル通りますね。。。謎です。。。

ctypesのモジュールのビルドに失敗した場合

Failed to build these modules:
_uuid

↑のようなエラーが出力された場合は、”libffi-devel”のパッケージが入っていないことが原因であることが多いです。
また、ビルドエラーの多くはパッケージが入っていないことが原因ですので今一度確認してみてください。

参考

ソースからPythonをインストール - Qiita
yumからpythonを入れてもいいけど、最新版があるとも限らないし、かといってむやみやたらにリポジトリを増やすのが嫌いなので、ソースからインストゥール。なお、OSはCentOS7。# cat…
pyenvで3.7系のインストールに失敗したときのメモ - Qiita
エラー内容3.6系までは普通にインストールできていたのに、3.7をインストールしようとしたら次のようなエラーでインストールに失敗。ちなみにOSはUbuntu 18.04です。$ pyenv i…
CentOS 環境のPython - python.jp
CentOS 7 には最初からPythonがインストールされており、そのまま利用可能です。 しかし、このPython は、 OS がさまざまな機能を提供するために使用しています。ユーザが勝手にパッケージを導入したりすると、 OS の安定性を...

コメント

タイトルとURLをコピーしました