Hatena::Groupfukuoka-py

uchikoshi22.py

 | 

2011-12-11

virtualenvの導入

07:43

複数のPythonの環境で開発するために、Pythonではvirtualenvというパッケージが用意されています。


ただ、このvirtualenv、ちょこっと調べた程度では私には今一理解できなかったので、環境を導入するのと同時に、今まで私がやっていた原始的なPythonのバージョンの使い分けとの違いをもう一度整理してみたところ、私自身の大きな勘違いに気が付きました。


virtualenvはPythonのヴァージョン使い分け環境ではない。


これまでずっとvirtualenvを必要と感じなかったのも、こんな勘違いからでした。

python2.6を使いたければ、pythonとたたけばいいし、python2.5ならpython2.5、python2.7ならpython2.7、python3.2ならpython3.2、で別に問題ない、と。


virtualenv環境を使うともう少しだけ広い使い方ができます。

(正直、導入して実際に色々検証してみるまで理解できなかった情弱です。。。)


virtualenvを使うことで、こんな使い方を一つのOS上で切り替えて使うことができます。

通常通り、pipやaptで入れたパッケージ全てが動くグローバル環境

python2.6 + Django1.1だけが動く仮想環境

python2.6 + Django0.9 + mysql-pythonだけが動く仮想環境

python2.5 + Django1.1だけが動く仮想環境

python2.5 + Django0.9 + mysql-pythonだけが動く仮想環境

などなど。。。



◎つまり、

virtualenvを使わず、複数のPythonのヴァージョンが入っている状態がこんな感じで、

f:id:uchikoshi22:20111211072324p:image:w360

virtualenvを使うと、さらにそれぞれのPythonのヴァージョンで、(オプション指定によって)virtualenvを使わないグローバル環境で導入済みのパッケージを使ったり、全く使わずvirtualenv環境の中でのみ別にパッケージが導入してグローバル環境に依存しないPythonを導入した状態で開発ができるようになります。

f:id:uchikoshi22:20111211072322p:image:w360


なかなか言葉にする説明しづらくて、自分でも導入から仮想環境の構築をして始めて理解できたので、そのうちハンズオンなどで説明したいと思います。



Ubuntu10.04の時の注意点

Ubuntu10.04ではPython標準でないパッケージをdist-packagesにインストールしてしまいますが、virtualenv環境内ではsite-packagesにパッケージがインストールされます。virtualevn環境で--no-site-packagesなしで起動したのにグローバル環境にあるパッケージが使えない時は無理やり(?)シンボリックリンクでも貼ってdist-packages内を見に行けるようにしないといけません。

Ubuntu10.04に複数のPythonをインストールする方法

07:43

Ubuntu10.04はデフォルトでPython 2.6がインストールされています。

この環境に2.7、3.2とGoogle App Engine(GAE)用に2.5をインストールした時のメモを転記しておきます。

(手っ取り早くインストールするためのpythonbrewのインストール手順もこのポストの一番下で紹介していまs7)



●前準備

./configure --prefix=/usr/bin/python2.7 --with-threads --enable-shared

sudo apt-get install zlib1g-dev bzip2 libbz2-dev libreadline5-dev libjpeg62 libjpeg62-dev libfreetype6 libfreetype6-dev libsqlite3-0 libsqlite3-dev libgdbm3 libgdbm-dev libssl0.9.8 libssl-dev tk8.4-dev tk8.5-dev

Python 2.7

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

tar zxvf Python-2.7.2.tgz

cd Python-2.7.2/

./configure --prefix=/opt/python2.7 --with-threads --enable-shared

make

sudo make install

sudo strip /opt/python2.7/bin/python*

sudo ln -s /opt/python2.7/bin/python /usr/bin/python2.7

sudo vi /etc/ld.so.conf.d/opt-python2.7.conf

# 下記を追記

/opt/python2.7/lib

sudo /sbin/ldconfig


●Python3.2

wget http://www.python.org/ftp/python/3.2.2/Python-3.2.2.tgz

tar xzvf Python-3.2.2.tgz

cd Python-3.2.2/

./configure --prefix=/opt/python3.2 --with-threads --enable-share

make

sudo make install

sudo strip /opt/python3.2/bin/python*

sudo ln -s /opt/python3.2/bin/python3.2 /usr/bin/python3.2

sudo vi /etc/ld.so.conf.d/opt-python3.2.conf

# 下記を追記

/opt/python3.2/lib

sudo /sbin/ldconfig


●Python2.5

#ソースから入れるとGAEの開発環境がうまく動かなかったので、hrendohさんの記事をもとにaptで入れました。(GAEの開発をするにはPILとSSL関係が別途必要です)

・sources.listに以下を追記

deb http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu lucid main

deb-src http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu lucid main

・以下を実行

sudo apt-get update

sudo apt-get install python2.5



●これまでのバージョンの使い分け

Pythonの開発環境として、Ubuntu10.04を使っていますが、標準でPython2.6が入っています。

Python2.6はUbuntuを動かす上で下手に触らない方がいいので、そのまま残しつつDjangoでの開発用に使っています。

その他に、Google App Engine(GAE)の開発のためにPython2.5、将来の勉強のためにPython3.2、通常のシェルスクリプト代用としてのちょっとしたプログラムを書くためにPython2.7と、1つのOS上で4つのPythonがインストールされています。

ヴァージョン用途起動方法
2.6システムデフォルト&Djangopython | python2.6
2.5GAE開発用python2.5
2.7シェルスクリプトの代替&GUI開発python2.7
3.2将来への布石python3.2


この環境で特に変更を加えていなければ、シェルでpythonと実行するとpython2.6の環境でPythonスクリプトは実行されます。


▼確認

zuzu:~$ which python

/usr/bin/python

zuzu:~$ ls -la /usr/bin/python

  • rwxr-xr-x 1 root root 983 2010-04-25 12:20 ipython
  • rwxr-xr-x 1 root root 331 2010-04-25 12:20 ipython2.6
  • rwxr-xr-x 1 root root 316 2010-04-25 12:20 ipython-wx
  • rwxr-xr-x 1 root root 227 2010-04-25 12:20 ipythonx

lrwxrwxrwx 1 root root 23 2011-12-10 13:46 pdb2.5 -> ../lib/python2.5/pdb.py

lrwxrwxrwx 1 root root 23 2011-09-19 14:57 pdb2.6 -> ../lib/python2.6/pdb.py

lrwxrwxrwx 1 root root 9 2011-09-19 14:57 python -> python2.6

lrwxrwxrwx 1 root root 9 2011-09-19 14:57 python2 -> python2.6

  • rwxr-xr-x 1 root root 1164972 2011-09-24 08:36 python2.5
  • rwxr-xr-x 1 root root 2288240 2010-04-16 23:06 python2.6
  • rwxr-xr-x 1 root root 1452 2010-04-16 22:59 python2.6-config

lrwxrwxrwx 1 root root 25 2011-12-10 13:36 python2.7 -> /opt/python2.7/bin/python

lrwxrwxrwx 1 root root 25 2011-12-10 13:54 python3.2 -> /opt/python3.2/bin/python

lrwxrwxrwx 1 root root 16 2011-11-13 17:49 python-config -> python2.6-config

lrwxrwxrwx 1 root root 29 2011-09-19 14:57 pyversions -> ../share/python/pyversions.py

なので、Pythonお約束の一行目の/usr/bin/env pythonを書くと、PATHを参照して/usr/bin内のpythonを実行するので、python2.6が起動しますが、/usr/bin/pythonはあくまでシンボリックリンクなので/usr/bin/python2.7に貼り直せば/usr/bin/env pythonを書いてpython2.7環境で走らせることが可能です。


ただし、毎回シンボリックリンクを張り替えるのも泥臭いし、なによりシステム側で依存している/usr/bin/pythonで動くヴァージョンを変えるのは怖いので、次に紹介するvirtualenvがとても役に立ちます。



一応、断っておくと最近はpythonbrewを使えばもっと簡単に複数のPythonのバージョンをインストールできます。

pythonbrewのインストールはこちら > http://d.hatena.ne.jp/pasela/20110704/pythonbrew

▼インストール手順だけ抜き出すと。。。

sudo apt-get install curl

curl -kLO https://github.com/utahta/pythonbrew/raw/master/pythonbrew-install

chmod +x pythonbrew-install

./pythonbrew-install

.bashrcに以下を追記

source $HOME/.pythonbrew/etc/bashrc

toenobutoenobu 2011/12/11 15:52 virtualenvWrapperって使ってますか?

uchikoshi22uchikoshi22 2011/12/15 15:57 > toenobuさん
実はvirtualenv自体、自分自身ではまだ差し迫った必要性がなくて、とりあえずvirtualenvがどう動くのか知りたくてインストールしただけなのでvirtualenvWrapperはまだ入れてもないんですよ。

VishalVishal 2012/02/20 22:46 This article is a home run, pure and smiple!

etjtdbetjtdb 2012/02/22 01:28 utmmP9 , [url=http://esavrxokoepj.com/]esavrxokoepj[/url], [link=http://fkgnntntvfdh.com/]fkgnntntvfdh[/link], http://qtzxeokyesir.com/

ゲスト



トラックバック - http://fukuoka-py.g.hatena.ne.jp/uchikoshi22/20111211
リンク元
 |