Rocky Linuxで複数のPython環境を構築、運用するメモ書きです。
CentOSの後継にRocky Linuxを使う事を決めたので、それに合わせて記事内容も加筆修正しました。
Rocky Linux 9は執筆時点でPython 3.9.14がデフォルトでインストールされるので当面は困る事は無いと思うのですが、Pythonでアプリを作る場合はOS側とは別にバージョンを管理した方が何かと都合が良いと思います。
本記事ではRocky Linux 9で環境構築をしていますが、Alma Linuxやまだサポート期間が残っているCentOS 7でも同様の手順で構築出来ます。ただし、CentOS 7では3.9以降はインストールに失敗するようなので、早めにRocky LinuxかAlma Linuxに移行した方が良いです。
目次
スポンサーリンク
利用環境
下記条件の開発環境をRocky Linux上に構築します。
- Rocky Linux 9
- Pythonのバージョン管理はPyenvを利用
- アプリを作るときはpyenv-virtualenvでPythonの実行環境を分ける
- OS 標準のPythonはそのまま残す
Pythonのバージョン管理はPyenvでやるという事はイメージしやすいと思いますが、アプリを作る場合は更にpyenv-virtualenvで個別環境を作ってアプリ毎に管理していきます。
例えばPyenvでPython 3.10をインストールしたとして、そこで3.10を利用する複数のアプリを作っていくと利用パッケージがごちゃごちゃになって管理しきれないので、その問題を解消するためにpyenv-virtualenvを使う感じです。
pyenv-virtualenvを使っておけばサーバの引っ越しも楽になるので、なるべく使っておくと良いでしょう。
Rocky LinuxにPyenvをインストールする
Rocky LinuxにPyenvを導入する手順を書いていきます。
Pyenvに必要なパッケージをインストールする
# dnf -y install gcc bzip2 bzip2-devel openssl openssl-devel readline readline-devel sqlite-devel tk-devel git
Pyenvのインストール
Pyenvは全ユーザーで利用する事を想定して “/usr/local/pyenv” にインストールします。
Pyenvはホームディレクトリにもインストールできるので、インストール権限を持っていない場合は “~/.pyenv” に置き換えてください。
# cd /usr/local/pyenv # git clone git clone https://github.com/pyenv/pyenv.git # mkdir {versions,shims}
Pyenvのプラグインをインストール
Pyenvのプラグイン pyenv-virtualenv と pyenv-update も同時にインストールします。
pyenv-virtualenvは最初に説明したアプリ毎に個別環境を構築する為のプラグインで、pyenv-updateはPyenv自体をアップデートするプラグインです。
# cd plugins/ # git clone https://github.com/pyenv/pyenv-virtualenv.git # git clone https://github.com/pyenv/pyenv-update.git
Pyenvの環境設定
PyenvのPathを通す設定を行います。
# echo 'export PYENV_ROOT="/usr/local/pyenv"' >> /etc/profile.d/pyenv.sh # echo 'export PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}"' >> /etc/profile.d/pyenv.sh
sudo 時も環境設定を引き継げるよう設定してあげます。
# visudo ----- 編集 ----- #Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin <- コメントアウト # 以下を追加 Defaults env_keep += "PATH" Defaults env_keep += "PYENV_ROOT"
Pyenvの動作確認
設定した環境変数を読み込むには一旦ログアウトして再ログインするか、sourceコマンドで再読み込みさせます。
下記コマンドでPyenvのバージョンが表示されればインストールと環境設定は完了です。
$ source /etc/profile.d/pyenv.sh $ pyenv --version pyenv 2.3.7-2-g58bbbf88
Pyenvを使ってPythonをインストールする
Pyenvが使えるようになったら次はPythonをインストールします。
“pyenv install -l” と打つとインストールできるバージョンの一覧が表示されます。
$ pyenv install -l ~ 省略 ~ 3.10.1 3.10.2 3.10.3 3.10.4 3.10.5 3.10.6 3.10.7 3.10.8 3.11.0 ~ 省略 ~
利用するバージョンを指定してこのようにインストールします。
$ sudo pyenv install -v 3.11.0
これだけで簡単にPythonのインストールができます。
新しいバージョンが見つからない場合はPyenvをアップデートする
Pythonの新しいバージョンが出てこない場合はPyenv自体のアップデートが必要です。この時pyenv-updateのプラグインをインストールしていれば簡単にアップデートが出来ます。
$ sudo pyenv update
PyenvでPythonのバージョンを切り替える
Pyenvはシステム全体、ディレクトリ単位でバージョン指定が可能です。ただし、システム全体を変えてしまうと問題が起きると思うので、ディレクトリ単位で設定して運用すると安全です。
ディレクトリ単位でバージョンを指定
$ python --version Python 3.9.14 <= OSデフォルト $ mkdir ~/my_python/ $ cd ~/my_python/ $ sudo pyenv local 3.11.0 $ python --version Python 3.11.0 <= ディレクトリ内で有効なバージョン
ディレクトリ単位の場合は .python-version という設定ファイルが出来てそこでバージョンが指定されます。このディレクトリ配下では指定されたバージョンのPythonが動作し、ディレクトリを抜ければ標準のPythonを使うよう勝手に切り替わります。
アプリ用のディレクトリにPyenvで指定しておけばあとはバージョンを意識しなくても良いので便利です。
OS全体でバージョンを指定
OS全体でバージョンを指定する場合はこのようにします。
$ sudo pyenv global 3.11.0 $ python --version Python 3.11.0 ## 他のユーザーへも反映されます $ su - # python --version python --version Python 3.11.0 ## 戻す場合はこのように # pyenv global system # python --version Python 3.9.14
こんな感じで簡単に切り替え可能です。
pyenv-virtualenvでアプリの個別環境を管理する
Pyenvを使う事でPythonのバージョン管理が出来るようになりましたが、アプリ毎に環境を管理したい場合はpyenv-virtualenvを利用します。
同じバージョンのPythonで全く異なるアプリを作りたい時は、pyenv-virtualenvで環境を分けておくとパッケージがごちゃごちゃにならず便利です。
Pyenvでアプリ毎の環境を設定する
同じバージョンのPythonを利用するアプリ用に2つ環境を用意してみます。
$ pyenv versions * system (set by /usr/local/pyenv/version) 3.11.0 ## virtualenvの作成 $ sudo pyenv virtualenv 3.11.0 myapp-a-3.11.0 $ sudo pyenv virtualenv 3.11.0 myapp-b-3.11.0 $ pyenv versions * system (set by /usr/local/pyenv/version) 3.11.0 3.11.0/envs/myapp-a-3.11.0 3.11.0/envs/myapp-b-3.11.0 myapp-a-3.11.0 myapp-b-3.11.0 ## 作ったvirtualenvを使う $ pyenv local myapp-a-3.11.0 ## このようにパッケージを分けて使える # pip list Package Version ---------- ------- pip 22.3 setuptools 65.5.0
パッケージをそれぞれ管理出来るので、これをやっておけばアプリを引っ越しは楽になります。
引越しの場合はこのように。
引っ越し元
Pyenvでバージョン管理しているディレクトリに移動し、インストールされているパッケージのリスト書き出し。
$ pip freeze > requirements.txt
引っ越し先
引っ越し先でも同じPythonのバージョンをインストール後、バージョン管理しているディレクトリに移動しrequirements.txtからパッケージを一括インストール。
$ sudo pip install -r requirements.txt
PyenvでPythonをアンインストールする
不要になったバージョンは指定して個別にアンインストールもできます。
# sudo pyenv uninstall 3.10.0 pyenv: remove /usr/local/pyenv/versions/3.10.0? y <= yで応答
PyenvとAnacondaの共存には注意
Pythonで機械学習をしたい場合に情報収集をしていると Anaconda という別の仮想環境を構築するアプリケーションがよく目に付きます。こっちは機械学習とかのパッケージをオールインワンで構築してくれる代物で、また別の方法でパッケージ管理をします。
このAnaconda管理下でpipを使うとAnacondaがおかしくなってしまうので注意しましょう。(よくわからずに色々やってたらAnacondaを壊してしまった…)
Pyenvを使うならpipでパッケージを管理。Anacondaならcondaでだけ管理した方がいいみたい。
以上、Pyenvのメモでした。
とても参考になりました!
一点タイポ?っぽいものが。
■ Pyenv のインストール
# git clone git://github.com/yyuu/pyenv.git ./pyenv
↓
# git clone https://github.com/yyuu/pyenv.git ./pyenv
では?
コメントありがとうございます。これどっちでもいけますよ。
gitコマンドが git:// プロトコルをいいように解釈してくれるんだと思います。
言われて気付きましたがあんまりプロトコル部分を意識してなかったです。
Git リポジトリの取得