Raspberry Piでpyenvとwiringpiを使うときに注意すること

投稿者: | 2017-04-13

概要

Raspbian環境化で詰みました。忘れないように書きます。pyenvはpythonのバージョン管理、切り替えに便利なツールで、
これを使うと簡単に複数バージョンのpythonを保持、管理できます。

wiringpiとは、pythonで使用できるライブラリの一つで、raspiのGPIO操作を容易にします。raspiでGPIOを操作するには、
pythonプログラムをsudo権限で実行しなければなりません。

一方で、sudo権限をつけてpythonを実行すると、pythonはシステム側の環境を参照して実行されます。
つまりどういうことかというと、pyenv下でpipなどを用いてインストールしたパッケージは認識されないということです。加えて、システム側のpythonが呼ばれるのでそもそもpyenvでglobalに設定したpythonのバージョンは無視され、システムが持つpythonのバージョンで実行されます。以下の2つのコマンドを使うとわかりやすいでしょう。

$ sudo python -V
$ python -V

前者はシステム側のpythonバージョンが、後者はpyenvでglobalになっているpythonのバージョンが出るはずです。


解決方法

方法1:sudoersファイルのDefaultにpyenvのpathを追加する。

やってないので割愛。調べれば出てきます。

方法2:sudo実行時に-Eオプションを付与する

以下のように実行します。

$ sudo -E python hoge.py

-Eオプションは実行したいコマンドの直前につけます。-Eオプションはユーザの環境変数を引き継ぎます。

方法3:直接pyenv下のpythonを実行する

$ sudo pyenvのパス/pythonV.V hoge.py

V.Vは任意のバージョン。

以上です。方法3は記述するのが面倒なので方法1か2を私は推します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です