やりたいこと
- 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
参考
- http://blog.mitsukuni.org/2010/10/25/python-development-environment
- http://cloverrose.hateblo.jp/entry/2012/10/01/235126
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です。
参考