reST→PDF出力の環境を整備した。

reST→PDF出力する環境を整備してみました。
当方の環境はMacOSX 10.7になっております。
Windows/Linuxの方はコマンドやディレクトリなどを
ご自身の環境に置き換えて作成下さい。
また以下のものがインストールされている前提となっています。
  • Python

  • pip

rst2pdfのインストール
コマンドラインから
$ pip install rst2pdf

日本語フォントのインストール
VLゴシックフォントIPAフォントをインストールします。
それぞれダウンロード解凍後に、フォントディレクトリにコピーします。
日本語出力のためのスタイル設定
これより下のファイルはプロジェクトディレクトリ内に作成します。
% vi ja.style
ja.styleに以下のように記述します。
{
    "fontsAlias" : {
        "stdFont": "VL-PGothic-Regular",
        "stdBold": "VL-PGothic-Regular",
        "stdItalic": "VL-PGothic-Regular",
        "stdBoldItalic": "VL-PGothic-Regular",
        "stdMono": "VL-Gothic-Regular",
        "stdMonoBold": "VL-Gothic-Regular",
        "stdMonoItalic": "VL-Gothic-Regular",
        "stdMonoBoldItalic": "VL-Gothic-Regular",
        "stdSans": "VL-Gothic-Regular",
        "stdSansBold": "VL-Gothic-Regular",
        "stdSansItalic": "VL-Gothic-Regular",
        "stdSansBoldItalic": "VL-Gothic-Regular"
    },
    "styles" : [
        ["base" , {
            "wordWrap": "CJK"
        }],
        ["literal" , {
            "wordWrap": "None"
        }]
    ]
}
フォントの埋め込み
% vi ja.json
ja.jsonに以下のように記述します。
{
   "embeddedFonts" :
   [[
       "VL-Gothic-Regular.ttf",
       "VL-PGothic-Regular.ttf",
       "ipam.ttf",
       "ipag.ttf",
       "ipagp.ttf",
       "ipamp.ttf"
   ]],
   "fontsAlias" : {
       "stdFont": "VL-PGothic-Regular",
       "stdBold": "VL-PGothic-Regular",
       "stdItalic": "VL-PGothic-Regular",
       "stdBoldItalic": "VL-PGothic-Regular",
       "stdMono": "VL-Gothic-Regular",
       "stdMonoBold": "VL-Gothic-Regular",
       "stdMonoItalic": "VL-Gothic-Regular",
       "stdMonoBoldItalic": "VL-Gothic-Regular",
       "stdSans": "VL-Gothic-Regular",
       "stdSansBold": "VL-Gothic-Regular",
       "stdSansItalic": "VL-Gothic-Regular",
       "stdSansBoldItalic": "VL-Gothic-Regular"
   },
   "styles" : [
       ["base" , {
           "wordWrap": "CJK"
       }],
       ["literal" , {
           "wordWrap": "None"
       }]
    ]
}
rst2pdfの設定ファイル
以下のように作成
$ mkdir ~/.rst2pdf$ vi ~/.rst2pdf/config
~/.rst2pdf/configに以下のように記述します。
[general]
stylesheets="ja"
compressed=flase
font_path="~/Library/Fonts"
header=
footer=
fit_mode="shrink"
break_level=0
後は以下のように叩くだけでPDFファイルが出力されます。
$ rst2pdf -o output.pdf input.rst
完了後は以下のようなフォルダ構成になっているはずです。
~/.rst2pdf/config
-project
|-input.rst
|-ja.json
|-ja.style
|-output.pdf
以上です。お疲れ様でした!

参考リンク

エキスパートPythonプログラミング読書会 第二期 07に参加しました。

エキスパートPythonプログラミング

posted with
at 11.10.24
Tarek Ziade
アスキー・メディアワークス
売り上げランキング: 36822
最近Blog書いてないなーということで書きます。
遅刻かと思ったけど、何とか時間までについて良かった。
当日の様子はこちら。
1.アイスブレイク
恒例のアイスブレイク、各島ごと(4名程度)で簡単に自己紹介をしました。
以下自己紹介順に、
- @usaturn 面談したら実は同じ会社だったと言うオチ
- @taison PHPゴリゴリからDjango git wiki google document活用してる。
- @shimizukawa 台湾行って来ました。最近はSencha Touchとかやってる。

2.「5章 パッケージを作る」

- setuptoolsとdistribute使える環境があったらdistributeを使いましょう。
- いままで

- distutils: Python3.2までの標準
- setuptools: 業界標準(ez_setupで入れる)
- distribute: setuptools上位互換
(distribute_setup.pyで入れる)
- pip: setuptools/distributeを活用して使いやすいコマンドライン
- buildout: setuptoolsを活用した環境構築ツール
- virtualenv: Pythonのユーザーランド仮想環境作成ツール

- これから↓

- Distutils2:
packagingと同じものでPyhton2.4-3.2で使えるようにしたもの。
(実際はPython2.6-3.2。シンタックス対応が大変だねという話)
→しかしこれによってパッケージの手法が必ずしも綺麗になるわけでないと関係者が頭抱えてる。
- packaging: Python3.3からの標準
- pip?:
packaging上で動くようになる?(virtualenvはどうだかわからない)
- pythonv:
virtualenvをPython3.2から標準でできるようにしたもの(実装別)

- パッケージング:
「パッケージを作ろう」と「Python3.3のパッケージ」がある。

- PyPIの配布物(PYPIにもpackagingという名前で登録されているものがある)
- Python言語自体のパッケージ(import……の,名前空間パッケージ←応用)
- Python言語自体のパッケージは_とつけてれば安心と理解した。手を動かして理解しよう!

- sdist = soure distribution
- eggの圧縮はPython3.3では圧縮される?
→eggがありません。eggみたいなものは今議論されていない(すげー困る。ほとんどの環境で動かなくなる)
- python setup.py check というコマンドがある。
setup.pyの構文チェックができる。
- buildとbdist: バイナリ配布用のパッケージを作ってくれる。
あんま使わないほうがいい → bdistを拡張したbdist_eggを使おう。
- bdist_egg: どのPythonでbuildされたかわかるものが作られる。
eggも出来る。素直な、依存関係のないeggが生成される。
install_requiresで、依存関係のパッケージもPyPIから見つけてインストールしてくれる。
- アンインストールについてはpipにお任せしましょう。
- develop: -linkだとPython PATHに自動的に追加されるので、どこにいても
import aodag
とかいうことが出来るようになる。-uオプションで削除ができる。
- test: test_suite, tests_requireを確認してくれる。
python setup.py sでオプションが全部出てくる
- PyPIはbasic認証で大変いけてない。
.pypircのPasswordの行を削除すると、毎回Passwordをきいてくれる仕様にできる。
- list printerとかPyPIで調べるといっぱいできる。
→テストで登録したものはちゃんと消しましょう。
- alias: setup.cfgに追記してくれる。
- 最近はまだまともですが、この本の読んでからじゃないとdistutilsガイド、setuptoolsガイドが読みにくいと思われます。
- テンプレートベースのアプローチは有用ではあるが、
大抵がその内メンテしなくなる。

3.ビアバッシュ&LT

- @shomah4a: PyConTW行って来ました。
スライド:Welcome to PyCon JP
- @aodag: 写真取るのに夢中で何やったのか記憶が朧
(すみません…)
- @michiyata: Windows AzureでPython対応!
4.まとめ
パッケージ管理は今のところ distribute + virtualenv(pip)安定ですかね。
エキpyに書いてある内容で2〜3年は使えるそうです。
Python2.7は最低でも2017年までメンテナンスされる見込み(source→Python3と向かい合ってみる)なので、
最新の状況に乗り遅れないようにしつつ、
Pythonと向い合って行きたいです。

参考リンク

「エキスパートPythonプログラミング読書会 第二期 06」に参加してきました。

参加してきました。
1回来ないと随分久しぶりな気がしますね。
あいにくの雨でしたが楽しんでこれました。
当日の様子は@lincolinnyanさんがまとめてくれています。
全体としてはサクサクテンポよく進んでいました。
テーマが「良い名前を選ぶ」で、
コードがあまりでてこなかったからかもしれませんね。
流れとしては以下のとおり。
1.アイスブレイク
2.読書会
3.ビアバッシュ&LT
1.アイスブレイク
毎度おなじみアイスブレイク。
今回も各島ごとに行いました。
自分以外の方は皆さんアプリや自社サービスを行なっている方々ばかり。
@tfmagicianさんがPyramidについて熱弁されてました。
2.読書会
特に気になった点をいくつか。
- PEP8…命名規則。コーディングルールについてまとめたもの。
日本語訳はこちら
ex)
デリミタで揃える
トップレベルの関数のクラス定義の間は、2行あける
演算子の前後にスペースを1つ入れる
チェックツール:PEP8, pyflakes
小話:Googleは昔インデントスペース2だったのが、4に変わったらしい。
- パブリック変数とプライベート変数
Rubyだとよく使うメソッドは名前を短く,
あまり使わないものは名前を長くする慣習があるらしい。
Pythonの場合は短くするよりも意図をわかりやすく表現するほうが大切。
- プライベート変数を保護する仕組みはPythonにはない。
それっぽいものはあるがプライベートメソッド,フィールドは存在しない。
複雑になるから。Pythonは元々クラスの概念がなかった。
クラスの概念を導入する段階で付けなかった。
継承してプライベートと扱うのはメリットがなかったと考えられる。
- 特殊メソッドは継承、マンダリングされません。
- importする時にallや*はなるべく書かないようにしましょう。
- 引数のベストプラクティス
引数は少しずつ作ろう。必要なものだけ追加していこう。
引数とテストを信頼しよう。つまり「テスト書こう。」
*argsと**kwには注意。本当に着ているか確認するのに、
if文をたくさん書かないといけなくなる。
→フレームワークを作る時や、デコレータを実装する時、
メタプログラミングなどはどうしても必要になってくのだけど、
気をつけて使おう。
- パッケージ名をつけるのは難しい。
グランドルールはPEP8として、ローカルルールでわかりやすくするなど、
読みにくくなる場合はPEP8を破ってもいいのではないか。
- pylintやPEP8とかは今だとCIと組み合わせて
自動レポートとかうまくできるようになる。
- docstring, testcode, 使い方を書くと実装の構成の方にフィードバックを
かける時にテストとしてはやりやすくなる。それを反復し、実装に
反映させていく。
- Pythonのインタプリタから
import antigravity
って打つと、デフォルトのブラウザから
xkcd: Pythonが見れる。
3.ビアバッシュ&LT
@takanoryさんの「PyCon台湾行くよ!壁Py宣伝してくるよ!」
@shiumachiさんの「Hadoop documentの更新日時検索作りました
(←名前が思い出せない)」
@aodagさんの「フレームワークなしでWSGIプログラミング」からのbuchoパッケージ紹介
でした。
来月とか参加できるかな……
参加できなくても学習は続けていきたいですね。