読者です 読者をやめる 読者になる 読者になる

Studio3104::BLOG.new

uninitialized constant Studio3104 (NameError)

自作ライブラリを GitHub に置いて、そこから pip インストール出来るようにするまで

Rubyist でしたが Python もはじめました。
パーフェクト PythonKindle で購入しましたが、検索出来ないし文字を選択できないのでコピペ出来なくて大変不便なので、物理版を購入すれば良かったと後悔しております。

話が逸れました。本題に。
これを書いている現在、当方 Python 歴数日 なので温かいアドバイスなどあれば是非ともよろしくお願いいたしますm(__)m

雛形を作る

paster create を実行し、プロジェクトの設定を対話的に入力していきます。

$ pip install python_boilerplate_template
$ paster create

こんな感じになる。

$ tree -C hoge
hoge
├── hoge
│   └── __init__.py
├── hoge.egg-info
│   ├── PKG-INFO
│   ├── SOURCES.txt
│   ├── dependency_links.txt
│   ├── entry_points.txt
│   ├── not-zip-safe
│   └── top_level.txt
├── setup.cfg
└── setup.py

2 directories, 9 files

実装

コードを書きます。

依存ライブラリを書いておく

requirements.txt に依存ライブラリを書いていくのが普通っぽい。
んだけど、上述の雛形の作成方法だと requirements.txt は作られないし、作成された setup.py からは当然参照されなくて不便。
なので、setup.py から requirements.txt を参照させるようにして、作成したライブラリがインストールされるときにちゃんと依存ライブラリも一緒にインストールされるようにする。

--- a/setup.py
+++ b/setup.py
@@ -1,8 +1,14 @@
 from setuptools import setup, find_packages
-import sys, os
+from pip.req import parse_requirements
+import sys, os, pip

 version = '0.1'

+requirements = [
+    str(requirement.req)
+    for requirement in parse_requirements('requirements.txt', session = pip.download.PipSession())
+]
+
 setup(name='hoge',
       version=version,
       description="test project",
@@ -17,9 +23,7 @@ setup(name='hoge',
       packages=find_packages(exclude=['ez_setup', 'examples', 'tests']),
       include_package_data=True,
       zip_safe=False,
-      install_requires=[
-          # -*- Extra requirements: -*-
-      ],
+      install_requires=requirements,
       entry_points="""
       # -*- Entry points: -*-
       """,

あとは

普通に実装が終わったら普通に GitHub にコードを上げる。
で、使うときはこんな感じで。

  • 作成するアプリケーションの依存に突っ込みたい場合

    • requirements.txt に追記

      -e git://github.com/youraccount/youreggname#egg=eggname

    • インストール

      $ pip install -r requirements.txt

  • 普通にインストールする場合

    $ pip install -e git://github.com/youraccount/youreggname#egg=eggname

この手順で作ったやつ

github.com