Background
自作のHPで動かしているサーバOSはCentOS7と少し古いversionを使っています。それで今まではPython3.6
だったのですが、asyncio
の記述がシンプルになっているのとセイウチ構文をどこかで書いてみたいと思っていたのでPython3.9.4
にアップデートかけてみました。
普通であれば yum install python3
でインストールすればいいのですが、デフォルトだとpython3.6
だったと思います。なのでここでは公式ページからソースファイルをダウンロードし、make
を使ってコンパイルしてpython3.9.4
をインストールしようと思います。
Caution
注意点としては以下の通りです。
- CentOS7でのgccのバージョンは4.8
- バージョン5以上でないと
make
でエラーになる
- バージョン5以上でないと
- インストールした後にコマンドパス
PATH
、共有ライブラリパスLD_LIBRARY_PATH
にパスを通す -
./configure
の実行高速化パラメータ--enable-optimizations
を使わない- 付けないときと比べて2倍から5倍の実行速度があるのですが付けるとエラーになります。
-
./configure
で--enable-shared
を付けないとpip3 install mod_wsgi
するときにエラーになる。
Development
#必要なパッケージをインストール
yum groupinstall -y "Development Tools"
yum install -y kernel-devel kernel-headers bzip2-devel libdb-devel libffi-devel
yum install -y gdbm-devel xz-devel ncurses-devel readline-devel tk-devel uuid-devel openssl-devel
#zlibをインストール
wget http://zlib.net/zlib-1.2.11.tar.gz \
&& tar xvzf zlib-1.2.11.tar.gz \
&& cd zlib-1.2.11 \
&& ./configure \
&& make -j4 \
&& make install
#gccをインストール + 7系にスイッチ
yum install -y centos-release-scl
yum install -y devtoolset-7 && scl enable devtoolset-7 bash
# python3.9.4 をインストール
wget https://www.python.org/ftp/python/3.9.4/Python-3.9.4.tgz \
&& tar xvzf Python-3.9.4.tgz \
&& cd Python-3.9.4 \
&& ./configure \
--with-ensurepip \
--enable-shared \
--enable-ipv6 \
--prefix=/usr/local/python3.9 \
&& make \
&& make altinstall
# パスを通す
ln -sf /usr/local/python3.9/bin/python3.9 /usr/bin/python3
ln -sf /usr/local/python3.9/bin/pip3.9 /usr/bin/pip3
echo 'LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/python3.9/lib"' >> ~/.bashrc
echo 'PATH="$PATH:/usr/local/python3.9/bin"' >> ~/.bashrc
source ~/.bashrc
# pip をアップデート
pip3 install --upgrade pip
Reference
- CentOS7でldconfigを使って共有ライブラリを追加する
- DockerfileでPATHを通す時はRUNではなくENVを使おう
- [解決済み]Python3.8.5で「ssl module in python is not available」
- Dockerfileで、あえてsourceコマンドで環境変数を設定
- UbuntuでPythonをソースからインストール
- pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available
- python: error while loading shared libraries: libpython3.4m.so.1.0: cannot open shared object file: No such file or directory
- “ssl module in Python is not available” when installing package with pip3
- python 3.8 Could not import runpy module