Glitch

MySQL, MongoDB, Python, Go

SL6にvirtualenv+python2.7

pyhton2.7を使いたいけどRHEL6はまだpython2.6なのねん(´・ω・`)
かといってyumはpython使ってるみたいだし,まさか...

ln -s /usr/local/bin/python27 /usr/bin/python

((((;゚Д゚))))ガクブル

というわけでおりこうさんにvirtualenv入れてその上でpython2.7の環境を構築しようと思います.
Macportだとpython_selectってのあるみたいだけど.いまはport selectだっけか.

python2.7

orderddictとかcounterつかいたいじゃない?
What’s New in Python 2.7 — Python v2.7.3 documentation
SnowLeopardでもRHEL6でも採用されてないバージョンを使うのは怖いけど(´・ω・`)
Ubuntu11では採用されてたけど.まぁいいや.
参考サイトです.
CentOS 5.6 に Python 2.7.1 と mod_wsgi 3.3 をインストール - Debian GNU/Linux 3.1 on PowerMac G4

$ wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz
$ tar zxvf Python-2.7.2.tgz

ここでpythonにあるzlibモジュールが標準だとインストールされないようです.
開発用zlib(zlib-devel)をインストールし,Module/Setupを書き換え.

$ sudo yum install zlib zlib-devel
$ vim Python-2.7.2/Module/Setup
# Andrew Kuchling's zlib module.
# This require zlib 1.1.3 (or later).
# See http://www.gzip.org/zlib/
zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
# ↑コメントアウトする

ここまでで準備完了.あとはいつも通りconfigure -> make -> make install.

$ cd Python-2.7.2
$ ./configure --with-threads --enable-shared
$ make
$ make install

正直configureのoptionはよくわかってません...
ここちゃんと調べないとなぁ.

    • with-threadはスレッドの有効化,--enable-sharedはライブラリの共有だそうです.

共有ライブラリ(--enable-shared)指定は以下の通り.

$ vim /etc/ld.so.conf.d/python2.7.conf
$ /sbin/ldconfig

これでめでたく以下のコマンドでpython2.7起動です.

$ /usr/local/bin/python
Python 2.7.2 (default, Dec 18 2011, 00:45:19) 
[GCC 4.4.5 20110214 (Red Hat 4.4.5-6)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

うむ(`・ω・´)

virtualenv

仮想環境変数を構築するものですね.
参考サイト.
virutualenvとvirtualenvwrapperとpipを使う - YAMAGUCHI::weblog
とりあえずpython-setuptools -> easy_install -> virtualenvの流れで.

$ yum install python-setuptools
$ easy_install pip
$ pip install virtualenv
$ virtualenv --version
1.7

最新版いいね(・∀・)

ついでにvirtualenvを管理してくれるvirtualenvwrapperも入れました.

$ pip install virtualenvwrapper

ほいで.zshrcに以下を記述.

export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python
source /usr/bin/virtualenvwrapper.sh

二行目がないとなぜかVIRTUALENVWRAPPER_PYTHONが/usr/local/bin/pythonを参照してしまってインポートエラーが出てしまったです.

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named virtualenvwrapper.hook_loader
virtualenvwrapper.sh: There was a problem running the initialization hooks. If Python could not import the module virtualenvwrapper.hook_loader, check that virtualenv has been installed for VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python and that PATH is set properly.

python2.7環境をvirtualenvで

こっから本番!

mkvirtualenv --python=/usr/local/bin/python2.7 --no-site-packages --distribute ~/python2.7

pythonの実行ファイルを指定します.-p PYTHON_EXEも可能.

  • --no-site-packages

グローバルなsite-packagesとvirtualenv環境が隔離されます.
まっさらな環境がほしい時はこれ.
virtualenv1.7からデフォルトになったみたいです.

  • --distribute

パッケージ管理にsetuptoolsの代わりにdistrubuteを使用するそうです.
.zshrcに以下を記述してデフォルトに出来ます.

export VIRTUALENV_DISTRIBUTE=true

ちなみにこれ,Documentと--helpで記述違いますが,--helpのほうが正解でした.


んでまとめ.

# 環境作成
$ mkvirtualenv --python=PYTHON_EXE (envname)
# 環境切り替え
$ workon (envname)
# 元の環境に戻る
$ deactivate
# 環境削除
$ rmvirtualenv (envname)

(おまけ)環境を移行したい時は?

pipを使います.
[移行元]

$ pip freeze > packages.txt
$ pip bundle -r packages.txt source.pybundle

  ↓
[移行先]

# ネット接続環境下
$ pip install -r packages.txt
# ネットなくてもOK
$ pip install source.pybuldle