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 件のコメント:
コメントを投稿