ColabだけでPyPIにPythonパッケージを登録する

相変わらずドバイで書いています。先日PythonでClumpinessを計算するclumpiというパッケージを作ったけど、やっぱりPyPIに登録すべきだと思い始めた。ということでやってみる。

ここに書いてあるのは、既にパッケージをGitHubに登録できていて、pip install git+https://~でパッケージのインストールから正しい動作までできることを確認済みとしての話です。

Colab上のpipreqsでPyPI登録用のrequirements.txtを作る

地味に面倒なのがrequirements.txtの作成。今回のclumpiはどうせnumpyとpandasしか使ってないけど練習のためやってみる。ローカルで色々やりたくないんでColabのscratchpad上でやる。

Colabで直接的にファイルを読めるよう、必要なパッケージ(今回はclumpi)をGoogle Driveに突っ込んでおく(GitHubでバージョン管理しているから本当はやりたくない)。そして、必要なrequirementsを整理してくれるpipreqsを入れる。pipreqsではrequirements.txtを作りたい対象となる.pyファイルそれ自体やパッケージのディレクトリを指定する。

!pip install pipreqs

そしてpipreqsをGoogle Drive上のディレクトリにあてる。

pipreqs /content/drive/MyDrive/clumpi

ちなみに僕みたいにGoogle Driveじゃなくて既にGitHubに上がってるrepoから直接作りたい場合には、一旦そのパッケージをpipでインストールしてから、pip showでインストール先を調べて、そこにpipreqsをあてればいい。

!pip install git+https://github.com/jniimi/clumpi.git
!pip show clumpi

/usr/local/lib/python3.10/dist-packagesにclumpiが存在していることがわかったので、ここにpipreqsをかける。

!pipreqs /usr/local/lib/python3.10/dist-packages/clumpi

僕はすでにrequirements.txtが作ってあったので上書きするために–forceかけてます。

ということで中身を見てみる。

!cat /usr/local/lib/python3.10/dist-packages/clumpi/requirements.txt

まあそうでしょうね。もし個別にバージョンの修正がしたければこいつを直接いじればいい。あとはGoogle Drive使ってないならこいつをダウンロードしてローカルのパッケージのディレクトリに突っ込む。ただ/usr/localはファイルツリーに出てこないし、何よりGUI操作はだるいのでダウンロード用のコードも書いておく。

from google.colab import files
f = '/usr/local/lib/python3.10/dist-packages/clumpi/requirements.txt'
files.download(f) 

これで自動的にダウンロードが開始される。まあ本当はGoogle Drive上に置くとかでいいんだけど。

ビルドするまで

次にビルドまで進める。Colabにはwheelパッケージが初めから入っているので、そのまま行く。パッケージのディレクトリまで移動してsetup.pyを走らせる。この程度のパッケージなら一瞬で終わり、clumpiの中にdistフォルダができる。

%cd /content/drive/MyDrive/clumpi/
!python setup.py sdist

twineで登録

PyPI(本番環境、テスト環境ともに)のユーザー登録を済ませておく。そしてともかくtwineを入れておく。PyPIへのアップロードにあたっては普通ここで.pypircを作ることになるけど、Colab上あるいはGoogle Drive上に.pypircを置くのは(セキュリティとしても作業工程としても)嫌なのでそのまま突っ切る。

%cd /content/drive/MyDrive/clumpi/
!twine upload -u USER_NAME -p YOUR_PASSWORD --repository testpypi dist/*

一瞬で終わる。吐き出されたURLからデプロイを確認する。

諸々OKなら本番環境にサブミットする。

%cd /content/drive/MyDrive/clumpi/
!twine upload -u USER_NAME -p YOUR_PASSWORD --repository pypi dist/*

完了。最後にランタイムを一旦吹き飛ばしてからpipでちゃんとインストールできるか確認しておしまい。

!pip install clumpi

clumpi 0.0.1 – PyPI https://pypi.org/project/clumpi/0.0.1/