Python3.6と3.9を共存させようとして結局3.6はアンインストール
前にpipコマンドをPython3.9にするためにPython3.6をアンインストールしたけれど、本番環境ではPython3.6を残す方向でインストールしたときの覚書。
参考: Python3.6からPython3.9に切り替える
環境: CentOS Stream 8, Python 3.6.8, Python 3.9.7
Python3.6だけでいいかな?と思ったけれど、バッチ処理がPython3.6だと90分掛かるのに対して、Python3.9だと10分ほどで終わるので速度メリットが圧倒的すぎる。
そもそもPythonの世界では1つのPCで複数のバージョンやライブラリを使うのが普通であり、そのためのvenvモジュールが用意されている。次回venvを試す予定。
Python3.9をインストール
# dnf install python39
確認
# python3.9 --version
python3コマンドとpythonコマンドのバージョンを変えない。
一応alternativesに登録されているか確認。
# alternatives --list
# alternatives --config python3
# alternatives --config python
pipコマンドの確認
# pip --version
# which pip
pip 21.3.1 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)
# python3.9 -m pip --version
pip 20.2.4 from /usr/lib/python3.9/site-packages/pip (python 3.9)
とりあえずアップデートする
# python3.9 -m pip list
# python3.9 -m pip install -U pip setuptools
# python3.9 -m pip list
そうしたらpipコマンドは3.9に置き換わっていた。
# pip --version
pip 22.0.4 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)
ん?これでpython3.6のpipを更新したらまた置き換わるのかな?
# python3.6 -m pip install -U pip
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venvWARNING: You are using pip version 21.3.1; however, version 22.0.4 is available.You should consider upgrading via the '/usr/bin/python3.6 -m pip install --upgrade pip' command.
ダメじゃん。venvを使えと言われた。
これからはpipのショートカットコマンドを使わずに「python3.9 -m pip」で実行することにした。
certbotが動くか確認
# certbot renew
Python 3.6 support will be dropped in the next release of Certbot - please upgrade your Python version.
んー、どうしよ?
Python3.6をアンインストール
結局どっちがメインか分からなくなるのでPython3.6は削除することにした。
Python3.6をアンインストール
# dnf remove python36
ライブラリを削除
(/usr/local/lib/python3.6/はpip installしたモジュールの保存場所)
# rm -rf /usr/local/lib/python3.6/
シェルの再読み込み
# source ~/.bash_profile
pythonコマンドをPython3.9に変えて確認。
# alternatives --config python
# python --version
# pip --version
前はdnf(yum)でエラーになっていたので確認。
# dnf update
Failed loading plugin "product-id": No module named 'six'Failed loading plugin "subscription-manager": No module named 'six'Failed loading plugin "upload-profile": No module named 'six'Failed loading plugin "changelog": No module named 'six'
前はrequestsだったけど今度はsixというモジュールがないというエラー。
platform-python経由でインストール。
(そのあとやっぱりrequestsのエラーが出た)
# /usr/libexec/platform-python -m pip install six requests
この本番環境はcertbotを使うのでインストール
# python -m pip install certbot
確認
# certbot --version
# which certbot
cronに設定したcertbotコマンドを確認
# more /etc/cron.d/certbot
確認のため実行してみる。
# /usr/local/bin/certbot renew && /bin/systemctl reload nginx
大丈夫そう。