akiyoko blog

akiyoko の IT技術系ブログです

Ubuntu+virtualenv環境で Djangoアプリケーションを作ってみる

やりたいこと

  • Ubuntu に virtualenv環境を作る(virtualenvwrapperを使用)
  • Djangoをインストール
  • virtualenv環境で Djangoアプリケーションを作る

環境

  • Ubuntu Server 12.04.4 LTS(on VMware Player)
  • Python 2.7.3
  • pip 未インストール(Ubuntuインストール直後の状態)

1. pip をインストールする

Python系パッケージは、apt-get を使わず、pip でインストールすることにします。理由は以下の通り。

aptからpython-パッケージ名を探せば多くはインストール可能。pipを使うほうが最新版が入るのでpipを使う。プロキシ環境ではプロキシオプションをつけるか、

sudo -E pip install パッケージ名

でユーザーの環境変数を引き継ぐといい。ライブラリ不足等依存関係が面倒な人はaptでpthon-ライブラリ名みたいなのを探して入れると楽。ただし最新版とは限らない(たいてい一つ前)

開発環境 - memoring - Seesaa Wiki(ウィキ)」より引用


pip をインストールします。

$ sudo apt-get update
$ sudo apt-get -y install python-pip
$ pip --version
pip 1.0 from /usr/lib/python2.7/dist-packages (python 2.7)
$ sudo pip --version
pip 1.0 from /usr/lib/python2.7/dist-packages (python 2.7)


(pip のバージョンが低いので)pip を最新化します。

$ sudo pip install -U pip
Downloading/unpacking pip
  Downloading pip-1.5.4.tar.gz (1.1Mb): 1.1Mb downloaded
  Running setup.py egg_info for package pip
    ・
    ・
    Installing pip script to /usr/local/bin
    Installing pip2.7 script to /usr/local/bin
    Installing pip2 script to /usr/local/bin
Successfully installed pip
Cleaning up...

なお、プロキシの設定が必要な場合は、

$ export http_proxy=http://proxy.example.com:8080/
$ export https_proxy=http://proxy.example.com:8080/
$ sudo -E pip install -U pip  # -Eオプションでユーザーの環境変数を引き継ぐ

でいけると思います。
参考:http://stackoverflow.com/questions/14149422/using-pip-behind-a-proxy


ここで、pip をアップデートすると、sudo を付けないと pip コマンドが「/usr/bin/pip: No such file or directory」で実行できなくなってしまいました。

$ pip --version
-bash: /usr/bin/pip: No such file or directory
$ sudo pip --version
pip 1.5.4 from /usr/local/lib/python2.7/dist-packages (python 2.7)

悩ましいなぁと思っていたら、sudo reboot で再起動することで、sudoでなくても実行できるようになりました。(screenで作業して、デタッチして再度アタッチしても同じ。)


2. virtualenv をインストールする

virtualenv をインストールします。

$ sudo pip install virtualenv
Downloading/unpacking virtualenv
  Downloading virtualenv-1.11.4-py2.py3-none-any.whl (1.7MB): 1.7MB downloaded
Installing collected packages: virtualenv
Successfully installed virtualenv
Cleaning up...
$ virtualenv --version
1.11.4


続いて、virtualenvwrapper をインストールします。

$ sudo pip install virtualenvwrapper
Downloading/unpacking virtualenvwrapper
  ・
  ・
Successfully installed virtualenvwrapper virtualenv-clone stevedore
Cleaning up...
$ which virtualenvwrapper.sh 
/usr/local/bin/virtualenvwrapper.sh
$ vim ~/.bash_profile
-----
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
-----
(※↑を末尾に追記)

$ vim ~/.bashrc
-----
source /usr/local/bin/virtualenvwrapper.sh
export WORKON_HOME=~/.virtualenvs
-----
(※↑を末尾に追記)

$ source ~/.bashrc

参考

 

3. virtualenv を使う

「webapp」という名前のサンドボックスを作成してみます。

$ mkvirtualenv webapp
NOTE: Virtual environments directory /home/ubuntu/.virtualenvs/ does not exist. Creating...
New python executable in webapp/bin/python
Installing setuptools, pip...done.
# virtualenv環境から抜ける
$ deactivate

# virtualenv環境の一覧表示
$ workon

# virtualenv環境に入る
$ workon webapp

# virtualenv環境を削除する
$ rmvirtualenv webapp

参考:http://virtualenvwrapper-docs-ja.readthedocs.org/en/latest/command_ref.html


ここで注意!
virtualenv環境上に何かをインストールするときは、「pip install django」のように sudo を付けないようにします。

この時sudoで実行しないように気をつけましょう。sudoを使うとPATHが異なるため、仮想環境外のpipを実行してしまう可能性があります。調べてみたら、PIP_RESPECT_VIRTUALENV環境変数にtrueを設定するとvirtualenvの中にpipが空気を読んでインストールしてくれるようになるみたい。なので.zshrcなどに

export PIP_RESPECT_VIRTUALENV=true

と書いておくと幸せになれるのかも。

virtualenvを使ってPython2.5とDjango0.96が動く環境を作ってみる - SELECT * FROM life;」より


ちなみに、「pip freeze -l」で、virtualenv環境にインストールされているパッケージの一覧を出力することができます。これを使って、別環境で同一ライブラリをインストールすることも可能です。

(env1)$ pip freeze -l > pip_freeze.txt
(env2)$ pip install -r pip_freeze.txt

参考:http://inaz2.hatenablog.com/entry/2013/05/27/231641


4. Django をインストールする

virtualenv環境内で、Django をインストールします。

$ workon webapp
(webapp)$ pip install django
Downloading/unpacking django
  Downloading Django-1.6.2-py2.py3-none-any.whl (6.7MB): 6.7MB downloaded
Installing collected packages: django
Successfully installed django
Cleaning up...


Djangoのバージョンを調べます。

(webapp)$ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.get_version()
'1.6.2'

or

(webapp)$ python -c 'import django; print django.get_version()'
1.6.2

参考:http://d.hatena.ne.jp/killingout_n-bita/20130601/1370052304


なお、Django の全体像は「Django入門 - memomemo」の「Djangoのアーキテクチャ全体像」あたりが分かりやすいです。


5. Django アプリケーションを作る

Django プロジェクトを作成します。

(webapp)$ sudo mkdir -p /opt/webapps
(webapp)$ sudo chown `whoami`. /opt/webapps
(webapp)$ cd /opt/webapps/
(webapp)$ django-admin.py startproject mysite

# /opt/webapps/ 直下に、「mysite」ディレクトリが作成されます。

# 「mysite」ディレクトリ以下はこのようになりました。
(webapp)$ tree -a /opt/webapps/mysite/
/opt/webapps/mysite/
├── manage.py
└── mysite
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py


続いて、Django アプリケーションを作成します。

(webapp)$ cd mysite/
(webapp)$ ./manage.py startapp test_app

# 「mysite」ディレクトリ以下はこのようになりました。
(webapp)$ tree -a /opt/webapps/mysite/
/opt/webapps/mysite/
├── manage.py
├── test_app
│   ├── admin.py
│   ├── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
└── mysite
    ├── __init__.py
    ├── __init__.pyc
    ├── settings.py
    ├── settings.pyc
    ├── urls.py
    └── wsgi.py


ゲストOSの IPアドレスを指定して、Djangoサーバを起動します。

(webapp)$ ./manage.py runserver 192.168.211.128:8000
Validating models...

0 errors found
February 22, 2014 - 14:47:24
Django version 1.6.2, using settings 'mysite.settings'
Starting development server at http://192.168.211.128:8000/
Quit the server with CONTROL-C.


http://192.168.211.128:8000/
にブラウザからアクセスして、「It worked!」が表示されればOKです。

f:id:akiyoko:20140222235453p:plain

参考