PYPIへの登録を10秒でできるようになる方法

Python
スポンサーリンク

pip 使ってますよね

Pythonを使っている人であれば、pip installでライブラリをインストールすることはもはや常識ですね。

pip でインストールできるようにするには?

PYPI にパッケージを登録すれば、pip でインストールできるようになります。パッケージのアップロードのためにはPYPIアカウントが必要になるので、作成しておいてください。

PYPI に登録するには?

twine というライブラリがあり、これを使えば以下のコマンドで簡単にアップロードできます。

twine upload --repository pypi dist/*

これは dist ディレクトリ以下に保存されたパッケージを一括でアップロードするコマンドです。

PYPI 登録用のパッケージを作成するには?

python の setup.py を使って、パッケージを作成することができます。

sdist

ソースコードのパッケージング。インストール時にコンパイルが必要になります。

python3 setup.py sdist

bdist

コンパイル済みバイナリをパッケージのなかに含める方法です。インストール側でビルド環境が不要になるメリットがあり、Windowsでは特に重宝されています。

最近では wheel を使うのがデファクトになっています。以下のコマンドで wheel を作れます。

wheel は pip でインストールできます。wheelをインストールすれば、setup.pyのときにbdist_wheelというコマンドを使えるようになります。

# Python2 用のコンパイル済みバイナリを作成
python2 setup.py bdist_wheel
# Python3 用のコンパイル済みバイナリを作成
python3 setup.py bdist_wheel

Python のパッケージ作成用のプロジェクトの作り方は?

細かいことを置いておいて、雛形を使って一気にパッケージ環境を整えてしまいましょう。そのために、cookiecutterを使うことにします。

cookiecutter とは Python 製のテンプレートジェネレータライブラリで、簡単にテンプレートを作成できます。

pip install cookiecutter

インストールすれば、ターミナルからcookiecutterコマンドが使えるようになります。

テンプレートを用意

cookiecutter で呼び出すテンプレートを用意します。ホームディレクトリ直下に.cookiecuttersディレクトリを作成し、そのディレクトリにテンプレートを置くことにします。具体的には以下のような流れです。

cd ~
mkdir .cookiecutters
cd .cookiecutters
git clone https://github.com/fx-kirin/cookiecutter-pypackage-kani

github からテンプレートをダウンロードします。今回は cookiecutter-pypackage-minimal を元に自分なりにより簡潔にできるようにしたcookiecutter-pypackage-kaniを使うことにします。

これで、cookiecutter コマンドからテンプレートを簡単に呼べるようになりました。

ちなみにですが、cookiecutterでデフォルト値の設定は、テンプレートプロジェクト内のcookiecutter.jsonファイルで変更できます。

requirements.txt を作成

プロジェクト内の必要なライブラリを自動で抜き出してまとめて、必要であれば一括でインストールできるようになるrequirements.txtもこのときに抑えておきましょう。pip freezeコマンドを使えば、簡単に作成できます。

pip freeze > requirements.txt

私おすすめは以下のコマンドです。pipreqspip freezeの改良版で、sedでバージョンの指定をわざと外しています。必要ならあとで指定してください。

pipreqs . --print | sed s/==.*// | sort > requirements.txt

requirements.txtの内容をインストールしたければ、以下のコマンドを実行します。

pip install -r requirements.txt

ただ、今回のcookiecutter-pypackage-kaniでは、setup.pyの中で、自動でrequirements.txtを読み込み、依存パッケージをインストールするようにしています。

これまでの内容をまとめた実行ファイルの作成

以下のバッシュファイルを作成して、PATHを通して実行してください。私は、pypiupload.shと名付けています。

#! /bin/sh
#
pipreqs . --print | sed s/==.*// | sort > requirements.txt
rm dist/*
if [ -f README.md ]; then
    m2r README.md --overwrite
fi
python3 setup.py sdist
twine upload --repository pypi dist/*

10秒で PYPI 登録をしよう

ここまでで10秒でPYPIの登録ができるようになる準備が完了しました。「準備の時間が全然10秒でできてねーじゃねーか」というクレームは受け付けていません。

|19-05-17 10:35:16|zenbook:/tmp/tmp.WbfAmMcRoW
$ cookiecutter cookiecutter-pypackage-kani
author_name [fx-kirin]:
author_email [fx.kirin@gmail.com]:
package_name [package_name]: testkanipackage
package_version [0.1.0]:
package_description []:
package_url []:
readme_pypi_badge [y]:
readme_travis_badge [n]:
readme_travis_url []:

上記のようにcookiecutter cookiecutter-pypackage-kaniコマンドを呼び出し、package_nameだけ設定します。そして、あとはpypiupload.shを呼び出して、アカウント情報を入力すれば完了!

ネットワークの状態にも寄りますが、🔟秒以内のパッケージの作成からアップロードまでできるようになったはずです。

ここまでできるようになれば、PYPIへの登録、自分のパッケージマネジャー化へのハードルはかなり下がったはずです。今回アップロードしたパッケージの削除はPYPIアカウントにログインして行ってください。これで快適なPYPIライフを!

コメント

タイトルとURLをコピーしました