Python
Linux
sudo
pyenv

linuxに、root userでも使えるpyenv環境の構築

ブログにも記事を写しました。linuxに、root userでも使えるpyenv環境の構築

ほとんどPyenvによるPython3.x環境構築(CentOS, Ubuntu)のモノマネですので、環境構築をしたい人は上記を参考にしてください。メモです。

背景

  1. ansibleをpipでインストールしようとする
  2. pyenvで管理されてるpythonとシステム pre-install pythonが呼ばれたり呼ばれなかったりでうまくいかない。
  3. 全部pyenvでインストールしてるものを使ってしまいたい。

やったこと

ec2上にpythonのインストール。systemにもともとインストールされているpythonに何もかも突っ込んで言って辛い思いをした過去があるので、できればバージョン切り替え用のパッケージをかませたい。

結果pyenvを導入した。多くのプロジェクトが同一サーバー化で動くことは想定していないので、仮想環境構築はしない。(virtualenv等)

やらなかったこと

virtualenv/pyenvなど仮想環境構築ツールの導入。

コード

pyenvインストール

PyenvによるPython3.x環境構築(CentOS, Ubuntu)にある通りです。下記コマンドで起動スクリプトを作成。

/etc/profile.d/pyenv.sh
export PYENV_ROOT="/home/ec2-user/.pyenv"
export PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}"

この後に設定を反映させるために下記コマンドを実行。

source /etc/profile.d/pyenv.sh

ログインし直した時も、この設定は反映されるようなので、一度実行すればきにする必要はなさそうです。

豆知識程度に補足をすると、/etc/profile.dにはアプリケーション毎の設定を記述していくそうです。ここに設定を書いておくと、ログインユーザに関係なく起動時に読み込んでくれます。(下記手順)

  1. /etc/profileを実行
  2. /etc/profileによって、/etc/profile.dディレクトリ配下のすべてのファイルを実行
  3. ログインユーザーのホームディレクトリにある~/.bash_profileを実行
  4. ~/.bash_profileによって、~/.bashrcを実行
  5. ~/.bashrcによって、/etc/bashrcを実行

sudoでもuserのパス設定を引き継げるように設定

あとは、ログインユーザからsudoで実行した時に、path情報とかを引き継げるように設定をする。

これをやらないと、なんかしらのscripthがpythonコマンドを叩こうとした時に、pyenvが呼ばれないことがある。visudoを利用して設定ファイルを書き換える。

$ visudo 

~~~  編集モードに入るので、下記のように変更  ~~~

# Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin  コメントアウト
Defaults    env_keep += "PATH"  # 追加
Defaults    env_keep += "PYENV_ROOT"  # 追加