2009年9月3日木曜日

setuptools

SolacePlurkからリリースされました。

Stack Overflowのクローンです。
あいかわらず仕事が早いしソースが読みやすい。

しかし今回、最も驚いたのが、setup.pyの使い方。
こんな便利なものだったんですね。
なお、正しい手順はREADMEInstallationを見てください。

私の手順は以下のとおり。

$ hg clone http://bitbucket.org/plurk/solace
$ mkvirtualenv solace
(solace)$ cd solace
(solace)$ python setup.py develop
(solace)$ echo SECRET_KEY = \'`mkpasswd -l 40`\' > config.py
(solace)$ SOLACE_SETTINGS_FILE=config.py python setup.py reset
(solace)$ SOLACE_SETTINGS_FILE=config.py python setup.py runserver

はやい!本当に早い!
setup.pyってこんなに便利だったんだ。
拡張コマンドを追加できるなんて知らなかったよ!

さて、setup.pyを読んでいきます。
まずはここ。
  1. try:  
  2.     from solace import scripts  
  3. except ImportError:  
  4.     pass  
  5. else:  
  6.     extra['cmdclass'] = {  
  7.         'runserver':        scripts.RunserverCommand,  
  8.         'initdb':           scripts.InitDatabaseCommand,  
  9.         'reset':            scripts.ResetDatabase,  
  10.         'make_testdata':    scripts.MakeTestData,  
  11.         'compile_catalog':  scripts.CompileCatalogEx  
  12.     }  

コマンドの実装はこんな感じ
  1. from distutils.cmd import Command  
  2. class InitDatabaseCommand(Command):  
  3.     description = 'initializes the database'  
  4.     user_options = [  
  5.         ('drop-first''D',  
  6.          'drops existing tables first')  
  7.     ]  
  8.     boolean_options = ['drop-first']  
  9.   
  10.     def initialize_options(self):  
  11.         self.drop_first = False  
  12.   
  13.     def finalize_options(self):  
  14.         pass  
  15.   
  16.     def run(self):  
  17.         from solace import database  
  18.         if self.drop_first:  
  19.             database.drop_tables()  
  20.             print 'dropped existing tables'  
  21.         database.init()  
  22.         print 'created database tables'  

わかりやすい!

もう一つ勉強になったのがtests_require
  1. setup(  
  2.     name='Plurk_Solace',  
  3.     version='0.1',  
  4.     url='http://opensource.plurk.com/solace/',  
  5.     license='BSD',  
  6.     author='Plurk Inc.',  
  7.     author_email='opensource@plurk.com',  
  8.     description='Multilangual User Support Platform',  
  9.     long_description=__doc__,  
  10.     packages=['solace''solace.views''solace.i18n''solace.utils'],  
  11.     zip_safe=False,  
  12.     platforms='any',  
  13.     test_suite='solace.tests.suite',  
  14.     install_requires=[  
  15.         'Werkzeug>=0.5.1',  
  16.         'Jinja2',  
  17.         'Babel',  
  18.         'SQLAlchemy>=0.5',  
  19.         'creoleparser',  
  20.         'simplejson',  
  21.         'webdepcompress'  
  22.     ],  
  23.     tests_require=[  
  24.         'lxml',  
  25.         'html5lib'  
  26.     ], **extra  
  27. )  

ここで、テストのときだけ必要なライブラリを書くことができる。
python setup.py test
とすると依存ライブラリをとりにいきます。
すばらしい!


setuptoolsをもっと勉強します。
deploy+setup Scriptとして、今後活用していくことを誓います。

0 件のコメント: