Mac OS X 10.7.3 Lionでpythonbrew, virtualenv, pip, buildoutなPython環境を構築する 第3回 仮想環境の構築
前回:http://toggtc.hatenablog.com/entry/2012/02/06/023652
Pythonの仮想環境を構築することで、Python本体がある実環境を汚さずに、好き放題ライブラリを詰め込んだ環境を作ることができます。
pythonbrewには、venvというvirtualenv, virtualenvwrapperのラッパーコマンドが用意されています。ここではvirtualenvを直接使わず、venvを使って仮想環境を構築します。なお、virtualenvはvenvコマンド経由で自動的にインストールされます。
以下、前回の環境構築が完了している前提で話を進めます。
1. デフォルトで使うPythonを設定する
virtualenvを使うとき、Python 2.*が必要になります。ここでは、バージョン2.7.2をデフォルトで使うPythonとして設定します。
$ pythonbrew switch 2.7.2
これによって次回からpythonコマンドを打つときに2.7.2が使われるようになります。
$ python --version Python 2.7.2 # ちなみに、pipも2.7.2配下のものが使われるようになります $ pip --version pip 1.0.2 from /Users/toggtc/.pythonbrew/pythons/Python-2.7.2/lib/python2.7/site-packages/pip-1.0.2-py2.7.egg (python 2.7)
2. 仮想環境を作成する
pythonbrew venvコマンドを使って、2.5.6、2.7.2、3.2.2それぞれのバージョンの仮想環境を作っていきます。
(仮想環境でdistributeを使うための設定)
なお、virtualenvから作成される仮想環境がsetuptoolsではなくdistributeをセットアップするようにするためには、VIRTUALENV_USE_DISTRIBUTE環境変数を事前に設定しておきます。
(2012.01現時点ではvenv経由だとvirtualenvの--distributeパラメータを認識しないの、この方法を使います)
export VIRTUALENV_USE_DISTRIBUTE=true
(--no-site-packagesについて)
以降、仮想環境を作るときにオプションとして「--no-site-packages」を指定します。
このオプションは、作成対象の仮想環境が、そのベースとなった実環境のPythonにあるsite-packages(※)を参照しないようにするオプションです。このオプションにより、ベースとなる実環境に何らかの外部ライブラリを入れても、仮想環境には影響しないようにすることが出来ます。
※site-packagesディレクトリは、外部ライブラリ・モジュールを格納する場所です。
なお、virtualenv 1.7以降では、--no-site-packagesがデフォルトになります。
pythonbrew 1.1 (2012年1月最新)では、virtualenv 1.6.4を使用しています。
2.1 Python 2.5.6ベースの仮想環境 "py25"
まずはPython 2.5.6ベースの仮想環境"py25"を作成します。
最初にvenvコマンドを使ったときに、virtualenvが自動的にインストールされます。
$ pythonbrew venv create py25 -p 2.5.6 --no-site-packages Downloading virtualenv.tar.gz as /Users/toggtc/.pythonbrew/dists/virtualenv.tar.gz ######################################################################## 100.0% Extracting virtualenv into /Users/toggtc/.pythonbrew/etc/virtualenv Creating `py25` environment into /Users/toggtc/.pythonbrew/venvs/Python-2.5.6 Already using interpreter /Users/toggtc/.pythonbrew/pythons/Python-2.5.6/bin/python New python executable in /Users/toggtc/.pythonbrew/venvs/Python-2.5.6/py25/bin/python Installing distribute....................................................................................................................................................................................done. Installing pip...............done.
2.2 Python 2.7.2ベースの仮想環境 "py27"
次はpython 2.7.2ベースの仮想環境"py27"を作成します。デフォルトのpythonを2.7.2としているので、-p 2.7.2オプションは指定しなくてもよいです。
$ pythonbrew venv create py27 -p 2.7.2 --no-site-packages Creating `py27` environment into /Users/toggtc/.pythonbrew/venvs/Python-2.7.2 Already using interpreter /Users/toggtc/.pythonbrew/pythons/Python-2.7.2/bin/python New python executable in /Users/toggtc/.pythonbrew/venvs/Python-2.7.2/py27/bin/python Installing distribute....................................................................................................................................................................................done. Installing pip...............done.
2.3 Python 3.2.2ベースの仮想環境 "py32"
最後にpython 3.2.2ベースの仮想環境"py32"を作成します。python 3.2.2は前回、--with-pydebug付きでコンパイルしているので、出力が少し異なります。
$ pythonbrew venv create py32 -p 3.2.2 --no-site-packages Creating `py32` environment into /Users/toggtc/.pythonbrew/venvs/Python-3.2.2 [26303 refs] Already using interpreter /Users/toggtc/.pythonbrew/pythons/Python-3.2.2/bin/python New python executable in /Users/toggtc/.pythonbrew/venvs/Python-3.2.2/py32/bin/python Installing distribute.............................................................................................................................................................................................................................................................................................................................................................done. Installing pip....................done. /Users/toggtc/.pythonbrew/etc/virtualenv/virtualenv.py:577: ResourceWarning: unclosed file <_io.FileIO name=3 mode='rb'> cwd=cwd) /Users/toggtc/.pythonbrew/etc/virtualenv/virtualenv.py:648: ResourceWarning: unclosed file <_io.FileIO name=3 mode='rb'> filter_stdout=_filter_setup) [79713 refs]
ちょちょいと仮想環境が構築できました。venvのおかげで至れり尽くせりです。
次回はbuildoutを使ってみます。
次回 hello, buildout:http://toggtc.hatenablog.com/entry/2012/02/06/024326
Mac OS X 10.7.3 Lionでpythonbrew, virtualenv, pip, buildoutなPython環境を構築する 第2回 pythonbrewとPythonのインストール
前回:http://toggtc.hatenablog.com/entry/2012/02/06/023342
複数バージョンのPython + 仮想環境を実現するために、以下の構成を作っていきます。
今回は、pythonbrewとPythonのインストールです。
1. 前提環境
- Mac OS X 10.7.3 (Snow Leopardでもいける気がする)
- Xcode 4.2.1
- Apple GCC 4.2.1 (not llvm-gcc)
- Xcode 4.2.1に付いてくるllvm-gccだとctypesモジュールの挙動が怪しいので、こちらのGCCを使う。
- インストール方法:http://toggtc.hatenablog.com/entry/2012/01/28/224006
- readline 6.2.2 (homebrewからインストール)
- sqlite 3.7.9 (homebrewからインストール)
- gdbm 1.10 (homebrewからインストール)
- ビルドに耐える時間
なお、Pythonインストール時にネットワークを使ったテストコードが走るので、ファイアウォールはOFFにしておきます。
2. pythonbrew本体のインストール
(1) ダウンロード&インストール
$ curl -kL http://xrl.us/pythonbrewinstall | bash
インストール先は~/.pythonbrewにpythonbrewです。
他のインストール先にしたい場合は、本家サイト(https://github.com/utahta/pythonbrew)をご確認ください。
(2) 環境変数の設定
~/.bashrc(もしくは~/.zshrc)に以下の行を追加します。スクリプトのファイル名がbashrcになっていますが、zshでも動くとのこと。
$ vi ~/.bashrc # 以下を追加 [[ -s $HOME/.pythonbrew/etc/bashrc ]] && source $HOME/.pythonbrew/etc/bashrc
(3) パスが通っているかの確認
$ pythonbrew version
バージョンが表示されればOKです。表示されない場合は、Terminalの新規タブか新規ウィンドウを開いて、もう一度実行してみてください。(.bashrcがロードされていない可能性があります)
3. Pythonのインストール
今回は、2.5.6, 2.7.2, 3.2.2の3つのバージョンをインストールします。パッチを当てる作業があるので、以降で示す手順はバージョンが異なるとうまく機能しないかもしれません。
なお、インストールオプションの詳細については、以下を参照してください。
参考:http://toggtc.hatenablog.com/entry/2012/02/05/074212
3.1 Python 2.5.6のインストール
任意のディレクトリで以下のコマンドを実行します。
$ pythonbrew install --verbose --configure="CC=/usr/bin/gcc-4.2 CXX=/usr/bin/g++-4.2 LDFLAGS='-L/usr/local/lib -L/usr/X11R6/lib' --with-bz2 --with-crypt --with-expat --with-md5 --with-ncurses --with-readline --with-sha --with-sqlite3 --with-ssl --with-zlib" 2.5.6
LDFLAGSを設定しておかないと、X11のライブラリを見つけられないので指定しておきます。
ちなみにpythonbrewから2.5.6をインストールすると、いろいろとパッチを当ててくれます。親切です。また、distributeとpipも同時にインストールされます。ありがたいですね。
3.2 Python 2.7.2のインストール
Lion環境の場合、pythonbrewから適用される2.7.2用のパッチだけでは不足なので、一旦、Python 2.7.2のtarボールをダウンロード&展開して、パッチを当ててからpythonbrew経由でインストールします。
手動で適用するパッチの一覧です。
- gdbm-1.9.patch
- gdbmを識別するための処理がgdbm-1.9以降のバージョンに対応していないための修正パッチです。
- http://hg.python.org/cpython/raw-rev/14cafb8d1480
- distutils_test_fixup_command_2.7.2.patch
- 不正なコンパイラオプションが適用されてしまうための修正パッチです。
- https://raw.github.com/toggtc/python-patch/master/2.7.2/distutils_test_fixup_command_2.7.2.patch
- test_platform.patch
- テストコードが、i386に加えてx86_64の識別文字列に対応するためのパッチです。(Lion環境だと`uname -m`でx86_64を返す)
- http://hg.python.org/cpython/raw-rev/0a53a978a160
(1) ダウンロード&パッチの適用
# まずはpythonのダウンロードと展開です。 $ cd /private/tmp $ curl -kLO http://python.org/ftp/python/2.7.2/Python-2.7.2.tgz $ tar xzf Python-2.7.2.tgz $ cd Python-2.7.2/ # パッチを格納するディレクトリを作成して... $ mkdir patches $ cd patches # パッチをダウンロードしていきます $ curl -kLo gdbm-1.9.patch http://hg.python.org/cpython/raw-rev/14cafb8d1480 $ curl -kLO https://raw.github.com/toggtc/python-patch/master/2.7.2/distutils_test_fixup_command_2.7.2.patch $ curl -kLo test_platform.patch http://hg.python.org/cpython/raw-rev/0a53a978a160 # パッチを当てていきます $ cd ../ $ patch -p1 < ./patches/gdbm-1.9.patch patching file Lib/whichdb.py patching file Misc/NEWS Hunk #1 FAILED at 76. 1 out of 1 hunk FAILED -- saving rejects to file Misc/NEWS.rej $ patch -p1 < ./patches/distutils_test_fixup_command_2.7.2.patch patching file Lib/distutils/tests/test_build_ext.py $ patch -p1 < ./patches/test_platform.patch patching file Doc/library/platform.rst patching file Lib/platform.py patching file Lib/test/test_platform.py patching file Misc/NEWS Hunk #1 FAILED at 101. 1 out of 1 hunk FAILED -- saving rejects to file Misc/NEWS.rej
パッチを当てるとMisc/NEWSのパッチあてに失敗しますが、影響はないので無視します。
これで下ごしらえができました。
(2) インストール
pythonbrewから下ごしらえしたPythonをインストールします。
$ pythonbrew install --verbose --universal --configure="CC=/usr/bin/gcc-4.2 CXX=/usr/bin/g++-4.2 LDFLAGS='-L/usr/local/lib -L/usr/X11R6/lib'" /private/tmp/Python-2.7.2/
Python 2.5.6のときは--with-*をたくさん指定しましたが、2.7.2ではunrecognized optionsとなってしまうので、ここでは指定しません。ビルドログをみると各モジュールがビルドされているようなので、ライブラリを探索して自動的にビルドしているのではないかと思います。
これでPython 2.7.2のインストールが完了しました。
3.3 Python 3.2.2のインストール
2.7.2のときと同じく、事前にtarボールをダウンロード・展開して、パッチを当てておきます。
適用するパッチ: ※2.7.2のときとURLが異なるので注意してください
- gdbm-1.9.patch
- http://hg.python.org/cpython/rev/7a41855b6196
- gdbmを識別するための処理がgdbm-1.9以降のバージョンに対応していないための修正パッチです。
- fixup.patch
- http://hg.python.org/cpython/raw-rev/6f6100a752ba
- 不正なコンパイラオプションが適用されてしまうための修正パッチです。
(1) ダウンロード&パッチの適用
では、pythonのソースをダウンロードしてパッチを当てます。
$ cd /private/tmp $ curl -kLO http://python.org/ftp/python/3.2.2/Python-3.2.2.tgz $ tar zxf Python-3.2.2.tgz $ cd Python-3.2.2 $ mkdir patches $ cd patches $ curl -kLo gdbm-1.9.patch http://hg.python.org/cpython/raw-rev/7a41855b6196 $ curl -kLo fixup.patch http://hg.python.org/cpython/raw-rev/6f6100a752ba $ cd ../ $ patch -p1 < ./patches/gdbm-1.9.patch patching file Lib/dbm/__init__.py patching file Misc/NEWS Hunk #1 FAILED at 55. 1 out of 1 hunk FAILED -- saving rejects to file Misc/NEWS.rej $ patch -p1 < ./patches/fixup.patch patching file Lib/distutils/tests/support.py Hunk #1 succeeded at 189 (offset 1 line). Hunk #2 succeeded at 203 (offset 1 line). patching file Misc/NEWS Hunk #1 FAILED at 113. 1 out of 1 hunk FAILED -- saving rejects to file Misc/NEWS.rej
(2) インストール
下ごしらえができたので、インストールします。
なんとなく3系なので、--with-pydebug付きでビルドします。デバッグメッセージが出たり、なんとなくモッサリ気味になるので不要な場合は外してください。
$ pythonbrew install --verbose --universal --configure="CC=/usr/bin/gcc-4.2 CXX=/usr/bin/g++-4.2 LDFLAGS='-L/usr/local/lib -L/usr/X11R6/lib' --with-pydebug" /private/tmp/Python-3.2.2/
これでpython 3.2.2のインストールが完了しました。
3.4 symlinkを貼る(おまけ)
任意のディレクトリで、以下を実行。
$ pythonbrew symlink
これによって、~/.pythonbrew/bin直下に、py*というリンクが貼られます。
$ ll py2.5.6 -> /Users/toggtc/.pythonbrew/pythons/Python-2.5.6/bin/python py2.7.2 -> /Users/toggtc/.pythonbrew/pythons/Python-2.7.2/bin/python py3.2.2 -> /Users/toggtc/.pythonbrew/pythons/Python-3.2.2/bin/python
pythonbrewインストール時に、~/.pythonbrew/binのパスが環境変数PATHに追加されているので、py2.7.2と打つことで、python 2.7.2のインタプリタを起動できるわけです。
$ py2.7.2 Python 2.7.2 (default, Jan 25 2012, 14:51:41) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>>
うーん、便利!
3.5 pythonbrewを使ってみた感想
バージョンを指定してインストール・アンインストールできるのがいいですね!homebrewでは細かいバージョンの管理や切り替えは想定していないようなので、Pythonのインストールはpythonbrewで行うことをお勧めします。
ただ、Pythonをインストールするにあたって、2つほど気になったところがありました。
(1) pythonbrewのパッチの仕組みはもう少し柔軟性が欲しい
パッチを当てようとすると、今回のインストールでやったようにソースとパッチをそれぞれダウンロードして、個別にパッチを当てる必要があります。
仕組みとしては~/.pythonbrew/patchesディレクトリがあるので、そこにパッチを格納すれば自動でパッチを当ててくれるか、あるいは、パッチリストのテキストファイルを置いておけば自動でダウンロード&パッチ当てまでしてくれると手間がなくていいですね。
(2) 複数のバージョンをインストールしたときに、最後のビルドログが上書きされてしまう
Pythonのビルドログには、どのモジュールがビルドされなかったか等の重要な情報があるため、Pythonを動かしているときになんらかの不具合があったとき、ビルドに原因があった、なんていうケースが出てくるかもしれません。そんなとき、ログが残っていると嬉しいのですが、pythonbrewはビルドログを上書きしてしまうので、インストール完了時に別名保存しておいたほうがいいですね。
なんにせよ、初心者にとってはシステムのPythonを汚さないサンドボックスかつバージョンが切り替えられる環境が手に入るのは嬉しいことです。今後もユーザ(デベロッパー)フレンドリーなツールが充実してくるといいですね。
次回は仮想環境の構築をしていきます。
次回 仮想環境の構築:http://toggtc.hatenablog.com/entry/2012/02/06/023807
Mac OS X 10.7.3 Lionでpythonbrew, virtualenv, pip, buildoutなPython環境を構築する 第1回 はじめに
そうだ、Pythonをやろう
と思ったけど、Python 3とPython 2には後方互換がありません。それならPythonのバージョンを切り替える仕組みが欲しいですね、ってことで調べてみたところ、pythonbrewとvirtualenvを組み合わせて使い、ライブラリの管理・インストールはpipもしくはdistributeを使い、ビルドシステムとしてbuildoutを使う、というのが良さげです。
ということで、MacでPythonまわりの開発環境を作ったときのメモです。
第1回 はじめに (この記事):
http://toggtc.hatenablog.com/entry/2012/02/06/023342
第2回 pythonbrewとPythonのインストール:
http://toggtc.hatenablog.com/entry/2012/02/06/023652
第3回 仮想環境の構築:
http://toggtc.hatenablog.com/entry/2012/02/06/023807
第4回 hello, buildout:
http://toggtc.hatenablog.com/entry/2012/02/06/024326
pythonbrew? virtualenv??
- pythonbrewとは
- perlでいうperlbrew, rubyでいうgemみたいなもの。
- 参考:https://github.com/utahta/pythonbrew
- virtualenvとは
- Python本体とは別に、Pythonの仮想環境を作ってくれる。
- 参考:http://www.virtualenv.org/en/latest/index.html
- pip, setuptools(easy_install), distribute
- Python環境用のパッケージ管理システム。
- 参考: http://www.freia.jp/taka/blog/691/
- buildoutとは
- ビルドシステム。javaでいうところのmavenに近いかも。
- 依存ライブラリを管理するときのパッケージ管理システムとしてeasy_installやdistributeを使うことができる。
- 参考:http://www.buildout.org/
Pythonは現状ではパッケージ管理の仕組みがいろいろとあって、どれも決め手に欠けるのですが、将来的にはpackaging(distutils2)というものに置き換わっていくようです。
どんなことが出来るの?
pythonbrew, virtualenv, buildoutを組み合わせてどんなことができるのか?を妄想してみました。
この例では、2.5.6の環境はGAEアプリ開発用として構築しています。ここでは2.5.6の環境はGAEアプリ用にしか使わないので、仮想化せず実環境を直接利用しています。ただし、buildoutを使っているので、Python本体の環境を汚しません。
2.7.2の環境は、Webサービスクライアントの開発と科学計算モジュールの開発に使うので、それぞれの用途別に2.7.2環境を"py27_web", "py27_sci"として仮想化しています。仮想環境として分けているため、"py27_web"と"py27_sci"はお互いに独立しています。
3.2.2の環境は、仮想化した"py32_lib"をライブラリAの開発用とし、実環境側をライブラリBの試験用として実際にインストールすること等を想定してみました。
素人考えなので突っ込みどころが満載かもしれませんが、仮想環境を作ることで柔軟性が増すということがイメージできれば幸いです。
次回 pythonbrewとPythonのインストール:http://toggtc.hatenablog.com/entry/2012/02/06/023652
pythonbrewのコマンドとオプション一覧
pythonbrewからPythonをビルドしたときのconfigureオプションを調べていたら、網羅的にpythonbrewのオプションがみたくなって、いつの間にかpythonbrewのコマンドとオプションをまとめていました。
`pythonbrew help [COMMAND]`で確認できる内容がほとんどですが、自分用なので後悔はしていない。
対象
- pythonbrew 1.1
- Mac OS X (installコマンドの一部)
コマンド一欄
コマンド | 説明 |
---|---|
install | 指定したバージョンのPythonをインストールする |
uninstall | 指定したバージョンのPythonをアンインストールする |
cleanup | ビルド時のファイルやPythonのtarボール等、不要になったファイルを削除する |
switch | 使用するPythonのバージョンを切り替える |
use | 現在のターミナルセッションに対して使用するPythonのバージョンを切り替る |
off | pythonbrewを無効にする |
symlink | 各バージョンのPythonに対するシンボリックリンクを作成する |
py | 指定したPythonファイルを、特定もしくは全てのPythonで実行する |
update | pythonbrew本体を更新する |
version | pythonbrew本体のバージョンを表示する |
help | 各コマンドのヘルプを表示する |
buildout | pythonbrew経由でbuildoutを実行する |
venv | 仮想環境の作成・削除・切り替え等を行う(サブコマンドあり) |
install
指定したバージョンのPythonをインストールする。
※Mac固有と思わしき箇所は、緑色で記載しています。
使い方
$ pythonbrew install [OPTIONS] VERSION
installコマンドでデフォルトで指定されるconfigureオプション
- MACOSX_DEPLOYMENT_TARGET=Mac OS Xのバージョン
- ーーenable-shared
configureオプションが気になるかたは、Pythonのtarボールを展開して./configure --helpと./Mac/READMEをみると参考になるかと思います。
なお、AppleのGCCではデフォルトで-fPIC等を付けるので、configureのオプションパラメータを調整するときはそのあたりも考慮するとよいでしょう。
installコマンドのオプション
オプション | 短縮形 | 内容 |
---|---|---|
--force | -f | make testに失敗してもインストールを続行する |
--no-test | -n | make testをスキップする |
--verbose | -v | 詳細情報を出力する |
--configure | -C | ./configureのオプションを指定する |
--no-setuptools | setuptoolsをインストールしない | |
--as | インストールするPythonの識別名をバージョン番号ではなく任意の名前にする | |
--jobs | -j | ビルドを並行処理させる |
--framework | 配置構成をMacOSXのFramework仕様にする | |
--universal | 32bit と 64bitでビルドする | |
--static | 共有ライブラリではなく、スタティックライブラリを作成する |
--force
make testに失敗してもインストールを続行する
--no-test
make testをスキップする
--verbose
詳細情報を出力する
--configure
./configureのオプションを指定する
例:
$ pythonbrew install --configure="CC=/usr/bin/gcc-4.2" 2.7.2
configureに渡されるパラメータ:
指定された値がそのまま渡される。
./configure CC=/usr/bin/gcc-4.2
--no-setuptools
setuptoolsをインストールしない
--as
インストールするPythonの識別名をバージョン番号ではなく任意の名前にする
例:
$ pythonbrew install --as="hoge" 2.7.2 => ~/.pythonbrew/pythons/Python-hoge/
$ pythonbrew switch hoge
--jobs
ビルドを並行処理させる。makeのパラメータに渡される
例:
$ pythonbrew install -j2 2.7.2
--framework
配置構成をMacOSXのFramework仕様にする
configureに渡されるパラメータ:
--enable-framework=~/.pythonbrew/pythons/Python-xxx/Frameworks
--universal
32bit と 64bitでビルドする。ただし、対象のPythonバージョンによっては64bitコンパイルできないものもある
configureに渡されるパラメータ:
--enable-universal-sdk=/ --with-universal-archs=intel
※--enable-universal-sdkはMac固有のパラメータ。
--static
共有ライブラリではなく、スタティックライブラリを作成する。--enable-sharedオプションが指定されなくなる。--frameworkオプションとの併用はできない。
uninstall
指定したバージョンのPythonをアンインストールする。
指定したバージョンに紐付く、venvコマンドで作成した仮想環境も同時に削除される。
使い方
$ pythonbrew uninstall VERSION
cleanup
ビルド時のファイルやPythonのtarボール等、不要になったファイルを削除する。
使い方
$ pythonbrew cleanup
switch
使用するPythonのバージョンを切り替える。ターミナルのセッションをまたいで有効になる。
使い方
$ pythonbrew switch VERSION
use
現在のターミナルセッションに対して、使用するPythonのバージョンを切り替る。
使い方
$ pythonbrew use VERSION
off
pythonbrewを無効にする。
再びpythonbrewを有効にする場合は、switchコマンドを使用する。
使い方
$ pythonbrew off $ which python /usr/bin/python $ pythonbrew switch 2.7.2 Switched to Python-2.7.2 $ which python /Users/foo/.pythonbrew/pythons/Python-2.7.2/bin/python
symlink
各バージョンのPythonに対するシンボリックリンクを作成する。
使い方
$ pythonbrew symlink [OPTIONS]
py
指定したPythonファイルを、特定もしくは全てのPythonで実行する。
使い方
$ pythonbrew py PYTHON_FILE
pyコマンドのオプション
オプション | 短縮形 | 内容 |
---|---|---|
--python=VERSION | -p VERSION | 指定したバージョンでPythonを実行する |
--verbose | -v | 各バージョンのPythonを実行するとき、そのPythonのバージョンを表示する |
使用例
# 全てのバージョンのPythonで実行する $ pythonbrew py foo.py # 指定したバージョンのPythonで実行する $ pythonbrew py -p 2.7.2 -p 2.5.6 foo.py
update
pythonbrew本体を更新する。
使い方
$ pythonbrew update
version
pythonbrew本体のバージョンを表示する。
使い方
$ pythonbrew version
help
各コマンドのヘルプを表示する。
使い方
$ pythonbrew help [COMMAND]
buildout
buildoutを実行する。buildout.cfgが格納された位置で実行する。
使い方
$ pythonbrew buildout
venv
仮想環境の作成・削除・切り替え等を行う。
使い方
$ pythonbrew venv [OPTIONS] [SUB_COMMAND] [VIRTUAL_ENV_NAME]
venvコマンドのサブコマンド
create
仮想環境を作成する。
環境変数VIRTUALENV_USE_DISTRIBUTE=trueと設定しておくと、仮想環境ではsetuptoolsではなくdistributeがセットアップされる。
例:
# switchで有効にしたバージョンのPythonをベースに、仮想環境py27を作成する $ pythonbrew venv create py27 # 2.5.6のバージョンをベースに、仮想環境py25を作成する $ pythonbrew venv create -p 2.5.6 py25 # 2.7.2環境のsite-packageから独立した仮想環境py27_independentを作成する $ pythonbrew venv create -p 2.7.2 --no-site-package py27_independent # distribute付きの仮想環境py27_distributeを作成する $ VIRTUALENV_USE_DISTRIBUTE=true pythonbrew venv create py27_distribute
delete
指定した仮想環境を削除する。
例:
# 実環境2.7.2ベースの仮想環境py27, py27_independent py27_distributeをまとめて削除する $ pythonbrew venv delete py27 py27_independent py27_distribute # 実環境2.5.6ベースの仮想環境py25を削除する $ pythonbrew venv delete -p 2.5.6 py25
use
指定した仮想環境を使用する。
仮想環境を終了するには`deactivate`コマンドを実行する。
例:
# 2.5.6ベースの仮想環境py25を使う $ pythonbrew venv use -p 2.5.6 py25 # py25仮想環境を終了する $ deactivate # 2.7.2ベースの仮想環境py27を使う $ pythonbrew venv use py27 # py27仮想環境を終了する $ deactivate
list
仮想環境のリストを表示する。
例:
$ pythonbrew list -a
サブコマンドのオプション
サブコマンド | オプション | 短縮形 | 内容 |
---|---|---|---|
create, delete, use, list | --python=VERSION | -p VERSION | 指定したバージョンでvenvサブコマンドを実行する |
list | --all | -a | 全ての仮想環境の一覧を表示する |
create | --no-site-package | -n | 仮想環境から、実環境のsite-packageを参照しない。 |
Pythonのバグサイト(bugs.python.org)にバグをレポートしてみる
Python 2.7.2のインストールでエラー(*)が出て、一部公式パッチが見当たらなかったので、PythonのIssue Trackerにバグを投稿してみました。
またお世話になりそうなので、メモしておきます。
(*)エラーの詳細→http://toggtc.hatenablog.com/entry/2012/01/29/014540
アカウントの作成
ここでアカウントを登録します。
http://bugs.python.org/
OpenIDを使ってログインするか、ページ左側の「Register」というリンクから辿ってアカウントの登録を行います。
アカウントの登録を行う場合、以下の項目を入力します。
項目 | 内容 |
---|---|
Name | 名前 |
Login Name* | ログイン名(アカウントID) |
Login Password* | ログインパスワード |
Confirm Password* | パスワードの確認 |
Phone | 電話番号 |
Organisation | 所属組織 |
E-mail address* | Eメールアドレス |
Alternate E-mail address, One address per line | その他のEメールアドレス |
(*は必須)
投稿する、その前に
「Search」のリンクから、既に同じ内容のIssueが投稿されていないか検索しましょう。
Issueが重複すると、中の人にとっては負担になってしまいます。最新版リリース後にパッチが作られているかもしれないので、対象バージョンのリリースより前まで遡って調べたほうがいいでしょう。
またバグかどうかよく分からないものは、メーリングリストに投稿するという手もあります。
http://mail.python.org/mailman/listinfo
投稿する
ログインしたら、http://bugs.python.org/の左側に、「Create New」という項目が表示されます。
「Create New」のリンク先を開くと、Issueの編集画面が表示されます。
各入力項目をみていきます。
classification: 分類
設定した分類が間違っていたら、親切な中の人が修正してくれます。
- Title:件名
- Type:種別
- no selection: 未選択
- behavior: 挙動、調子
- crash: クラッシュ
- compile error: コンパイルエラー
- resource usage: リソースの取り扱い =>リソース枯渇しやすいコードだとか、メモリ解放してないとか
- security: セキュリティ
- performance: パフォーマンス
- enhancement: 強化 => 機能強化とか品質強化、ですかね
- State:状態 =>初期は設定不可
- Components:コンポーネント =>問題の対象となっているPythonのコンポーネントを選択します(複数選択可)
- Versions:バージョン =>なるべく、他のバージョンでも再現するかチェックしておくといいですね
process: 進行状態
processの欄には、主にバグ等Issueの内容を記入します。
- Assinged To: Issueの割当先。権限のあるメンバでないと変更できない、っぽい
- Nosy List: このIssueの更新が通知される人のリスト、のようです
- 投稿者と選択したコンポーネントの関係者が自動で追加されるので、未設定でOKです。この人に見て欲しい、というのがあれば、対象者のpythonユーザIDを入力します。ちなみに各コンポーネントのエキスパートは以下のページに記載されています。
- http://docs.python.org/devguide/experts.html#experts
- Priority: 優先度。権限のあるメンバでないと変更できない、っぽい
- keywords: キーワード。権限の(ry
- Comment: コメント
- バグ報告の場合、英語が苦手ならログを送るだけでいいと思いますが、前提となる環境や条件は明記しておきましょう
- File: 添付ファイル
- 添付ファイルは1つしか付けられないようです。なるべくpythonの外にあるサイトのURLは貼らないほうがよさそうです。リンク切れするといけないので。(私はついやってしまいましたが、、)
- File Description: 添付したファイルの内容
- Remote hg repo: Pythonのリポジトリにあるパッチ等のパスを入れるみたいです
バグレポートを書くときの注意点
以下のページが参考になります。
ウノウラボ
良いバグレポートの書き方
http://labs.unoh.net/2006/05/post_13.html
MOZILLA DEVELOPER NETWORK
Bug writing guidelines
https://developer.mozilla.org/ja/Bug_writing_guidelines
特に障害解析をする側の立場から見ると、事象が発生する条件は大事ですよね。
投稿したもの
パッチが見当たらなかったのでドキドキしながら無邪気に投稿してみたもの。
http://bugs.python.org/issue13901
今回はパッチを自分なりに作って投稿してみました。
MacユーザUZEEEEってdisられるかな、と思ったのですが、ビルドエキスパートonMacなNed氏にさっそくパッチを修正していただきました。さらにMacでのバイナリ特性についても説明していただいて、感動でした。Thanks, Ned!
修正していただいた内容だとLinux環境でも同じ事象が起こるんじゃないかと思い、試してみたのですが、pure GCCは-L(空白)を許容してApple GCCは許容しませんでした。というわけで、Ned氏の修正の方が正しいですね。(ディスクの空きがなくて、Linux+GCC 4.2環境を作るのに手こずっちゃった。)
今回の修正は、Python 2.7.3, 3.2.3でリリースされるようです。楽しみですヽ(´ー`)ノ
コミュニティーに参加すると刺激があって良いですね。Pythonをいじっていたはずなのに、Macのバイナリにもっと詳しくなろうとか、英語を上達させようとか思えてきますから。
test_get_outputsで実行されるgccコマンドのGNU's GCCとApple's GCCの違いをメモ:
# # configure # # on Linux (GNU's GCC) ./configure CC=/usr/local/bin/gcc CXX=/usr/local/bin/g++ --enable-shared --enable-unicode=ucs4 # on Mac (Apple's GCC) ./configure CC=/usr/bin/gcc-4.2 CXX=/usr/bin/g++-4.2 LDFLAGS='-L/usr/local/lib -L/usr/X11R6/lib --enable-shared MACOSX_DEPLOYMENT_TARGET=10.7 # # compile # # on Linux (GNU's GCC) /usr/local/bin/gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/toggtc/.pythonbrew/pythons/Python-2.7.2/include/python2.7 -c /tmp/.../foo.c -o /tmp/.../foo.o # on Mac (Apple's GCC) /usr/bin/gcc-4.2 -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/toggtc/.pythonbrew/pythons/Python-2.7.2/include/python2.7 -c /var/folders/.../foo.c -o /var/folders/.../foo.o # # Link # # on Linux (GNU's GCC) /usr/local/bin/gcc -pthread -shared /tmp/.…/foo.o -L/home/toggtc/.pythonbrew/pythons/Python-2.7.2 -L -L/home/toggtc/.pythonbrew/pythons/Python-2.7.2/lib -lpython2.7 -o /tmp/.../foo.so # => foo.so created # on Mac (Apple's GCC) /usr/bin/gcc-4.2 -bundle -undefined dynamic_lookup -L/usr/local/lib -L/usr/X11R6/lib /var/folders/.…/foo.o -L`pwd` -L -o /var/folders/..../foo.so # =>ld: warning: directory not found for option '-L-o'
MacでmanコマンドがNo manual entry for gccを返すときはsudoで
$ man gcc No manual entry for gcc
こんなときは、
$ sudo man gcc
それでも見つからないときは、環境変数MANPATHが通っているか確認する
$ echo $MANPATH /usr/local/share/man:/usr/local/man:usr/share/man
もしくは、Mac OS X Developer Libraryで探す
https://developer.apple.com/library/mac/navigation/
Mac OS X 10.7.3 リリース
OS Xの10.7.3がリリースされました。カーネルがDarwin 11.3.0に更新されます。
Hexley DarwinOS Mascot Copyright 2000 by Jon Hooper. All Rights Reserved.
↑Darwinのマスコットキャラ、Hexleyくんです。
ライオンという化けの皮をはがすとカモノハシになるんですよ、ええ。
さて、OS X 10.7.2から10.7.3へアップデートした場合、以下のようにカモノハシカーネルとSafariがバージョンアップします。
クラッシュした人が多数居るようなので、しばらく様子を見たほうがいいでしょう。
参考:http://news.mynavi.jp/news/2012/02/03/132/
それでもなお、という方はアップデートしてみてください。
私はアップデートして、ChromeやThunderbird、Evernote、MacVim等々を使用しましたが特にクラッシュは発生していません。
10.7.3 アップデートの内容:
http://support.apple.com/kb/DL1485?viewlocale=ja_JP
http://support.apple.com/kb/HT5048?viewlocale=ja_JP
セキュリティアップデートの詳細:
http://support.apple.com/kb/HT1222?viewlocale=ja_JP
個人的にはスリープ復帰後にWiFiに繋がらなくなる問題が解決した点が嬉しい。
事前準備
(1) バックアップ
事前に重要なデータをバックアップしておくなり、Time Machineを使ってバックアップを作成するなりしてください。
(参考)Time Machineの使い方:http://support.apple.com/kb/HT1427?viewlocale=ja_JP
#バックアップなんていらねぇよ、そんなディスクスペースねぇよ、という私のような方はリスク覚悟でそのままアップデートしてください。
(2) 空き領域確保
また、アップデートソフトウェアのサイズが744MB程あるので、ある程度の空き容量を確保しておいてください。
(アップデート完了後に、アップデートソフトウェアは自動で削除されます)
(3) アプリケーション終了
起動中のアプリケーション(ブラウザとか)を終了しておきます。
(4) 電源ケーブルを繋いでおく
MacBookな方は、電源ケーブルを繋いでおきましょう。
アップデート手順
アップデートを開始したら、終了するまで中断しないでください。
(1) 左上のりんごマークを押して、ソフトウェア・アップデートを選択する
(2) ちょっと待つ
(3) 「詳細情報を表示」を押す
(4) Mac OS X アップデートが含まれていることを確認して、「x項目をインストール」を押す
(5) 同意する
(6) しばらく待つ
(7) 再起動する
(8) 結構待つ
再起動時に、ソフトウェアのアップデートが実行されます。
(9) ログインする
起動したら、いつも通りログインします。
(10) もう一度(1)を実行して、アップデートが無いか確認する
(11) アップデートされたか確認する
りんごマークを押して、「このMacについて」を選択する
10.7.3と表示されればアップデート成功です。
Terminalから`uname -r`と打っても確認できます。