ApacheAirflow 1.10.13リリースによって解消されたpipenvのlockファイル生成時issueについてまとめてみた

Apache-Airflow 1.10.13がリリースされました。pipenvを利用している場合に発生するIssueが解決されていたので、Issueの原因とどのように対処されたのかをまとめました。
2020.11.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

Amazon MWAA(Managed Workflow Apache Airflow)がリリースされて、Airflowを業務利用している人にとっては降って現れた選択肢と言えます。

そしてこのエントリー執筆の約12時間程前に Apache Airflow 1.10.13 がリリースされました。そう、1.10.12 は最新ではなくなった。(追従はいつになるのでしょう)

マイナーバージョンアップではあるのですが、pipenvを使っている場合に影響を及ぼす可能性大のfixが含まれています。

pipenv update apache-airflowするだけで気にせず使えるようですが、万が一即時アップデートできない場合の対処も含めて書いてみました。

1.10.12が含んでいた、pipenvに影響するbug

該当のbugの要因は以下のissueによってfixされています。

上記issueとの重複扱いになっていますが、pipenv利用時に出くわしたbugのissueは以下の内容です。

Pipfile.lock更新時に以下のメッセージを見た方はそれなりにいるのではないかと思っています。

ERROR: Could not find a version that matches attrs>=17.3.0,>=17.4.0,>=20.1.0,~=19.3
Tried: 15.0.0, 15.1.0, 15.1.0, 15.2.0, 15.2.0, 16.0.0, 16.0.0, 16.1.0, 16.1.0, 16.2.0, 16.2.0, 16.3.0, 16.3.0, 17.1.0, 17.1.0, 17.2.0, 17.2.0, 17.3.0, 17.3.0, 17.4.0, 17.4.0, 18.1.0, 18.1.0, 18.2.0, 18.2.0, 19.1.0, 19.1.0, 19.2.0, 19.2.0, 19.3.0, 19.3.0, 20.1.0, 20.1.0, 20.2.0, 20.2.0, 20.3.0, 20.3.0

バージョンのマッチングにて、~=19.3が原因で破綻している状態です。19.3以降のマイナーバージョンの更新は受付つつも、メジャーバージョンの更新を受け付けないという点で、>=17.3.0,>=17.4.0,>=20.1.0と矛盾した形です。

原因はsetup.pyでした。

    'attrs~=19.3',
    'cached_property~=1.5',
    'cattrs~=1.0',

長らくlockファイル更新でエラーを吐く原因になっていました。

対処方法として取られた手段

1.10.13では依存関係が修正されています。

    'attrs>=20.0, <21.0',
    'cached_property~=1.5',
    # cattrs >= 1.1.0 dropped support for Python 3.6
    'cattrs>=1.0, <1.1.0;python_version<="3.6"',
    'cattrs>=1.0, <2.0;python_version>"3.6"',

Airflowを1.10.13に更新することで、lockfileのエラーが解消するということです。

pipenv update apache-airflow

バージョンアップできない場合の対策

とはいえ、環境によっては更新できない可能性もあります。その場合はlock自体をskipしましょう。

pipenv install --skip-lock

これでも失敗する場合は、Pipfileが更新されていることを確認した上で、Pipfile.lockをcheckoutするという手もあります。ただし、syncがまともに使えなくなるデメリットが存在します。

あとがき

lockファイルが正常更新できないおかげで毎回installを行う羽目になる他、他のライブラリの追加や削除も相当に手間が懸かっていました。今後は大分楽になりそうです。

参考リンク