不要な pip install をスキップしてCIの高速化

  • 3
    Like
  • 2
    Comment
More than 1 year has passed since last update.

やりたいこと

TravisCIのテストが遅いので高速化したい。
ログを眺めていると、pip installでけっこう時間がかかっている。特に numpyのインストールが遅い。
また、インストール済みのパッケージを毎回処理しているのも、せっかくキャッシュディレクトリに指定しているのでスキップしたい。

環境

  • TravisCIを使っている
    • python 2.7.9 (現時点)
    • .pip-cache、virtualenv ディレクトリをキャッシュさせている
travis.yml
python:
- 2.7.9
cache:
  apt: true
  directories:
  - "$HOME/.pip-cache/"
  - "$HOME/virtualenv/python2.7.9"
before_install:
- sudo apt-get update
- sudo apt-get install XXX #必要なパッケージインストール
install:
- pip install -r requirements.txt --download-cache $HOME/.pip-cache
# 以下省略

やったこと

pip freeze と比較して差分だけインストール処理が走るように install の項目を変更する

travis.yml
install:
- pip freeze | comm -13 - requirements.txt | grep -v '^#' | xargs pip install --download-cache $HOME/.pip-cache
  • 普通に diff コマンド使おうとしたがMacだと動いたけど、Travis環境では動かなかった bash限定の方法みたい?
    • diff <(pip freeze | sort) <(cat requirements.txt | sort) | grep '^> ' | sed 's/^> //'
    • comm コマンドは今回初めて知った。便利。
  • pip freeze でコメント行が出てくることがあったので、 grep -v '^# を入れている

課題

git リポジトリから tag 指定でインストールしている行が、pip freezeではコミットのハッシュ値が表示されるので、必ず差分になってしまう。

  • requirements.txt
    • -e git://github.com/Example/hoge.git@tag#egg=hoge
  • pip freeze
    • -e git://github.com/Example/hoge.git@ba34106b63048ba3d43140a09bd4f99140609da6#egg=hoge-origin/tag

まぁ、一番遅い numpy がスキップされたからいいかな?と思ってる。