Python
Linux
sudo
pyenv

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

More than 1 year has passed since last update.

ブログにも記事を写しました。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" # 追加