Posted at

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

More than 3 years have 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 がスキップされたからいいかな?と思ってる。