[Python]pipの使い方
pipとは、Pythonにおけるパッケージ管理システムです。easy_installというツールもあるのですが、pipはこのeasy_installを置き換えるものとして開発されています。rubyのgem、perlのcpan的な位置づけです。
同じパッケージ管理ツールとしてsetuptools置き換えのdistributeというものもあるのですが、こちらはsetuptools全体を置き換えるものとして開発されており、pipはsetuptoolsの一部であるeasy_installを置き換える形です。
なお、現在のpipのバージョンは0.8.2で、このエントリはこのバージョンを使っています。
なにかおかしい点があれば、ご指摘ください。 > 識者の方々
pipのinstall
まずはeasy_installが必要です。これはsetuptoolsに入っています。portinstallやapt-get yeahやyum installなどでsetuptoolsを入れましょう。(もちろんdistributeでも構いません)
その後、pipをインストールします。
% easy_install pip
help
最初はhelpの出し方です。
% pip help # 全体的なhelpを表示
% pip help install # installに関するhelpを表示
% pip help freeze # freezeに関するhelpを表示
pypiを検索
pipは Python Package Index (pypi) にあるパッケージを検索することができます。それにはsearchを使います。
% pip search pycrypto
pycryptopp - Python wrappers for a few algorithms from the Crypto++ library
pycrypto - Cryptographic modules for Python.
INSTALLED: 2.3 (latest)
yawPyCrypto - yawPyCrypto wrapper library for PyCrypto
INSTALLEDと出ているように、すでにインストール済みのパッケージはその旨表示されます。
現在インストールされているパッケージを表示
freezeを使います。
% pip freeze
Cheetah==2.4.4
Jinja2==2.5.5
Markdown==2.0.3
MarkupSafe==0.11
pycrypto==2.3
freezeはファイルに標準出力で書き出して、あとでinstallやbundleに使えます。これに関しては後述します。
ちなみにvirtualenv環境では
virtualenv環境では-l(–local)を使うことで、global環境のパッケージは使われず、virtualenv環境でのみインストールされているパッケージのリストを得ることができます。–no-site-packagesを使ってvirtualenv環境を作ればいいんですけど。
% pip freeze -l
インストールする
installを使います。
% sudo pip install pycrypto
freezeしたパッケージを自動的にインストール
freezeで書き出しておいたパッケージリストを全部インストールします。書き出したパッケージリストは単なるテキストファイルなので、簡単に編集できます。依存性があるものも勝手にインストールされるので、必要な分だけ残しておけば大丈夫です。
% pip freeze > packages_ubuntu.txt
(必要ならばファイルを編集)
% pip install -r packages_ubuntu.txt
ちなみに、pip installを叩いた時点での最新版を入れたい場合は、バージョンを抜けば良いです。
MarkupSafe
pycrypto
proxyを設定する
% pip install pycrypto --proxy=user@proxy.example.jp:8080
Mirrorを使いたい
pypiが落ちている時や、もっと近くの場所から取ってきたい場合は–use-mirrorを使います。 -M でも大丈夫です。
% pip install pycrypto --use-mirror
あるいは、以下の環境変数を設定しておけば、-Mをつけなくても勝手にmirrorを使ってくれます。
% export PIP_USE_MIRRORS=true
Mirrorの場所は自動的に取得してきますが、–mirrorsを使って上書きもできます。
なお、Mirrorに関してはPEP 381に記載されています。http://www.python.org/dev/peps/pep-0381/
ユーザーディレクトリにインストールする
rootがない環境などでは、ユーザディレクトリにインストールすることしかできません。そのためには、–userをつけます。
% pip install pycrypto --user
このように –user をつけてインストールすると、 ~/.local/ 以下に置かれます。~/.local/bin などにPATHを通しておかないとあれーってことになりますので、ご注意を。
なお、これをするぐらいなら、後述のVirtualEnv環境を作ったほうがいいと思われます。
特定のバージョンをインストールする
特定のバージョンをインストールすこともできます。
% pip install Django==1.1.1
freezeで書き出したパッケージファイルはこの形式のため、freezeの名のとおり、書き出されたときのバージョンがインストールされることに注意してください。
バージョンの指定方法はわりと柔軟でこんなこともできます。
% pip install 'Markdown<2.0'
この場合、すでに2.0以上のバージョンがインストールされている場合は、それをuninstallして<2.0を満たすバージョンをインストールしてくれます。
また、
% pip install 'Markdown>2.0,<2.0.3'
とかもできます。
Subversion/git/mercurial/bazaarから直接インストールする
レポジトリから直接インストールすることもできます。
% pip install -e svn+http://myrepo/svn/MyApp#egg=MyApp # subversion
% pip install -e git+http://myrepo/svn/MyApp#egg=MyApp # git
% pip install -e hg+http://myrepo/svn/MyApp#egg=MyApp # mercurial
% pip install -e bzr+http://myrepo/svn/MyApp#egg=MyApp # bazaar
% pip install -e bzr+http://myrepo/svn/MyApp#egg=MyApp@275 # revision 275からインストール
インストールせずに試してみる
なにがダウンロードされてどうなるのか、を事前に確かめたいことがあります。そのためには、 –no-install をつけます。
% pip install pycrypto --no-install
なお、 –no-installは手でパッチを当てたい場合にも使えます。–no-installをすると、VirtualEnvディレクトリのbuild以下に展開されます。ここで変更を加えた後、
% pip install pycrypto --no-download
とすると、インストールされます。–no-downloadを付けないと、もう一度downloadして変更が失われてしまうので注意です。
もう一度インストールしたい
この場合、-I (–ignore-installed)を使います。
% pip install pycrypto -I
アップグレードしたい
一度インストールしたパッケージをアップグレードする場合には、-U (–upgrade)を使います。
% pip install pycrypto -U
virtualenv環境にインストールする
後述するように、activateしてvirtualenv環境でpipを実行しても良いのですが、直接パッケージを入れ込むこともできます。
% pip install -E pip_test_env/ pycrypto
uninstallする
uninstallを使います。
% pip uninstall pycrypto
ちなみに、 -y をつけると、すべての問いに yes と答えます。たまに有用ですが、気をつけて使ってください。
bundleする
bundleとは、パッケージを一つに固めたものです。これを使うことにより、ネットワークがない場所でもパッケージをインストールすることができます。
% pip freeze > packages.txt
% pip bundle -r packages.txt rudi.pybundle # bundle作成
% pip install rudi.pybundle # bundleからインストール
これでfreezeで書き出したパッケージを固めた、 rudi.pybundle という名前のファイルができます。ちなみに、この実体はzipファイルです。
あ、.pybundleと名前につけておかないとあとでエラーになるようです。
virtualenvとの組み合わせ
virtualenvは、OSの環境と切り離された仮想的な環境を作ることができます。virtualenv環境にpipを使ってパッケージをインストールする事で、OS環境を破壊することなく環境が構築できます。
インストールにはこうします。
% pip install virtualenv
virtualenv環境の判定
virtualenv環境でのみpipを動かしたい場合、この環境変数を設定します。
% export PIP_REQUIRE_VIRTUALENV=true
こうしておくとvirtualenv環境ではない場合、”Could not find an activated virtualenv (required).”と言われて怒られます。
virtualenv環境であればそっちを、なければglobalを使うようにするためには、
% export PIP_RESPECT_VIRTUALENV=true
とします。両方共trueになっている場合は、 REQUIRE の方が優先されます。(つまり、virtualenv環境でないと怒られる)
virtualenv環境での使い方
まずはvirtualenv環境を作成します。おっと、–userとかでvirtualenvをインストールした場合、ちゃんとPATHを通しておいてくださいね。
% virtualenv --no-site-packages --distribute pip_test_env
このコマンドで pip_test_envというディレクトリができます。 –no-site-packagesオプションはglobalなパッケージを使わなくする設定です。
また、 –distributeオプションはsetuptoolsの代わりにdistributeを使うオプションです。いちいち打つのがめんどくさい人は、
% export VIRTUALENV_USE_DISTRIBUTE=true
と環境変数を設定してください。
なお、後述のvirtualenvwrapperを使う場合は、別のコマンドになりますのでご注意を。
では、virtualenv環境に入りましょう。
% cd pip_test_env
% . pip_test_env/bin/activate # 最初に . を打ってます
(pip_test_env)% # 成功
ちなみに、 ”.” は shellにbuiltinされているコマンドで、指定したファイルの環境を現在のshellの環境に組み込みます。詳しくは man zshbuiltins で。あるいは、 source コマンドを使っても構いません。
pipでインストール
pipはすでにvirtualenv環境に用意されており、さらにPATHも通っています。
% which pip
/home/hoge/tmp/pip_test_env/bin/pip
% pip install sphinx
(snip)
% which sphinx-build
/home/hoge/tmp/pip_test_env/bin/sphinx-build
さて、パッケージを普通にインストールしてもいいのですが、ここでbundleの出番です。bundleしておいたファイルをここでインストールすれば、元の環境を変更することなく、簡単に開発環境を用意できるというわけです。もちろんバージョンも同じです。
% source pip_test_env/bin/activate
(pip_test_env)% pip install rudi.pybundle
virtualenv環境からの脱出
単に deactivate と打てばいいです。deactivateは activateの中で定義されています。
(pip_test_env)% deactivate
%
virtualenvwrapperとの連携
virtualenvwrapper を使うと、virtualenv環境を複数使い分けるときに便利です。
簡単に書くと、 * mkvirutualenvでvirtualenv環境を作成 * workon (名前)で任意のvirtualenv環境に切り替え です。
詳しくは上記リンクを参照してください。
buildoutとの連携
gp.recipe.pip を参照。
pipの制限
- .eggからのインストールはできません
- 複数バージョンのパッケージを管理できません * その場合はvirtualenvを使って環境を切り変えてください
- Setuptools extras (package[test]など)は理解できません
- setup.pyをdistutils や setuptools 用として強烈にカスタマイズしていると理解できないことがあります