2013 年 1 月の記事一覧です(1 件)

[Python]pipでパッケージのアップデートを一括で行う

昨年12月に家庭内稟議が承認され、MacbookAir2012(13inch)midを購入したのですが、年末年始ばたばたしていてなかなか触ることができず、ここにきてようやくMacbook2007lateからの移行作業に取り掛かっています。

移行作業では、なにはなくとも先ずPythonということで、Python(2.x です。3.xは今年中にとりかかるぜ!)の環境を構築していていたのですが、pipで下記のようなことできないかなって場面が出ていて、調べてました。

  • virtualenv環境にインストールされているパッケージの一括アップデートをしたい
  • pip freezeでパッケージをテキストファイルに書き出す時にバージョン情報を除去したい

この2点ですが、色々調べたらpip(調べたのは1.2.1)単体の機能にはないものの、上記についてはStack Overflow.comに載ってましたので真似してみました。


因みに動作確認した環境はPython 2.7.3、pip 1.2.1です。

$ pip freeze --local | grep -v '^\-e' | cut -d = -f 1  | xargs pip install -U

pipとgrep、cut、xargsを組み合わせる方法です。

--local は、該当するvirtualenv環境にインストールされているパッケージのみ表示させるオプションで、grep -v '^\-e' は -e(editable) 表示されているパッケージを除外する設定、editable表示されているパッケージというのは下記のようなものです。

2013-01-19 16.29.07

正直、今までeditableモードを使用していないので私はこれ以上のことは言えないのですが、マニュアルインストールしたものはアップデートしないようにします(そもそもバージョン表示が無いので上記カットコマンドの意味が無い)そしてcut -d = -f 1 では = でsplitした文字列の1番目(先頭)のパートを表示させてます。

あとはxargsでバージョン情報が除去されたパッケージ名を引数にとって指定したコマンド(pip install -U)を実行させます。すばらしい。

次は、この方法を応用して2番目のやりたかったことを実施してみます。

$ pip freeze --local | grep -v '^\-e' | cut -d = -f 1  > ~/Dropbox/requirements.txt

このようにすることでバージョン情報を除去した一覧が出力されるのでこれを新Macから

$ pip install -r ~/Dropbox/requirements.txt

でその時点での最新版パッケージをインストール出来ると思います。

通常、パッケージのアップデートは慎重に行うものでしょうからこれらの方法はTips的なものでしょうが、今回は移行作業のついでに一括アップデートしたかったので良かったです。
尚、pipの開発版ではlistなるオプションがあってpip list --outdatedとかpip list --uptodateとかを使えば今回やったことなんかが出来そうな気がするんですがどうなんでしょう。

PAGE TOP