Pythonで作成したパッケージを別環境で使いたい場合はコピーすれば使えるが、いちいちコピーするのはやや面倒。作成したパッケージをpipでインストールできるようにしておくと、別環境への導入が簡単になる。もちろん、GitHubなどで公開して他人に使ってもらうときにもpipでインストールできたほうが使ってもらやすい。今回はパッケージをpipでインストールできるようにする方法をまとめる。
環境
pipでのローカルパッケージのインストールについて
pipはPyPl(リポジトリ)からパッケージなどをインストールするときに使われ、次のようなコマンドでパッケージなどをインストールできる。
pipではPyPlの代わりにローカルにあるモジュールもインストール可能で、必要なファイルがそろったパッケージのディレクトリで以下のコマンドを実行すると、PyPlのパッケージと同様にローカルのパッケージがインストールされる。今回はこのコマンドでインストールできるようにする。
パッケージのファイル構成
pipでインストールするにはいくつかファイルを用意する必要がある。例としてjsweetsというディレクトリを作成し、その配下に以下のような構成でファイルを作成する。
jsweetsディレクトリ配下のanmitsu.pyとdorayaki.pyがパッケージのモジュールで、setup.pyとrequirements.txtはインストールに使うファイル。
from .__version__ import __version__ from jsweets import dorayaki from jsweets import anmitsu
VERSION = (0, 0, 1) __version__ = '.'.join(map(str, VERSION))
import numpy as np def anmitsu1(): print('anmitsu1') def anmitsu2(): print('anmitsu2') def anmitsu_rand(): print('anmitsu ' + str(np.random.randint(1, 11)))
import numpy as np def dorayaki1(): print('dorayaki1') def dorayaki2(): print('dorayaki2') def dorayaki_rand(): print('dorayaki ' + str(np.random.randint(1, 11)))
setup.pyでインストールに必要な情報を設定する。find_packagesを使うと自動でパッケージを見つけてくれる。
import os from setuptools import setup, find_packages # パッケージ名 NAME = 'jsweets' # バージョンの読み込み setup_dir = os.path.abspath(os.path.dirname(__file__)) ver = {} with open(os.path.join(setup_dir, NAME, '__version__.py')) as f: exec(f.read(), ver) def _requires_from_file(filename): return open(filename).read().splitlines() setup( # パッケージ名 name=NAME, # パッケージの説明 description='Japanese sweets', # バージョン version=ver.get('__version__'), # インストールするパッケージ packages=find_packages(), # ソースファル以外のパッケージに含めるファイル package_data={NAME: ['readme.txt']}, include_package_data=True, # 必要なPythonのバージョン python_requires='>=3.7', # 必要なライブラリなど install_requires=_requires_from_file('requirements.txt'), )
numpy
パッケージのインストール
ファイルの準備ができたらpipでインストールしてみる。開発中にインストールを試したい場合は以下のように開発者モードでインストールすると便利。この場合、パッケージは通常pipでインストールされる場所にはインストールされず、ローカルにあるパッケージファイルが参照されるので、ローカルで加えた変更が再インストールせずに反映される。
アンインストールは以下コマンドでできる。アンインストールに失敗することがあったが、その場合はjsweets.egg-infoディレクトリを削除することでアンインストールできた。
通常のインストールは以下コマンド。
インストールしたパッケージを使ってみる。
0 件のコメント:
コメントを投稿