pythonの自作パッケージをもっと自由に使いたいのです~

今日の記事はどんな人向け?

pythonで作った自作モジュールを
ローカル環境で色んなところで使いたい方向けです~


自作モジュールをどこでも使いたい!

pythonのパッケージって便利ですよね~
私もそこら中でpipしてimportしながらプログラミングしているわけですが、
あるとき思ったのですよ…

自分で作ったパッケージってimport出来ないのかな?

今までcacaponは後で使いそうな機能は
こんな感じで分けてたんですけど

capopack1
|-__init__.py
|-moduleA.py
|-moduleB.py
etc...
自分の階層にあるパッケージはこれでよいのですが、
それ以外で使いたいとき、パッケージ化の仕方が分からなかったので、
使うところにコピーしてそこからimportしていくっていう
前時代でも使っていたかどうかわからないやり方でやっていたのです~

しかし、これはめんどくさい…
ミスも出そう...
ディレクトリのデータ量もでかくなる…これはまずい!
という訳で、何か方法がないかなと調べたところ…

なんと、pythonistaならご用達であろうpip コマンドで
自作パッケージを使えるようにできるみたいです!

本当はPyPIにアップロードして誰でも使えるようにっていうのも
出来るようなのですが、cacaponは今の所ローカルで使えれば満足なので、
今回は、自作パッケージをローカル環境ならどこでも使える方法
書いていきたいと思います~


pipで使えるパッケージを準備するのです!

まずは、元になるパッケージを作らないとですね~
使うディレクトリにそのパッケージがあるのでしたら
パッケージの中に__init__.pyを置いて、

from XX import OO

ってやれば使えますけど、pipを使ったパッケージの場合は
もう一手間いるみたいなんです。

それは、パッケージの構造を見ると分かるかと思います~

|- パッケージ名
|   |-__init__.py
|   --モジュール名.py
-- setup.py

大体同じですけど、setup.pyというのがありますね~
ココがポイントになります~
setup.pyはpipのメタ情報を記載するファイルになりまして、
ここの記載を元に、pipがパッケージを登録してくれます。

setup.pyのファイルはこんな感じでつくりました~
(参考リンクを元に、cacaponがローカルで使う必要最低限まで減らしました~)

import setuptools
setuptools.setup( name="capopacks", # これがパッケージ名になります~ version="0.0.1", packages=['capopacks'], # moduleが入っているパッケージを選択してください~ )

ここまで出来たら、あとは登録して使うだけですよ~


パッケージを登録して使ってみましょ♪

では、登録してみましょう~

作ったパッケージのsetup.pyがある階層まで行き、
下記コマンドを打ちます。
pip install .

以下のように出たら成功です~

Processing c:\users\cacapon\desktop\workspace\capopacks
Installing collected packages: capopacks
  Running setup.py install for capopacks ... done
Successfully installed capopacks-0.0.1

ここまでできれば、他のパッケージと同じように
どこからでも使えるようになります♪

from capopacks.XXX import OOO みたいな形で使っていきましょう♪


パッケージを更新したい!そんな時は??

しかし、使っている内に、新しい機能増やしたい!
ということもあるかと思います~

そんな時もpip install .をすれば、更新してくれるようです~
ただ、このままだと分からなくなるので、
setup.pyのversionは毎回上げるようにしましょう~

(自動で上げたりとかはできないのかな…要調査です~)


もうこの自作パッケージいらないかな…そんな時は?

いらなくなったパッケージは pip uninstall <パッケージ名>
で削除できるのですが、これは自作パッケージでも同じです~

不要になったらアンインストールしちゃいましょう~


いかがでしたでしょうか?
今回のやり方でcacaponはより自由な開発方法が分かった気がします~
今はローカルで満足してますが、
いつかcacaponがこれはみんなに使ってほしいというパッケージが出来たら
PyPIに公開したりして、使ってもらいたいですね♪

参考リンク

setup.pyの書き方を参考にしました~
packaging.python.org