自作パッケージをconda-forgeに登録してみた
3行でまとめると
- 自作PyPIパッケージをconda-forgeに登録してみました
-
grayskull
によるmeta.yaml
自動生成機能が神 - パッケージ名に大文字があると小文字に変換されてしまうので注意
はじめに
これまで自作パッケージをPyPIやBioCondaに登録したことはありましたが、conda-forgeへはまだ経験がありませんでした。
ちょうど最近conda-forgeに提出できそうなパッケージを作ったので、試してみました。
WindowsとPOSIXのパスを変換するシンプルなPythonモジュールです。
conda-forgeとは
condaでインストールできるパッケージを集めたコミュニティ主体のリポジトリです。
公開されているパッケージ数が18,444 (2022-06-27現在) と、condaのなかでもっとも巨大なリポジトリのひとつとなっています。
ガイドライン
おおよそ以下の登録手順に従いました。(2022年6月閲覧)
grayskull
のインストール
ガイドラインにしたがってgrayskull
をインストールします。
どうやら自動でmeta.yaml
を生成してくれるツールのようです。
conda create -y -n grayskull
conda install -y -n grayskull -c conda-forge grayskull
conda activate grayskull
meta.yaml
を生成
grayskullで以下のコマンドを打つと、{パッケージ名}/meta.yaml
(今回はwslPath/meta.yaml
)が作られます。
grayskull pypi --strict-conda-forge wslPath
staged-recipes
をフォークし、meta.yamlを入れる
こちらのリポジトリをフォークします。
staged-recipes/recipes/{パッケージ名}
のディレクトリを作り、そこに先ほど生成したmeta.yaml
をコピーします。
git clone https://github.com/akikuno/staged-recipes.git
mkdir -p staged-recipes/recipes/wslPath/
cp wslPath/meta.yaml staged-recipes/recipes/wslPath/
そののち、変更をcommitします。(VScodeのGUIでやってしまったのでコマンドは割愛します。)
Pull requestを送る
以下のフォークしたリポジトリを開くと、This branch is 1 commit ahead of conda-forge:main.
となっています。
1 commit ahead
をクリックしてView pull request
を押すとPull requestを送ることができます。
そうするとフォークもと(conda-forge)のPull requests画面に移行しまして、いよいよ登録作業が始まります。
いろいろと細かい注意事項が書いてありますが、
- Pull requestのタイトルを意味のあるものにする
@conda-forge/help-python
などで特定のコミュニティにレビューを依頼する
の2点に注意すれば大丈夫でした。
念のためチェックリストはすべて埋めました。
@conda-forge/help-python
はどうやら自動チェックが終わった後にやるべきだったようです。
また、@conda-forge/help-python
と@conda-forge/staged-recipes
の両方を使っている方もいました。
Mergeを待つ
あとはマージされるのを座して待ちます。
今回は金曜日の正午にレビューを依頼して、土曜日の深夜にマージされました。
conda-forgeコミュニティの迅速な対応に深謝いたします。
結果
無事、conda-forgeに登録することができました。
注意点
パッケージ名の大文字が小文字になる
本家コマンドはwslpath
であり、さすがに丸かぶりは避けたかったのでwslPath
とcamelCaseにしました。
PyPIではwslPath
のまま表記されたのですが、conda-forgeではwslpath
と小文字となってしまいました。
ちなみにconda install -c conda-forge wslPath
とcamelCaseにしてもインストールできました。
BioCondaとの違い
- BioCondaは登録時にパッケージについて簡単な説明を付ける必要がありましたが、conda-forgeは必要ありませんでした。
PyPIパッケージを更新した際にBioCondaはPyPIに同期して全自動で更新作業をしてくれます。一方でconda-forgeは@conda-forge-admin,please add bot automerge
というタイトルをつけてPRをマージする必要があるみたいです。
(追記: 2024-09-01)
- PyPIパッケージが更新されると、BioCondaと同様に全自動で更新作業をしてくれるようになっていました。 BioCondaとは違って、Mergeには権利者の許可が必要ではなく、BotがReviewをしたら自分自身でMergeを行う必要があります。簡単ですが、多少の不安はあります😅
パッケージのアップデート (追記:2023-08-10)
- conda-forgeでのパッケージのアップデートは、conda-forgeにパッケージを登録した際に作られる
{package名}-feedstock
に変更を加えるようです- 公式のワークフローはこちら
- 今回の例でパッケージのアップデートを行うには、以下の手順を踏みます
# ghコマンドのインストールと認証を済ませておきます
# wslpath-feedstockをforkします
gh repo fork conda-forge/wslpath-feedstock
# wslpath-feedstockを同期します
gh repo sync akikuno/wslpath-feedstock -b main
# wslpath-feedstockをクローンします
git clone https://github.com/akikuno/wslpath-feedstock.git`
# 既存のmeta.yamlを最新のmeta.yamlに置き換えます
cp -f wslPath/meta.yaml wslpath-feedstock/recipes/wslPath/
# 変更をコミットします
cd wslpath-feedstock
git checkout -b update-wslpath
git add recipes/wslPath/meta.yaml
git commit -m "Update wslPath"
git push origin update-wslpath
# あとはhttps://github.com/akikuno/wslpath-feedstockからプルリクエストを送ればOK
おわりに
grayskull
でmeta.yaml
を自動生成できるのは目からウロコでした。自動生成されたファイルについて手直しがまったく必要なかったので、登録のハードルが劇的に下がりました。別の機会にBioCondaに登録するときにも使おうと思います。
分野によっては多言語のパッケージを組み合わせて利用することが多く、複数のパッケージマネージャーを使う必要があることがあります。condaは多言語に対応しているので、condaでパッケージを登録しておくとcondaだけで環境構築が完結できることが大きな利点です。
PyPIに登録済みのパッケージであれば想像よりもはるかに簡単にcondaに登録できるので、ぜひトライしてみてください。
Discussion