2014-02-12

捨てたもの: データ通信端末、完走証、写真

ランニングやトライアスロンの完走証がまたもや出てきたので捨てた。それから写真も何枚か出てきたので捨てた。

5年以上まえに契約したイーモバイルの、USBスティック型の通信端末を手放した。機種変更なので、正確には捨てたわけではない。風邪で休んでいたら、イーモバイルから機種変更しませんか、と電話がかかってきたのだ。この電話がなければ、以前の端末を使い続けただろうから、まあよい。

問題は何も考えずに機種変更をしたお陰で、この端末が本当に必要なのか怪しくなったことだ。そもそも社外で打ち合わせするとき、新幹線に乗るときくらいしか使わない。今は iPhone でテザリングできる。どうせだったら Nexas 5 にしたらよかった、などといろいろ考えてしまう。

2014-02-08

pyenv と tox で複数バージョンの Python に対応したライブラリ開発

生まれてはじめて PyPI にコードを登録した。Python 2.7 と 3.3 で使えるようにするにあたり、ライブラリの実装とは直接関係ないところで、とまどった。現時点での手順を記録しておく。

以下を前提とする。

  • OS X 10.9.1 (Mavericks)
  • homebrew でパッケージを管理
  • pyenv, pyenv-virtualenv で OS 上の Python 環境を管理
  • PyPI に登録するライブラリは Python 2.7 と 3.3 に対応

まず始める

shimizukawa によるハンズオン資料公式ドキュメントを併読しながら進める。基本的な作業はハンズオンでだいたい分かる。とはいえ、あなたが持っているライブラリは、必ずしもチュートリアルどおりではないだろうから、公式ドキュメントのガイドが必要になるだろう。

ところで、ナウなヤングは egg じゃなくて wheel を使うらしい

pyenv と pyenv-virtualenv をインストールする

pyenv は先週まで存在すら知らなかった。肉の日生まれの wozozo が使っているらしいので、試すことにした。まずインストールする。

$ brew install pyenv pyenv-virtualenv
$ cat >> ~/.zshrc
export PATH=$HOME/.pyenv/bin:$PATH
if which pyenv > /dev/null; then eval "$(pyenv init - zsh)"; fi

pyenv は複数の Python インタプリタをインストール/アンインストールするツールだ。pyenv-virtualenv は、pyenv と virtualenv を一緒に使いやすくする。実際に使ってみる。

$ pyenv install 2.7.6
$ pyenv virtualenv 2.7.6 foo-27

ひとつめのコマンドで Python 2.7.6 をインストールする。通常 ~/.pyenv/versions/2.7.6/bin/python にインストールされる。他にも pip なんかも入る。

ふたつめのコマンドで、Python 2.7.6 をベースに virtualenv を作る。通常 ~/.pyenv/versions/foo-27/bin/python に構築される。pip の他に activate なんかも入る。

同様に Python 3.3 をインストールして、仮想環境を作る。

$ pyenv install 3.3.3
$ pyenv virtualenv 3.3.3 foo-33

普段は Python 2.7 で作業しているので、おそらく foo-33 環境は不要だ。Python 3.3 については、tox が virtualenv を別途作ってくれる。けれど、カジュアルに pip とかしてしまうと、元の環境を壊してしまう。元の環境は綺麗にしておきたいので foo-27 と foo-33 環境を作る。

つづいて、プロジェクトで foo-27 と foo-33 う使うように設定する

$ cd /path/to/foo
$ pyenv local foo-27 foo-33
$ cat .python-version
foo-27
foo-33

pyenv local X Y を実行すると、そのディレクトリで使う Python 環境を設定する。ここでは foo-27 と foo-33 だ。

順序には意味がある。python コマンドを発行した時には、foo-27 環境の Python が呼び出される。

そして foo-27 と foo-33 の両方を指定する必要がある。後述する tox は python2.7 や python3.3 というコマンドを実行する。このとき pyenv local で指定された環境を探しに行くからだ。pyenv local foo-27 だと python3.3 が見つからないというエラーがでる。

ref. Using tox with pyenv #92



tox を設定する


$ pip install tox pytest
$ pip freeze | grep -v wsgiref > requirements.txt

wsgiref を含まないようにしている。理由は後述。

tox を使うための設定ファイルは以下のとおり。

$ cat > tox.ini
[tox]
envlist = py27,py33

[testenv]
deps = -rrequirements.txt
commands=py.test


envlist で py27 と py33 を指定しているため、このディレクトリ以下で、ビルドやテスト時に python2.7 と python3.3 を呼び出す。

tox.ini ファイルで、Python 2.7 インタプリタをフルパスを指定できる。だが、やらない。小さなプロジェクトだけれど、自分のところでしか動かないような設定にしたくないからだ。

tox を実行


$ tox

Python 2.7 用に virtualenv して、インストールして、ビルドして、テストを実行。Python 3.3 も同じ。

requirements.txt に wsgiref が含まれていると Python 3.3 で以下のようなエラーが出る。


Downloading/unpacking wsgiref==0.1.2 (from -r requirements.txt (line 7))
(...)
  File "./ez_setup/__init__.py", line 170

    print "Setuptools version",version,"or greater has been installed."

                             ^

SyntaxError: invalid syntax


PyPI へ登録する


$ python2.7 setup.py sdist bdist_egg upload
$ python3.3 setup.py bdist_egg upload

これで登録はできるが、こういう呼び出し方でいいのか自信がない。


まとめ


  • はじめて setup.py を書いた。
  • ヤク刈り、とは言わないけれど、地味に解決すべきことがことがあった。
  • 明日は肉の日である。 

2014-02-05

捨てた: ドライバ(ねじまわし)、データ集録デバイス、ケーブル、NAS、年賀状

捨てたもの記録

  • ドライバ ... 以前に勤めていた会社で、エンジニアの小道具兼ノベルティになっていた会社ロゴ入りドライバ(ねじまわし)。どう考えても使わないので、次の金属ゴミの袋へ。
  • データ集録デバイス ... ±5V のアナログ信号入出力、デジタル信号入出力をするデバイスをゴミ袋へ。どう考えても使わない。
  • ケーブル類 ... 同じような長さの同じような端子のケーブル。特にUSBケーブル。まとめてゴミ箱へ。品川区ではUSBケーブルは燃えるゴミ。
  • NAS ... .ero フォルダだけが 800GBくらいになっていたけど、まったく使っていなかった。HDDを物理的にエイヤっとして、次の金属ゴミへ。
  • 年賀状 ... 年賀状は読み返すことはないし、出さないので参考にすることもないので、持っていてもしょうがない。すべてスキャンして、住所だけアドレス帳に入力して、さよなら。
  • ペン ... なぜか増えていくペン類。黒を2本、青を5本(普段は青のボールペンを使う)、筆ペンを1本のこして、すべて廃棄。とくに蛍光ペンとかまったく使っていない。