Rasbianにpython3.7を入れ、ついでに仮想環境を構築する。

NO IMAGE

はじめに

これからRaspberry Piを使ってpythonプログラムを走らせていきますが、
あらかじめ仮想環境を作っておきたいと思います。

python3系ならvenvが使えるはずなので、これを使っていきます。
ラズパイということでOSはRasbianを使用していますが、
他のLinux系OS(Ubuntu/centOSなど)でも同様だと思います。

現状確認

そもそもラズパイにpythonのインストールなどはしていないのですが、試しに

$ python3 -V

と打ってみると、すでにPython 3.5.3が入っているとのこと。
ラズパイありがたい!

ちなみに

$ python -V

と打つと、Python 2.7.13と表示されました。

この様に、Python3系とPython2系が入っている場合は、Python3系のコマンドとして”python3″が設定されている場合があります。

ただ、python3.5.3というのは若干古いものなので、3.6.xか3.7.xにするべきです。
サクッと3.7にしてみましょう。

Python3.7インストール

こちらのページを大いに参考にして下記の通り進めます。
#で始まる行はコメントなので実行しなくて大丈夫です。

#aptはlinux系OSのパッケージ管理コマンド
#まずはaptを更新する
$ sudo apt update
$ sudo apt upgrade

#pythonのインストールに必要なパッケージをインストールしておく
$ sudo apt install -y libffi-dev libbz2-dev liblzma-dev libsqlite3-dev libncurses5-dev libgdbm-dev zlib1g-dev libreadline-dev libssl-dev tk-dev build-essential libncursesw5-dev libc6-dev openssl git

#wgetはURLを指定してファイルをダウンロードするコマンド
$ wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
#tarはアーカイブを展開するコマンド
#-xf オプションのxは展開、fはファイルを示し-xfでファイルを展開する
$ tar -xf Python-3.7.0.tar.xz 
$ cd Python-3.7.0

#pythonをインストールしていく
$ ./configure
$ make
$ sudo make altinstall

#python3.7がインストールできたことを確認
$ python3.7

#正しくインストールできていれば、">>>"が表示され対話モードが起動します
#Ctrl + z で対話モードを抜ける

python3.7.0をインストールしたのでpython2系の”python”コマンド、python3.5系の”python3″コマンドに加え、python3.7.0を実行するための”python3.7″コマンドが追加されました。

Python3.7でpythonのプログラムを実行する場合は

$ python3.7 (フィアル名).py

と入力します。

仮想環境作成

それでは、仮想環境を作りたいディレクトリに移動して、

$ python3.7 -m venv [環境名]

を実行します。
現在のディレクトリ配下に入力した環境名のディレクトリが生成されるので、
必要以上に深くならないように気をつけてください。

ホームディレクトリの直下に仮想環境を保存するディレクトリを作成しておくと
後々出てくるアクティベートもしやすくて良いと思います。

仮想環境有効化

作成した仮想環境を有効化します。
上記のコマンドを実行したままの状態で

$ . [環境名]/bin/activate

と入力します。
すると、コマンドラインの先頭に(環境名)が追加され

(環境名) pi@raspberrypi:~/ $

の様な状態になります。
これで仮想環境を有効化(アクティベート)できました。

アクティベートすると、単に”python”というコマンドを入力するだけで、
python2系ではなく、python3.7系のPythonを起動起動できます。

同様に、pipも単に”pip”と入力するだけで”pip3.7″相当の働きをします。

パッケージの追加

venv環境が作れたら、仮想環境の中でパッケージを追加していきます。
venv環境でのパッケージ管理はpipを使うのが一般的です。

まずはpip自体のアップデートをします。

$ sudo pip install -U pip

この様にpipはpip install [パッケージ名]でパッケージをインストールします。
また、install -U とすることで、すでに入っているパッケージのアップデートを行うことができます。

今回は後々使う予定のRPi.GPIOをインストールしてみます。

$ sudo pip install RPi.GPIO

#結果はこんな感じ
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting RPi.GPIO
  Downloading https://www.piwheels.org/simple/rpi-gpio/RPi.GPIO-0.6.5-cp35-cp35m-linux_armv7l.whl (66kB)
     |████████████████████████████████| 71kB 132kB/s 
Installing collected packages: RPi.GPIO
Successfully installed RPi.GPIO-0.6.5

#listでインストール済みのパッケージを一覧で確認できます。
$pip list

Package       Version
------------- -------
pip           19.1.1 
RPi.GPIO      0.6.5

実行確認

最後に、テストコードを実行して環境がうまく作れていることを確認します。
任意のディレクトリに.pyファイルを作成します。
今回はtest.pyとし、コードは下記の通りです。

import RPi.GPIO as GPIO

print("Successfully imported!")

先ほどインストールしたRPi.GPIOが正しくインポートできるか確認できるコードにしました。
最後に

$ python test.py

と実行して「Successfully imported!」と表示されれば、python3.7のインストールおよび、pipによるパッケージ管理がうまくできています。

今回はここまでです。
次回は作成した環境でLEDの制御を行います。