mojavy.com http://mojavy.com/blog Wed, 27 Feb 2013 23:46:03 GMT Blogofile hourly 1 pythonのswigエクステンションからdebian packageをつくる手順メモ http://mojavy.com/blog/2013/02/27/building-python-debian-package/ Wed, 27 Feb 2013 23:46:03 JST <![CDATA[python]]> <![CDATA[debian]]> <![CDATA[linux]]> http://mojavy.com/blog/2013/02/27/building-python-debian-package/ pythonのswigエクステンションからdebian packageをつくる手順メモ <![CDATA[

debian

注: 以下は古めの環境(Lenny or Squeeze)と古めのpython (2.5 or 2.6)をターゲットにしたときの手順なので、最新の環境では別な方法があるかもしれません。

目次

1. 必要なパッケージをインストール

  • python-setuptools
  • python-all-dev
  • python-support
  • python-stdeb
  • swig
  • debhelper
  • devscripts
  • dh_make

たぶんこれだけあれば大丈夫。(python-supportはdeprecatedらしいけどここでは無視)

2. setup.pyをかく

apt-get source python-xxxで適当なパッケージのソースをダウンロードして参考にするとよい

以下例

#!/usr/bin/python

from setuptools import setup, Extension

__version__ = "0.0.1"

setup(name         = "yourext",
      version      = __version__,
      author       = "Your Name",
      author_email = "[email protected],
      url          = "http://example.com/python-yourext",
      download_url = "http://example.com/python-yourext-%s.tgz" % __version__,
      description  = "yourext client library for python",
      long_description = open('README.md').read(),
      license      = "LGPL",
      platforms    = ["Platform Independent"],
      classifiers  = [
        "Development Status :: 5 - Production/Stable",
        "Intended Audience :: Developers",
        "License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)",
        "Operating System :: OS Independent",
        "Programming Language :: Python",
        "Topic :: Software Development :: Libraries :: Python Modules"
      ],
      ext_modules  = [
        Extension(name='yourext',
                  sources=['path_to_swig/yourext.i'],
                  include_dirs=['path_to_lib/include'],
                  library_dirs=['path_to_lib/lib'],
                  libraries=['yourlibrary'],
                  define_macros=[(FOO_BAR, 123), (DEBUG, None)],
                  extra_compile_args=['-std=gnu99', '-Wextra'],
                  )
      ],
      py_modules = ['pure_python_module_name', 'foo.bar'],
      include_dirs = [''],
)
  • ext_modulesの中にExtensionをかく
    • Extension.sources にはswigの定義ファイルを直接指定できる
    • Extension.include_dirs, Extension.library_dirs, Extension.librariesはそれぞれgccでいう-I, -L, -lの値
    • Extension.define_macrosはタプルで渡す。上の例だと -DFOO_BAR=123 -DDEBUG の意味
    • Extension.extra_compile_args はその他のコンパイルオプション
  • platforms, classifiersの内容はpython-cjsonあたりからコピーした
  • pure pythonの部分はpy_modulesにモジュール名を列挙する。パスではない
  • swigが生成した.pyファイルをpy_modulesに含める汎用的な方法は見つからなかった。(必要な場合はスクリプトでinclude_dirsにコピーすることで対応できる)
  • 3. ビルド確認

    以下コマンドでpython extのビルドを確認する。成功すると、buildディレクトリ以下に共有ライブラリが生成される

    python setup.py build

    4. debianizeする

    以下コマンドでdebianパッケージに必要なファイルを生成する。このときegg-info等も生成される

    python setup.py --command-package=stdeb.command debianize --force-buildsystem=True

    5. debをつくる

    debuild -uc -us

    -uc -usは署名を省略するためのオプション。

    成功すると、親ディレクトリにdebファイルができてるはず

    その他ツール等

    • dupload: リポジトリにアップロードするためのもの
    • dlocate: dlocate -S filename のようにすればそのファイルを含むパッケージを調べることができる
    • cdbs: debianパッケージを作成するための別なやりかた(?)。 ちゃんとしらべてない
    ]]>
    ワンライナーでウェブサーバを起動する方法 http://mojavy.com/blog/2012/07/18/one-line-webserver/ Wed, 18 Jul 2012 12:30:00 JST <![CDATA[python]]> <![CDATA[web]]> <![CDATA[ruby]]> http://mojavy.com/blog/2012/07/18/one-line-webserver/ ワンライナーでウェブサーバを起動する方法 <![CDATA[

    ruby

    とりあえずウェブサーバがたちあがりさえすればいいときは、pythonのSimpleHTTPServerを使うのが便利です。 起動したカレントディレクトリ以下のファイルをブラウズできるので、テスト用のスタティックなスタブデータを一時的に配置したいときとかにも使えます。最近の一般的なlinuxディストリビューションであればデフォルトではいってるpythonで使えると思います。

    $ python -mSimpleHTTPServer 3333
    

    デフォルトポートは8000ですが、引数で指定することもできます。
    ちなみにrubyでもwebrickを使って同様のことができますが、こちら で紹介されているwebrickのワンライナーは長すぎて覚えられないのでいつもpythonを使ってます。

    でもリクエストに応じたロジックを入れたい場合はrubyのsinatraの方が便利です。

    $ ruby -rsinatra -e 'get("/"){sleep 3}'
    

    ポートを変更する場合は以下のようにします

    $ ruby -rsinatra -e 'set :port,3333; get("/"){sleep 3}'
    

    参考

    ]]>
    debian lennyのEnd Of Life対応 http://mojavy.com/blog/2012/06/06/debian-lenny-oldstable/ Wed, 06 Jun 2012 10:30:00 JST <![CDATA[python]]> http://mojavy.com/blog/2012/06/06/debian-lenny-oldstable/ debian lennyのEnd Of Life対応 <![CDATA[

    debian

    debian lennyは2012-02-06にEnd of lifeを迎えました。 それに伴いlennyのリポジトリもoldstable扱いとなりパスが変わったため、デフォルトのsources.listでは404 Not Foundとなってパッケージがインストールできなくなってしまいました。 早めにアップデートしたほうが好ましいですが、そのまま引き続きlennyを使いたい場合もあると思います。 そのような場合は以下のようにsources.listを変更してやれば今までどおりパッケージをとれるようになります。

    deb http://archive.debian.org/debian-security/ lenny/updates main
    deb-src http://archive.debian.org/debian-security/ lenny/updates main
    
    deb http://archive.debian.org/debian/ lenny main
    deb-src http://archive.debian.org/debian/ lenny main
    

    backportsなどもarchiveのほうにあるのでお好みで追加してください。

    参考


    ]]>
    1分でpython環境を整える方法 http://mojavy.com/blog/2012/04/22/virtualenv-burrito/ Sun, 22 Apr 2012 17:30:00 JST <![CDATA[python]]> http://mojavy.com/blog/2012/04/22/virtualenv-burrito/ 1分でpython環境を整える方法 <![CDATA[

    python

    pythonではvirtualenvというユーティリティを使って複数の環境を切り替えることができます。しかしvirtualenvはセットアップがちょっとわかりにくかったりバージョンによってはこけたりしていまいち使いこなせていませんでした。久し振りにブログを書くついでにpython環境を再構築しようと思って調べたところ、virtualenv-burrito というのが使いやすかったので紹介します。これを使えば非常に簡単にpython環境を整えることができます。

    インストール

    $ curl -s https://raw.github.com/brainsik/virtualenv-burrito/master/virtualenv-burrito.sh | $SHELL
    

    として再ログインするだけです。勝手にパスやシェルの補完設定もしてくれます。

    使い方

    新しい環境の構築は、

    $ mkvirtualenv newname
    


    環境の切り替えは、

    $ workon newname
    $ # or
    $ workon 2.7
    


    不要な環境の削除は、

    $ rmvirtualenv newname
    


    以上が基本的な使い方です。さらに詳しい使い方はvirtualenvwrapperのコマンドリファレンス等をみてください。

    解説

    virtualenv-burrito自体はvirtualenv+virtualenvwrapperの環境を構築するだけなので、本格的に使いたい場合はvirtualenvについての理解が必要です。ただ、ほとんどの場合は単にバージョンとパッケージが切り替えられればいいと思うので、mkvirtualenvとworkonさえ覚えておけば十分です。 いくつか注意点もあります。

    • pythonのバイナリはあらかじめインストールされている必要があります。
    • python3だとうごきません。python3環境が作れないという意味ではなく、デフォルトパスのpythonバージョンが3だとvirtualenv-burritoのセットアップ途中でこけます。その場合はpython2系をつかってください。
    • pipのインストールでこける場合があります。その場合は以下のようなコマンドで回避できます。 (参考)
    $ rm -Rf ~/.venvburrito/lib/python/distribute-0.6.24-py2.7.egg
    $ mkvirtualenv -p $(which python3.2) --distribute py32
    

    まとめ

    いまからpython環境を構築するならvirtualenv-burritoつかっとくと、virtualenvとvirtualenvwrapperをセットアップするまでの手間が省けていいと思います

    関連リンク

    ]]>
    blogofileでサムネイル画像を表示する方法 http://mojavy.com/blog/2011/11/06/blofofile-test/ Sun, 06 Nov 2011 20:32:51 JST <![CDATA[python]]> <![CDATA[memo]]> <![CDATA[blogofile]]> http://mojavy.com/blog/2011/11/06/blofofile-test/ blogofileでサムネイル画像を表示する方法 <![CDATA[

    rena

    こんな風にイメージ画像がある記事の場合は、一覧ページでもこの画像をサムネイルで表示させたい。

    例えば、 http://mojavy.com のトップページ右カラムにある最近の記事一覧みたいに画像を表示できるようにする。

    これをするには、postオブジェクトにそういう属性をもたせればよいので、controllers/blog/post.pyに以下のように一行追加する。

    +++ b/_blogofile/_controllers/blog/post.py
    @@ -93,6 +93,7 @@ class Post(object):
             self.slug = None
             self.draft = False
             self.filters = None
    +        self.image = None
             self.__parse()
             self.__post_process()
    

    そうしておくと、各記事のヘッダにあるyamlから勝手に読み込んでくれるので、

    categories:
    date: 2011/11/06 20:32:51
    title:
    image: /images/rena.jpg
    

    のようにすれば${post.image}のようにして参照できる。

    ]]>