Edited at

【Python】自作モジュールをパッケージ化して配布する

More than 3 years have passed since last update.


なにこれ

チームで開発してる時に、自作ツールをほかの人に使ってもらいたかったり、プロジェクトに自作モジュールを組み込みたいみたいなケースありますよね。そういう時、「パッケージ化」が便利っす。

プライベートリポジトリにおいてこっそりパッケージをホスティングする方法はあとで書きます。

(追記)

ごめんこれうごかんかも


準備


プロジェクトの構造

これからの説明は以下の様な構造を想定して書きます。

requirements関係は、pip freezeとかで吐き出してください。

プロジェクト名は「uhouhoapp」とします


  • setup.py

  • uhouhoapp/


    • main.py

    • sub.py

    • aaaa.py



  • requirements.txt

  • test-requirements.txt


手順


main.pyの例


def main():
print('HelloWorld')


setup.pyの用意


#!/usr/bin/env python
# -*- coding: utf-8 -*-

from setuptools import setup, find_packages

def _load_requires_from_file(filepath):
return [pkg_name.rstrip('\r\n') for pkg_name in open(filepath).readlines()]

def _install_requires():
requires = _load_requires_from_file('requirements.txt')
return requires

def _test_requires():
test_requires = _load_requires_from_file('test-requirements.txt')
return test_requires

def _packages():
return find_packages(
exclude=[
'*.tests',
'*.tests.*',
'tests.*',
'tests',
'*.yaml'
],
)

if __name__ == '__main__':
description = ''
setup(
name='uhouhoapp',
version='1.0.0',
description=description,
author='UhoUho Inc.',
author_email='dev@uhouho.com',
classifiers=[
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Development Status :: 3 - Alpha',
'License :: Confidencial',
'Intended Audience :: Developers',
'Natural Language :: English',
'Operating System :: POSIX'
],
packages=_packages(),
install_requires=_install_requires(),
tests_require=_test_requires(),
test_suite='nose.collector',
include_package_data=True,
zip_safe=False,
entry_points="""
[console_scripts]
uhouhoapp = uhouhoapp.main:main
"""
,
)


つかうとき

以下のコマンドを叩くと、おれおれモジュールが登録されます。


$ pip install -e .
Obtaining file:///Users/hiroyuki/test22
Installing collected packages: uhouhoapp
Running setup.py develop for uhouhoapp
Successfully installed uhouhoapp-1.0.0


コマンドとして実行

実行させたいときは、以下のようなかんじ。

別にコマンドいいやって人は、setup.pyのconsole_scripts部分をけそう。

$ uhouhoapp

HelloWorld