はじめに
2016年11月、Raspberry Pi2にカメラ(picamera)を接続してPythonスクリプトを書こうとPicameraドキュメントを読んでいたら、pipツールの記述がありました。
pipとは何かと調べてみると、Pythonのライブラリを管理するパッケージ管理システムということがわかりました。これから、Pythonを勉強しようと考えていましたので、pipをインストールしました。
pipのWEBサイト
pipのWebサイトにドキュメントがあります。
stable(安定版)バージョンのRelease Noteによると、2016年11月25日現在の最新版は9.0.1 (2016-11-06)です。
pipは、PyPI(the Python Package Index) からパッケージをインストールできます。
pipのインストール
最初に、apt-getでpipをインストールします。
sudo apt-get install python-dev sudo apt-get install python-pip
Python 2.7.9を使用していましたので、すでにインストールされているようです。
pipのバージョンを確認します。
pi@pi2note:~ $ pip --version pip 1.5.6 from /usr/lib/python2.7/dist-packages (python 2.7)
pipのバージョンは、1.5.6でした。
次に、pipコマンドを使用してpipツールをアップグレードします。
sudo pip install --upgrade pip
インストール終了後に、もう一度バージョンを確認したら 1.5.6のままでした。一度、ターミナルを閉じて、もう一度確認しました。
pi@pi2note:~ $ pip --version pip 9.0.1 from /usr/local/lib/python2.7/dist-packages (python 2.7)
pipのバージョンは、9.0.1になりました。
pipの使用方法
pipのhelpオプションで使用方法を調べました。コマンドとオプションを指定して使用します。
pi@pi2note:~ $ pip --help Usage: pip <command> [options] Commands: install Install packages. download Download packages. uninstall Uninstall packages. freeze Output installed packages in requirements format. list List installed packages. show Show information about installed packages. check Verify installed packages have compatible dependencies. search Search PyPI for packages. wheel Build wheels from your requirements. hash Compute hashes of package archives. completion A helper command used for command completion. help Show help for commands.
helpコマンド
コマンドのヘルプ情報を表示します。
helpコマンドのヘルプ情報を表示してみました。
pi@pi2note:~ $ pip help help Usage: pip help <command></command> Description: Show help for commands ・・・
pip help の後ろに調べるコマンドを指定します。
例えば、listコマンドを調べる場合は下記のようにします。
pi@pi2note:~ $ pip help list Usage: pip list [options] Description: List installed packages, including editables. Packages are listed in a case-insensitive sorted order. List Options: -o, --outdated List outdated packages -u, --uptodate List uptodate packages ・・・
list コマンド
「pip list」で、インストール済みパッケージを表示します。
pi@pi2note:~ $ pip list DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning. chardet (2.3.0) colorama (0.3.2) dnspython (1.12.0) docutils (0.12) gpiozero (1.3.1) html5lib (0.999) ・・・
「–format指定」できるようです。
- legacy : 旧来形式(デフォルト)
- columns : カラム整形形式
- freeze : バージョン固定形式
- json : JavaScript Object Notationによるオブジェクト表記形式
■ legacy
pi@pi2note:~ $ pip list --format=legacy chardet (2.3.0) colorama (0.3.2) ・・・
■ columns
pi@pi2note:~ $ pip list --format=columns Package Version --------------- -------- chardet 2.3.0 colorama 0.3.2 ・・・
■ freeze
pi@pi2note:~ $ pip list --format=freeze chardet==2.3.0 colorama==0.3.2 ・・・
■ json
pi@pi2note:~ $ pip list --format=json [ {"version": "2.3.0", "name": "chardet"}, {"version": "0.3.2", "name": "colorama"}, ・・・ ]
オプション「 -o, –outdated」で更新可能なパッケージを表示します。
オプション「 -u, –uptodate」で最新バージョンが入っているパッケージを表示します
pi@pi2note:~ $ pip list -o --format=columns Package Version Latest Type --------------- ------- ----------- ----- colorama 0.3.2 0.3.7 wheel dnspython 1.12.0 1.15.0 wheel html5lib 0.999 0.999999999 wheel Jinja2 2.7.3 2.8 wheel ndg-httpsclient 0.3.2 0.4.2 sdist numpy 1.8.2 1.11.2 sdist Pillow 2.6.1 3.4.2 sdist pyasn1 0.1.7 0.1.9 wheel Pygments 2.0.1 2.1.3 wheel pyOpenSSL 0.13.1 16.2.0 wheel pyserial 2.6 3.2.1 wheel requests 2.4.3 2.12.1 wheel setuptools 5.5.1 28.8.0 wheel six 1.8.0 1.10.0 wheel Sphinx 1.2.3 1.4.9 wheel spidev 3.0 3.2 sdist urllib3 1.9.1 1.19.1 wheel wheel 0.24.0 0.29.0 wheel
freeze コマンド
「pip freeze」で、インストール済みパッケージをfreeze形式で表示します。
pi@pi2note:~ $ pip freeze alabaster==0.7.9 Babel==2.3.4 chardet==2.3.0 colorama==0.3.2 dnspython==1.12.0 docutils==0.12 gpiozero==1.3.1 ・・・
「pip list –format=freeze」と表示形式は同じですが、pip、setuptools、wheelなどのパッケージ管理ツールは表示されません。
show コマンド
「pip show パッケージ名」で、インストール済みパッケージの情報を表示します。
PythonドキュメントツールであるSphinxパッケージの情報を表示してみます。
pi@pi2note:~ $ pip show Sphinx Name: Sphinx Version: 1.2.3 Summary: Python documentation generator Home-page: http://sphinx-doc.org/ Author: Georg Brandl Author-email: georg@python.org License: BSD Location: /usr/lib/python2.7/dist-packages Requires: Pygments, docutils, Jinja2
search コマンド
「pip search パッケージ名」で、PyPIからパッケージを検索します。
標準ライブラリのjsonより速いsimplejsonを探してみます。
pi@pi2note:~ $ pip search simplejson simplejson (3.10.0) - Simple, fast, extensible JSON encoder/decoder for Python
install コマンド
「pip install パッケージ名」で、パッケージをインストールします。管理者権限が必要なので、sudoを付けます。
標準ライブラリのjsonより速いsimplejsonパッケージをインストールしてみます。
pi@pi2note:~ $ sudo pip install simplejson Collecting simplejson ・・・ Successfully installed simplejson-3.10.0
uninstall コマンド
「pip uninstall パッケージ名」で、パッケージをアンインストールします。管理者権限が必要なので、sudoを付けます。
pi@pi2note:~ $ sudo pip uninstall simplejson Uninstalling simplejson-3.10.0: ・・・ Proceed (y/n)? y Successfully uninstalled simplejson-3.10.0
install upgrade コマンド
「pip install パッケージ名」に、オプション「-U, –upgrade」をつけてパッケージをアップグレードします。管理者権限が必要なので、sudoを付けます。
Sphinxパッケージをアップグレードしてみます。
「pip list -o」で、更新可能なパッケージ1.4.9があることがわかります。
アップグレードすると、1.4.9になりました。
pi@pi2note:~ $ pip list -o |grep Sphinx Sphinx (1.2.3) - Latest: 1.4.9 [wheel] pi@pi2note:~ $ sudo pip install -U Sphinx pi@pi2note:~ $ pip list |grep Sphinx Sphinx (1.4.9)
install requirement コマンド
「pip install パッケージ名」に、オプション「-r, –requirement」とパッケージリスト名を指定すると、パッケージリストをまとめてインストールすることができます。インストールされているパッケージリストは、「pip freeze」コマンドをリダイレクトして作成することができます。
パッケージを別の環境にインストールする場合に使用できます。
pip freeze > freeze.txt pip install -r freeze.txt
Picameraライブラリのインストール
Raspberry Piカメラ用のPythonライブラリ picamera をインストールします。
sudo pip install picamera sudo pip install "picamera[array]"
アップグレードします。関連するパッケージもアップグレードしてくれました。
pi@pi2note:~ $ sudo pip install -U picamera Requirement already up-to-date: picamera in /usr/lib/python2.7/dist-packages
pi@pi2note:~ $ sudo pip install -U "picamera[array]" Requirement already up-to-date: picamera[array] in /usr/lib/python2.7/dist-packages Collecting numpy (from picamera[array]) Successfully built numpy Installing collected packages: numpy ・・・ Successfully installed numpy-1.11.2
最後に
これで、pipツールの使用方法が理解できました。
Pythonのパッケージを集めたサイト「PyPI (Python Package Index)」に、世界中で開発されている豊富なパッケージ(ライブラリ)群があり、目的に応じて使用できるのはPythonの魅力です。
今後、Pythonスクリプト派になりたいと考えています。
私は、8ビットマイクロプロセッサ時代に育った技術者なので、最初にpipという言葉を見たとき、PIP(Peripheral Interchange Program)コマンドを思い出しました。
1980年代初期に、インテル8080/ザイログZ80のマイクロプロセッサ用に開発されたCP/M-80というOSがありました。PIPコマンドは周辺装置間のデータ転送コマンドで、「PIP destination=source」でデータ転送ができました。ファイルだけではなく、スペシャルファイル(CON:、LST:、PRN:など)にも転送できました。
懐かしい思い出です。