LoginSignup
1
1

More than 5 years have passed since last update.

Travis CIのpipをアップグレードする

Posted at

皆様、明けましておめでとうございます。今年もどうかよろしくお願いいたします。

さて、2014年の元日にpip 1.5 がリリースされました。

このバージョンには、今までのバージョンと互換性のない変更点がいくつかあるために、新春早々からその対応をしていた方もいらっしゃるようで、お疲れ様でした。

現時点で、Travis CI の Python 環境にインストールされている pip のバージョンは 1.4.1 ですが、1.5 にアップグレードされるのは時間の問題です。

どうせアップグレードされるのだから先にアップグレードしてしまった方が楽だろう、ということで考えてみたのが下記の手順です。

事前にdevel相当のブランチからfix-requrementsブランチを切ったりするのは、お好みでどうぞ。

1. .travis.ymlbefore_script:エントリにpip freezeを追加する

before_script:エントリは、テスト本体が実行されるscript:エントリの直前に実行されるエントリです。
このエントリにpip freezeを追加します。

.travis.yml
before_script:
    - "pip freeze"

もし、requirements.txtが存在するようでしたら、pip freeze -r requirements.txtと記述すると、出力結果が少し見やすくなります。

ただし、pip freezepip installとは違い、-rで複数のファイルを指定すると、最後に指定したファイルしか有効になりませんのでご注意ください。

3. 編集した .travis.ymlを commit して Travis CI でテストを走らせる。

これは、デフォルトのpipでテストをパスした時の環境をビルドログに記録するのが目的ですので、ここで一度 commit しておくことを強くオススメします。

4. .travis.ymlbefore_install:エントリを編集する

before_install:は、pip install等を実行するinstall:エントリの直前に実行されるエントリです。

このエントリに下記の行を追加します。

.travis.yml
before_install:
    - "easy_install --version"
    - "pip freeze"
    - "travis_retry pip install -U setuptools"
    - "cd `mktemp -d`"
    - "travis_retry wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py"
    - "travis_retry python get-pip.py"
    - "cd $OLDPWD"
    - "pip --version"
    - "easy_install --version"

以下、箇条書きで説明します。

  • デフォルトの pip でpip --versionを実行しないのは、Travis CI の Python 環境では何もしなくても python と pip のバージョンがビルドログに出力されるからです。
  • 行2: pip freezeでは setuptools のバージョンは表示されないので、easy_install --versionを実行します。
  • 行3: このpip freezepip installの前に実行されますので、-rオプションの追加は無意味です。
  • 行4: travis_retryは引数のコマンドを三回リトライするコマンドです。setuptoolsはここでアップグレードしますが、pipはpip installではなくget-pip.pyを使ってアップグレードすることになっています。
  • 行5: get-pip.pyをダウンロードするディレクトリを作成します。
  • 行6: get-pip.pyをダウンロードします。
  • 行7: get-pip.pyを実行します。pipの本体がここでダウンロードされますので、travis_retryで実行します。
  • 行8: ビルドディレクトリに戻ります。一時ディレクトリはビルド終了時に破棄されるはずなので、ここでは削除しません。
  • 行9,10: pip と setuptools のインストール後にバージョンを確認しているのは、アップグレードした最新版が間違いなく使われていることを問題発生時に確認できるようにするためです。

5. pip の変更点を確認して必要があれば修正する

pip の変更点については pip の Changelog をご覧ください。

6. 変更を commit して Travis CI でテストを走らせる。

テストが無事パスすれば終了です。

最後に

以上の変更で、pip と setuptools の(開発版を除いた)最新リリースが常に適用されるようになりました。

同時に、インストールされたモジュールのバージョンの一覧がビルドログに残るようになりましたので、テストでエラーが発生した際にpip installのログを調べるよりも簡単に切り分けができるようになるはずです。

余談ですが、Ruby のプロジェクトではbefore_script: "bundle show"するのはよくあることだそうですが、Python のプロジェクトで.travis.ymlpip freezepip listが含まれていた事例は見たことがありません。(ちなみに、PyPIでPython 3.Xをサポートしている3585モジュール中106ファイルの.travis.ymlで0件)

Travis CI は、サイトが Ruby で構築されているサービスのようですので、ひょっとすると Pythonista には敬遠されているのかもしれませんね。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1