2013年9月14日土曜日

PyCon APAC 2013 1日目に行ってきた(1) #pyconapac

にわかPython使いだけど、年に1回のお祭りなので行ってきた。今回のPyConはAPACというのがタイトルについているせいか、他の言語のカンファレンスより海外の人が多い気がした。Pythonは自分が知る限り日本ではあまり人気がないけど、海外ではけっこう使われているみたいなのでそういうのが反映された結果なのだろうか。とにかく、今日は全体的に濃い目の内容が多くてすごく参考になる話が多かった(でもその分脳力を使ったので終わったあとはぐったりしてた)。

仕事ではPythonを書くことはほぼなくて、プライベートでtomahawk のメンテをする時ぐらいしかPython書かないんだけど、個人的には一番好きな言語なので今回は参加してよかった。まだ終わってないけどすでに5000円分のもとは取れたように思う。

というわけで、自分が聞いたTalkのメモ。(長いので複数のエントリに分ける)

パッケージングの今と未来

aodagさん発表。スライド

Pythonでのパッケージ関連のツールの説明と使い方、およびその未来。あとsetup.pyの書き方をけっこう詳しく話していた。setup.pyは自分も他のライブラリのものをコピペしてるだけであまり深く知らなかったので今回勉強させてもらった。ので、いろいろ目から鱗の話が多かった。

最後に「RubyのBundlerみたく特定のディレクトリにライブラリをインストールするのは、Pythonだとvirtualenvとrequirements.txtを使うのでよい?」と質問させてもらったんだけど、このやり方でいいみたい。(というか今日の話聞く限りBundlerみたいなのはなさそうなので、これしかやりようないと思ったんだけど)

以下は手元に残っていたメモ。

  • pypaツール群
  • setuptoolsベースのパッケージング
pypa - Python Packaging Authority

pip, virtualenv, setuptools, pypi, distlib

$ pip install git+https://github.com/fabric/fabric@changeset 
setuptools/distribute
pkg_resources
  • メタデータを利用するためのライブラリ
  • パッケージに含まれるメディアデータの取得など
  • entry_point
setuptoolsとdistributeの関係
  • setuptoolsからforkしたのがdistribute
  • distributeがpy3対応などいろいろ
  • 2013 pycon US でマージ宣言し、pypaがメンテする
  • distributeコードベースでsetuptools-0.7
  • setuptools 1.1.5まで上がってる
  • distributeのことは忘れてあげてくださいww
setuptools
packages = find_packages()

packagesに自分でパッケージ羅列しなくても良い

entry_point

プラグインの仕組み

entry_point = {
   'console_scripts': [
       'hello=hello:greeting',
   ]
}

PasteDeploy, nose, cliff, setuptoolsのサブコマンドがこれを利用している。

egg
  • バイナリパッケージのこと
  • C拡張などのコンパイル済みライブラリなどを含める
  • ソースとメタデータをzipでアーカイブしたもの
  • pipでは扱えない
pypi (ぱいぴーあい)

CPANやrubygems.orgみたいなサイト

setup.py
  • install_requires
  • tests_require
  • test_suite
extra_require = {
    'testing': tests_require,
    'docs': docs_require,
    'dev': tests_require,+ docs_require,
}

今開発中のソースをパッケージとする方法。

$ pip install -e .

→これは python setup.py develop と何が違うんだろう?

python setup.py test egg_info check register sdist
pip install -e .[dev]

setup.cfg

[egg_info]
tag-build = dev

→パッケージに-devがつく

[upload_docs]
upload_dir = docs/build/html

とか。

エイリアス。

[aliases]
release = egg_info -Rdb
source = register sdist binary
binary = bdist_egg upload --show-response
$ python setup.py release source
パッケージングの未来
  • 関連PEPが出てきてる
  • wheel
  • distlib
  • Metadata 2.0
wheel
  • バイナリパッケージフォーマット
  • Metadata 2.0
  • bdist_wheel, egg2wheel, distlib.wheel などで作成
  • C拡張などを含まない場合はpy2,py3両方のユニバーサル構成も可能

0 件のコメント: