ブログにも記事を写しました。linuxに、root userでも使えるpyenv環境の構築
ほとんどPyenvによるPython3.x環境構築(CentOS, Ubuntu)のモノマネですので、環境構築をしたい人は上記を参考にしてください。メモです。
背景
- ansibleをpipでインストールしようとする
- pyenvで管理されてるpythonとシステム pre-install pythonが呼ばれたり呼ばれなかったりでうまくいかない。
- 全部pyenvでインストールしてるものを使ってしまいたい。
やったこと
ec2上にpythonのインストール。systemにもともとインストールされているpythonに何もかも突っ込んで言って辛い思いをした過去があるので、できればバージョン切り替え用のパッケージをかませたい。
結果pyenvを導入した。多くのプロジェクトが同一サーバー化で動くことは想定していないので、仮想環境構築はしない。(virtualenv等)
やらなかったこと
virtualenv/pyenvなど仮想環境構築ツールの導入。
コード
pyenvインストール
PyenvによるPython3.x環境構築(CentOS, Ubuntu)にある通りです。下記コマンドで起動スクリプトを作成。
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
にはアプリケーション毎の設定を記述していくそうです。ここに設定を書いておくと、ログインユーザに関係なく起動時に読み込んでくれます。(下記手順)
-
/etc/profile
を実行 -
/etc/profile
によって、/etc/profile.d
ディレクトリ配下のすべてのファイルを実行 - ログインユーザーのホームディレクトリにある
~/.bash_profile
を実行 -
~/.bash_profile
によって、~/.bashrc
を実行 -
~/.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" # 追加