ぽよメモ

レガシーシステム考古学専攻

sudoとpyenv

さっきの記事「RasPiで室温を計測する」の最後に書きましたが、通常pyenvを使っている人の環境ではシステム側のpythonと、pyenv側のpythonが入っていると思います。
このとき何もせずpyenvをインストールしているとsudo python hoge.pyしたとき、勝手にシステム側のpythonが呼ばれてしまいます。
sudoしたときにどうやってpyenv側のpythonを呼び出すかですが、/etc/sudoersのDefaultにpyenvディレクトリのパスを追加してやることで可能になります。
su -してrootにログインしてから以下の操作を行ってください。

$ vim /etc/sudoers
#初期 Default secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
#/home/pi/.pyenv/shims:/home/pi/.pyenv/bin:を追記
Default secure_path="/home/pi/.pyenv/shims:/home/pi/.pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

保存時に怒られます。:wq!しましょう。
これでひとまずsudo pythonしたときにpyenv側から呼びだされます。
しかし、python-smbusはシステム側のpythonに依存し、pyenv側に入れることができません。
試しにsudo python tmp102.pyをするとわかりますが、python-smbusはシステム側のpythonにいるので、sudoコマンドでpyenv側のpythonを呼び出してもNo module named smbusと怒られてしまいます。
そこでsmbus-cffiを使います。

$ sudo apt-get install libi2c-dev libffi-dev
$ pip install cffi
$ pip install smbus-cffi

これでもう一度試してみましょう。

$ sudo python tmp102.py
22.375

できました。
これ、システム側を完全に切り捨てて運用することが前提となっている感じがすごくアレですが…他に対処法が見つからなかったので…