작성일 댓글 남기기

ipython 설치

ubuntu 12.04 에서 ipython을 설치하고 ipython notebook 을 웹브라우저로 접속해보자.

사실 그냥 apt-get install ipython-notebok 명령으로 매우 간단하게 설치할 수 있다.
하지만 ubuntu 12.04 에 포함된 ipython 은 지난 버전이고 웹인터페이스가 좀 구리고 기능이 떨어진다.
그래서 pip를 통해서 최신버전을 설치할 것이다.

 

필요한 패키지를 미리 설치한다.

magellan@ucloud:~$ sudo apt-get install -y python-dev python-pip python-virtualenv gcc g++

 

virtualenv를 이용하여 가상환경에다가 설치하자.

magellan@ucloud:~$ virtualenv --no-site-packages ipython_env
magellan@ucloud:~$ . ipython_env/bin/activate
(ipython_env)magellan@ucloud:~$

 

 

준비가 되었으니 ipython을 설치하자

(ipython_env)magellan@ucloud:~$ pip install ipython[all]

 

 

jinja, tornado, sphinx, zmq 등 이것저것 막 설치된다.
뭐가 설치됐나 보자.

(ipython_env)magellan@ucloud:~$ pip freeze
Jinja2==2.7.1
MarkupSafe==0.18
Pygments==1.6
Sphinx==1.2b3
argparse==1.2.1
distribute==0.6.24
docutils==0.11
ipython==1.1.0
nose==1.3.0
pyzmq==13.1.0
tornado==3.1.1
wsgiref==0.1.2

 

 

ipython을 실행해보자.

(ipython_env)magellan@ucloud:~$ ipython
Python 2.7.3 (default, Sep 26 2013, 20:03:06)
Type "copyright", "credits" or "license" for more information.

IPython 1.1.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.

In [1]:

이제 ipython notebook 도 실행해보자.

(ipython_env)magellan@ucloud:~$ ipython notebook

 

 

실행하면 잠깐 실행에 대한 출력이 보이더니 텍스트웹브라우저인 w3m화면으로 넘어간다.
이건 볼 필요가 없으므로 q 키를 눌러 빠져 나오면 아래와 같이 나온다.

(ipython_env)magellan@ucloud:~$ ipython notebook
2013-10-24 17:22:12.454 [NotebookApp] Using existing profile dir: u'/home/magellan/.ipython/profile_default'
2013-10-24 17:22:12.460 [NotebookApp] Using MathJax from CDN: http://cdn.mathjax.org/mathjax/latest/MathJax.js
2013-10-24 17:22:12.480 [NotebookApp] Serving notebooks from local directory: /home/magellan
2013-10-24 17:22:12.481 [NotebookApp] The IPython Notebook is running at: http://127.0.0.1:8888/
2013-10-24 17:22:12.481 [NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

 

웹브라우저에서 http://127.0.0.1:8888 으로 접속하면 ipython notebook 의 화면을 볼 수 있다.

 

그런데 ipython notebook 의 실행될 때 바인딩되는 주소가 127.0.0.1이기 때문에
ipython을 서버에 설치하고 외부에서 접속할려면 바인딩되는 주소를 수정할 필요가 있다.

설정을 수정해보자.
설정을 수정할려면 설정파일을 생성해야 한다.

(ipython_env)magellan@ucloud:~$ ipython profile create
[ProfileCreate] Generating default config file: u'/home/magellan/.ipython/profile_default/ipython_config.py'
[ProfileCreate] Generating default config file: u'/home/magellan/.ipython/profile_default/ipython_notebook_config.py'
[ProfileCreate] Generating default config file: u'/home/magellan/.ipython/profile_default/ipython_nbconvert_config.py'

설정파일 중 /home/magellan/.ipython/profile_default/ipython_notebook_config.py 열어서 아래처럼 수정한다.

# c.NotebookApp.ip = '127.0.0.1'
c.NotebookApp.ip = '0.0.0.0'

 

 

다시 ipython notebook을 실행해보자.

 

(ipython_env)magellan@ucloud:~$ ipython notebook
2013-10-24 17:22:12.454 [NotebookApp] Using existing profile dir: u'/home/magellan/.ipython/profile_default'
2013-10-24 17:22:12.460 [NotebookApp] Using MathJax from CDN: http://cdn.mathjax.org/mathjax/latest/MathJax.js
2013-10-24 17:22:12.480 [NotebookApp] Serving notebooks from local directory: /home/magellan
2013-10-24 17:22:12.481 [NotebookApp] The IPython Notebook is running at: http://0.0.0.0:8888/
2013-10-24 17:22:12.481 [NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

접속주소가 http://0.0.0.0:8888/ 로 된 것을 확인할 수 있다.

이제 웹브라우저에서 http://서버주소:8888 로 접속하면 ipython notebook 화면을 볼 수 있다.

Cap 2013-10-24 17-34-06-710

작성일 댓글 남기기

mod_wsgi를 이용한 multiple apps 세팅

django나 flask, bottle 같은 파이썬프레임웍을 apache에 붙이기 위해 mod_wsgi를 이용할 때
여러개의 app을 사용하게 되면 각 app별로 process를 유일한 이름을 세팅해야 된다.
그렇지 않으면 기대하지 않은 결과가 발생할 수 있다.

보통 wsgi 세팅할 때,

<VirtualHost *>
    ServerName hyunsu.com

    WSGIDaemonProcess myapp user=user1 group=group1 threads=5
    WSGIScriptAlias /myapp /home/apps/myapp/apps.wsgi

    <Directory /home/apps>
        WSGIProcessGroup myapp
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

이렇게 세팅하는데 여기에 app을 하나 추가한다면 아래와 같이 할 수 있다.

 

<VirtualHost *>
    ServerName hyunsu.com

    WSGIDaemonProcess myapp user=user1 group=group1 threads=5
    WSGIScriptAlias /myapp /home/apps/myapp/apps.wsgi

    WSGIScriptAlias /myapp2 /home/apps/myapp2/apps.wsgi 

    <Directory /home/apps> 
        WSGIProcessGroup myapp 
        WSGIApplicationGroup %{GLOBAL} 
        Order deny,allow 
        Allow from all 
    </Directory>
</VirtualHost>

 

근데 이렇게 하면 hyunsu.com/myapp 으로 연결했을 때 hyunsu.com/myapp2의 컨텐츠가 로딩되고
물론 hyunsu.com/myapp2로 연결하면 hyunsu.com/myapp의 컨텐츠가 로딩되기도 한다.

하나의 process에 여러개의 apps을 연결할 때, 각각의 apps의 경로가 중복되면 이런 현상이 발생하는 것으로 보인다.

이런 문제를 피하기 위해 각 apps별로 process를 분리해야 한다.

    WSGIDaemonProcess myapp user=nobody group=nobody processes=1 threads=5
    WSGIDaemonProcess myapp2 user=nobody group=nobody processes=1 threads=5
    WSGIScriptAlias /myapp /home/apps/myapp/apps.wsgi process-group=myapp application-group=%{GLOBAL}
    WSGIScriptAlias /myapp2 /home/apps/myapp2/apps.wsgi process-group=myapp2 application-group=%{GLOBAL}

 

여러개의 app이 하나의 VirtualHost 내에 있든, 여러 VirtualHost에 각각 나눠져 있든지 간에 각 app은 각 process를 가지야 한다.