Stack Overflowのクローンです。
あいかわらず仕事が早いしソースが読みやすい。
しかし今回、最も驚いたのが、setup.pyの使い方。
こんな便利なものだったんですね。
なお、正しい手順はREADMEやInstallationを見てください。
私の手順は以下のとおり。
$ 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を読んでいきます。
まずはここ。
- try:
- from solace import scripts
- except ImportError:
- pass
- else:
- extra['cmdclass'] = {
- 'runserver': scripts.RunserverCommand,
- 'initdb': scripts.InitDatabaseCommand,
- 'reset': scripts.ResetDatabase,
- 'make_testdata': scripts.MakeTestData,
- 'compile_catalog': scripts.CompileCatalogEx
- }
コマンドの実装はこんな感じ
- from distutils.cmd import Command
- class InitDatabaseCommand(Command):
- description = 'initializes the database'
- user_options = [
- ('drop-first', 'D',
- 'drops existing tables first')
- ]
- boolean_options = ['drop-first']
- def initialize_options(self):
- self.drop_first = False
- def finalize_options(self):
- pass
- def run(self):
- from solace import database
- if self.drop_first:
- database.drop_tables()
- print 'dropped existing tables'
- database.init()
- print 'created database tables'
わかりやすい!
もう一つ勉強になったのがtests_require
- setup(
- name='Plurk_Solace',
- version='0.1',
- url='http://opensource.plurk.com/solace/',
- license='BSD',
- author='Plurk Inc.',
- author_email='opensource@plurk.com',
- description='Multilangual User Support Platform',
- long_description=__doc__,
- packages=['solace', 'solace.views', 'solace.i18n', 'solace.utils'],
- zip_safe=False,
- platforms='any',
- test_suite='solace.tests.suite',
- install_requires=[
- 'Werkzeug>=0.5.1',
- 'Jinja2',
- 'Babel',
- 'SQLAlchemy>=0.5',
- 'creoleparser',
- 'simplejson',
- 'webdepcompress'
- ],
- tests_require=[
- 'lxml',
- 'html5lib'
- ], **extra
- )
ここで、テストのときだけ必要なライブラリを書くことができる。
python setup.py test
とすると依存ライブラリをとりにいきます。
すばらしい!
setuptoolsをもっと勉強します。
deploy+setup Scriptとして、今後活用していくことを誓います。
0 件のコメント:
コメントを投稿