29 Ağustos 2013 Perşembe

Django os.path proje klasörü ve bi üst klasör.

Djangoda static file ve template çalıştırmak için settings.py da aşağıdaki değişiklikleri yapın.
 
settings.py

En başa üc kodu ekliyoruz.


import os.path
import sys
PROJECT_ROOT = os.path.dirname(__file__)
 
 
70. 
STATIC_URL = '/static/'  
 
 
73. 
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(os.path.dirname(__file__), 'templates/static'),
    
) 

113.

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(os.path.dirname(__file__), 'templates'),
)

Django shell ve Python-twitter kullanımı ? Python Twitter nedir ?

Python kullanıcılarının twitter api kullanarak  https://dev.twitter.com/docs/api/1.1 buradaki rest api isteklernin hepsini yapmaya yarar . Burun python-twitter resmi sayfası http://code.google.com/p/python-twitter

Şimdi dosyayı indirdiğimizde githubtan indirebilirsiniz : https://github.com/bear/python-twitter

Öncelikle virtualenv kullanıyorsanız bunları yapın kullanmıyorsanız burakı geçin.

virtualenv venv
.  venv/bin/activate

virtualenvi aktif ettikten sonra

git clone git://github.com/bear/python-twitter.git
cd python-twitter 

indirip giriş yaptık.

Çalışması için gerekli olan eklentileri kurmak gerekli 



AMA bunlarla uğraşmanıza gerek ok python-twitter kalsörüne cd ile giriş yaptıysanız.

pip install -r requirements.txt
pip install django
 
Gerekli eklentileri indirir..
Bu satırlar eklentiyi kurar dikkat edin bu kodların çalışması için python-twitter klasörünün
içinde olmanız gerekir aksi taktirde hata verecektir. çünkü python-twitter içine bir 
bakın setup.py diye dosya var o dosyayı kuruyor. 
 
python setup.py build
$ python setup.py install 

$ python setup.py test
 
ile test edebilirsiniz.
 
şimdi bir django  projesi oluşturalım şimdilik sadece shell ile retweet ve favori yapacağım.


django-admin.py startproject mysite
cd mysite
python manage.py shell

diyerek python shell bölümüne giriş yaptık.

import simplejson
import httplib2
import twitter

api = twitter.Api(consumer_key='consumer_key', 
                         consumer_secret='consumer_secret', 
                         access_token_key='access_token', 
                         access_token_secret='access_token_secret')

http://dev.twitter.com 'a girip kayıt olup create new app 'ten yeni bi app oluştutup consumer_secret ve
consumer_secret i yazıp kendi tokenlerinizida yazınca auth olmuş oluyorsunuz..

ARTIK TWİTTER İLE GİRİŞ YAPMIŞ SAYILIYORSUNUZ.

Statü güncelleme :

  >>> status = api.PostUpdate('I love python-twitter!')
  >>> print status.text
  I love python-twitter!
 
Retweet yapma ve Favori yapma 
 
>> favorite = api.CreateFavorite(api, 320911534362611712)
 
favorite = api.CreateFavorite(self, id) oalrak geçiyor self bölümüne auth yaptığınız değişken
id bölümüne tweet id gelecek.
 
Python ile retwet yapmak :
 
retweet = api.PostRetweet(362263100612808706)   
direk id yazarak retweet yaptırabiliyoruz.
 
Diğer tüm olaylar içinde :  http://inventwithpython.com/twitter.html

Alt yapıları burada..

En yakın zamanda django ile web sayfalarında nasıl kullanıldığını gösteren bi yazı yazacağım.
 
Ozamana kadar takipte kalın http://twitter.com/yasinaktimur
 

 

22 Ağustos 2013 Perşembe

virtualenv nedir ?

İşimde ve kendi projelerimde genelde Django kullanıyorum. Django ile yazılım geliştirirken bir çok üçüncü parti uygulama kurmak gerekebiliyor. Örneğin migration işlemleri için south kurmak gerekiyor. Diyelim ubuntu kullanıyorsunuz ve south ubuntu deposunda var. Veya pip, easy_install gibi python paket sistemleri ile kurulum yapıyorsunuz. Bu durumda bu paketler sistemin geneline kuruluyor. Bu durumun ne gibi sıkıntıları var derseniz, projeye özel değişik versiyonda kütüphaneleri denemek zorlaşıyor. İşte tam bu sırada virtualenv gibi harika bir araç yardımımıza koşuyor. virtualenv kısaca bize özel bir python alanı yaratıyor ve orada yaptığımız kurulumların sadece orada geçerli olmasını sağlıyor. Şimdi ubuntu'da adım adım virtualenv kurulumu ve kullanımını inceleyelim.
Öncesinde sistemimizde easy_install ve pip kurulu değilse bu işlemleri halledelim. Terminalde aşağıdaki komutu vererek paket kurulumlarımızı yapalım.
$ sudo apt-get install python-setuptools python-dev build-essential
Evet kurmamız gereken .deb paketleri tamam. Şimdi pip kurmamız gerekiyor. İsterseniz virtualenv ile easy_install'ı kullanabilirsiniz. Ancak ben pip kullanmayı daha çok seviyorum.  ![Linkler için yazının bulunduğu siteye gidiniz.]  neden pip'in daha güzel olduğunu açıklamışlar. Aşağıdaki komutu işletelim.
$ sudo easy_install pip
pip kurulduğuna göre artık virtualenv'yi pip aracılığıyla kurabiliriz.
$ sudo pip install virtualenv
virtualenv sisteme kuruldu ve sanal python ortamları yaratmamız için bir engelimiz kalmadı. :) Bir virtual environment (sanal ortam) yaratmak için aşağıdaki gibi bir komut işletmeniz gerekiyor.
$ virtualenv --no-site-packages --distribute example
New python executable in example/bin/python
Installing distribute....................................................................................................................................................................................done.
New python executable in example/bin/pythonInstalling distribute....................................................................................................................................................................................done.
Buradaki example ortamımızın ismi. Bunu dilediğiniz gibi verebilirsiniz. Python ortamınız bu dizin içinde şekillenecek. İsterseniz path verebilirsiniz. Benim önerim python_environments gibi bir dizin açıp tüm ortamlarınızı burada bulundurmanız. Düzen iyidir :)
virtualenv'ı kurduk ancak onu aktif etmeden kullanmaya başlayamıyoruz. Aktif etmek için aşağıdaki yolu izliyoruz.
$ source example/bin/active
Bu komuttan sonra imlecin olduğu bölümün değiştiğini farkedersiniz. Genelde sanal ortamın adı yazar. Bir sorun yoksa artık aktif halde bir sanal ortamımız var. Sanal ortamdan çıkmak için diğer bir deyimle deaktif etmek isterseniz;
(example)~$ deactivate
Python sanal ortamından çıkmış oluyorsunuz böylece. Şimdi sanal ortamımızda istediğimiz paketleri kuralım. Örnek olması açısından Django üzerinden gidelim istiyorum. Django kurmak için pip komutunu aktif edilmiş sanal ortamımız içindeyken yazıyoruz.
(example)~$ pip install Django
Downloading/unpacking Django
Downloading Django-1.3.tar.gz (6.5Mb): 6.5Mb downloaded
Running setup.py egg_info for package Django
Installing collected packages: Django
Running setup.py install for Django
changing mode of build/scripts-2.6/django-admin.py from 644 to 755
changing mode of /home/cihann/example/bin/django-admin.py to 755
Successfully installed Django
Cleaning up...
Django başarıyla kuruldu. Şu an Django'nun sadece example sanal ortamında kurulu olduğunu hatırlatalım. Ayrıca farkettiyseniz kurulum yaparken sudo ile yetki almaya vs. ihtiyaç duymadık. Sistem geneline kurulmadığı için bir yetki alma gereği duymuyor. Yazı biraz uzayacak ama virtualenv ile ufak bir Django uygulaması başlatalım istiyorum. Böylece requirements.txt denen dosya ile paket yönetiminede girmiş oluruz. Django artık sanal ortamda kurulu olduğuna göre şu komutu işletiyoruz.
(example)~$ django-admin.py startproject example_django
Bu komutla bir Django projesi oluşturmuş olduk. Artık sanal ortamda pip ile paket kurmayı biliyoruz. Ancak bir çok paket kurmak istediğimizde bunları tek tek kurmak yerine paket listesini çıkarıp bunu bir dosyaya yazıp oradan kurulum ve yönetimi yapabiliriz. Bu dosyanın adı requirements.txt. Django projemizin içine gidelim ve requirements.txt adında bir dosya oluşturalım.
(example)~$ cd example_django/
(example)~/example_django$ touch requirements.txt
requirements.txt dosyamızın içine istediğimiz paketleri yazalım. Örnek olarak şöyle bir dosya ile başlayabiliriz.
South==0.7.3
django-taggit==0.9.2
Markdown==2.0.3
Evet requirements.txt dosyamız hazır. Şimdi nasıl bu paketleri bu dosya üzerinden kuracağımızı görelim.
(example)~/example_django$ pip install -r requirements.txt
Downloading/unpacking Markdown==2.0.3 (from -r requirements.txt (line 3))
Downloading Markdown-2.0.3.tar.gz (71Kb): 71Kb downloaded
Running setup.py egg_info for package Markdown
Downloading/unpacking django-taggit==0.9.2 (from -r requirements.txt (line 2))
Downloading django-taggit-0.9.2.tar.gz
Running setup.py egg_info for package django-taggit
Downloading/unpacking South==0.7.3 (from -r requirements.txt (line 1))
Downloading South-0.7.3.tar.gz (70Kb): 70Kb downloaded
Running setup.py egg_info for package South
Installing collected packages: django-taggit, Markdown, South
Running setup.py install for django-taggit
Running setup.py install for Markdown
changing mode of build/scripts-2.6/markdown from 644 to 755
changing mode of /home/cihann/example/bin/markdown to 755
Running setup.py install for South
Successfully installed django-taggit Markdown South
Cleaning up...
Süper! Paketler sanal ortamımıza kuruldu. virtualenv ile gördüğünüz üzere çok rahat bir Python çalışma ortamı kurulabiliyor. Geliştirdiğiniz uygulamayı başka bir sanal ortama taşıyıp orada farklı sürüm kütüphanelerle deneyebilirsiniz. Sanal ortamla işiniz bittiğinde onu silebilirsiniz.
Mutlu kodlamalar :)

29 Temmuz 2013 Pazartesi

Djangoda south Nedir ? Ne işe yarar ?

Modeller oluşturup ,veritabanını oluştuduğunuzu varsayalım. İçerisine verileri yerleştirdiniz. Ama zaman geçti ve modele yeni bir özellik eklemek istediniz ,yeni bir alan ya da var olan alanı değiştirmek veya silmek. Djangoda bunu sadece modeli değiştirerek yapamazsınız. Djangonun zayıf yönlerinden birtanesidir bu. Siz değişikliği yapsanızda syndb yaptığınızda veritabanı değişmez. Bunun için veritabanını silip tekrardan syncdb işlemi yapılmalı. Fakat bu durumda verilerinizi kaybedersiniz buda mantıklı bir çözüm olmamakta. Umarım djangonun ileri sürümlerinde, modeli değiştirdiğimizde veriler silinmeden yeni özellik alanlarının direk gelmesi özelliğini eklenir. Şimdilik bu problemi çözmek için South aracı geliştirilmiş. İlk olarak south aracını kurmamız gerekir.
pip install South

kurduktan sonra bu aracı kullanmak istediğimiz uygulamada INSTALLED_APPS ın içinde belirtmeliyiz.
INSTALLED_APPS = (
# ...
'south',
# ...
)

İlk Migration
Syncdb işlemininin ardından south modelimizi ilklendirmeliyiz. Henüz daha veritabanımıza veri eklemedik. Burada veritabanı boşken eklenen migration anlatılacak.ilk yaptığımız modele migration yaparsak, ilk migration olarak alır. Onun üzerinde yapılan her değişikliği yeni bir migration olarak kaydeder. Migration olmasını istediğiniz app’ı ilklendirmek gerekmektedir. Şu şekilde:
python manage.py schemamigration app_ismi --initial
ardından bize 1 mi 2 gibi tarzında soru sorduğunda 2 yi seçip
  • datetime.date.today()
  • yazmanız yeterli olacaktır.
    oluşturmuş olduğumuz migrationı uygulamak için değişikliği yaptığımız app modelinden etkilenen app’leri migrate yapmalıyız.Bu dosyaları zaten programı koştuğumuzda uyarı olarak bize belirtecektir.Yapmanız gereken o dosyalar için:
    python manage.py migrate app_ismi
    yazmak.Birden fazla dosyanız varsa sadece:

    python manage.py migrate

    yazmanız yeterli.
    Normal Migration
    Migration dosyalarınızı oluşturdunuz ve ilklendirilmiş dosyanızda sonrasında değişiklik yapma ihtiyacı hissettiniz. O halde:
    python manage.py schemamigration app_ismi --auto
    değişikliği yaptığınız app’te auto işlemini gerçekleştirmeniz gerekmektedir. Daha sonra bu modeli import ettiğiniz appleri migrate etmeniz gerekmektedir, yani bu değişiklikten etkilenen appleri.
    manage.py migrate app_name
    eğer birden fazlaysa sadece
    manage.py migrate
    yazmanız yeterli olacaktır.
    App Dönüşümü
    Yukarıda anlatılan işlemler veritabanımıza henüz veri eklemeden önce , daha sonra yapılacak değişikliklere karşı oluşturulan migrationdan bahsedildi. Şimdi ise bu başlık altında var olan veriler üzerinde sonradan eklenen migration olayları anlatılacak. Diyelim proje oluşturuldu veritabanı hazır veriler yerleştirildi sonradan migrate işlemleri eklemek istediniz. Yukarıda ki işlemleri django anlayamaz o hep var olan veri tabanını muhafaza etmeye çalışır.Bu durumda migration işlemleri şu şekilde gerçekleştirilir.
    manage.py convert_to_south app_ismi

    yaparak app’a south dönüşümü yapılır. Ardından o appı ilklendirmek gerekir
    python manage.py schemamigration app_name --initial

    ilklendirilen app’tan etkilenen dosyalara sahte migrateler yapmak gerekir.
    python manage.py migrate app_ismi 0001 --fake
    bu sayede sonradan migrate işlemlerini sahte olarak yaparız. Normal migrationdan farksızdır.
    Sonraki migrationlarda yine aynı yapı olan:
    python manage.py schemamigration app_ismi --auto
    python manage.py migrate

    komutları ile migrationları gerçekleştirebiliriz.
    ÖZET
    Veritabanı işlemlerinde var olan modelleri sonradan değiştirme işlemlerinde migration kullanımına göz attık. Yapılan migrationlara göz atmak isterseniz şu komutu kullanmanız yeterli olacaktır.
    manage.py migrate --list

    23 Haziran 2013 Pazar

    Supervisord nedir ?

    Twitter storm kullanarak bir (job scheduler) iş planlayıcı üstünde çalışıyordum. Gel gör ki Storm'un sitesinde şöyle birşey yazmışlar ve bende bunu Nimbus'u çalıştırmaya çalışırken gördüm.
    "Launches the nimbus daemon. This command should be run under supervision with a tool like daemontools or monit. See Setting up a Storm cluster for more information."
    Asıl kafamı kurcalayan kelimeler şunlar;
    "This command should be run under supervision with a tool like daemontools or monit."
    Birşeyi supervision altında çalıştırmak ta ne demek? Ne farkı var? Normal çalıştırınca olmuyor mu?
    Aslında normal çalıştırınca da bir sorun çıkmaz anladığım kadarı ile. Fakat, Storm'u çalıştırırken öğrendim ki, bir uygulamayı ayağa kaldırmak için, o uygulamanın bağımlı olduğu bir sürü farklı uygulamaları da ayağa kaldırmak gerekiyor.
    Herşeyi komut satırında teker teker komutlarla yapması ise ömrü kısaltan bir iş. Birde o uygulamalardan birinde hata çıkarsa, ve sistemi göçertirse ayıkla pirincin taşını. Herşeyi komut satırından tek tek kapat, sonra dosya vs bir sürü şeyi temizle. Sonra herşeyi komut satırından tekrar başlat...
    Supervision tool bu işi otomatikleştiren birşeymiş. Yani siz ona ne yapması gerektiğini söylüyorsunuz o da yapıyor. Herşeyi toplu halde kapatıp açabiliryor, log dosyaları tutuyor falan filan (Aslında daha bir sürü dalgası vardır ama şu an için ben bu kadarını kullanıyorum).
    Problem daemontools' u bir türlü birlgisayarıma kuramamamdı. Bayağı zaman harcadımda. Monit' i deneyecektim ki, storm-user posta listesinden bir bakayım dedim ve "Supervisord" diye birşeyle karşılaştım. Acayip kolay göründü kullanması. Bende bu uygulamayı yükledim ve işlerimi bayağı kolaylaştırdı. Yaptığım tek iş /usr/local/ altında supervisord.conf adında bir dosya açmaktı. Bu dosyaya ne yapması gerektiğini belirttim.
    Şu komutlar ile herşeyi halleder hale geldim;
    • $ supervisord  # Uygulamayı başlatıyor.
    • $ supervisorctl reread  # Configurasyon dosyasını tekrar okuyor (değişiklikler falan yapılmışsa).
    • $ supervisorctl update  # Yeniden okunan .conf, taki değişiklikleri uyguluyor.
    • $ supervisorctl start all  # Herşeyi başlatıyor.
    • $ supervisorctl start <group_name>:  # Belirli bir grubu başlatıyor sadece.
    • $ supervisorctl start <process_name>  # Belirtilen process başlatılıyor sadece.
    • $ supervisorctl stop all  # Herşeyi durduruyor. 
    Görünen o ki test işleri için böyle bir araç şart.

    Faydalı birkaç link;
    Storm için pluggable Scheduler geliştirmek
    Hemen üstteki linke ait kodlar
    Storm kullanıcı mail listesi
    Storm komut listesi
    Supervisord
    Supervisord .conf dosyası hakkında
    Supervisord hakkında birkaç numara öğrediğim bir meslektaş

    Bu arada kullandığım configurasyon dosyası şu şekilde;


    [unix_http_server]
    file=/tmp/supervisor.sock   ; (the path to the socket file)
    ;chmod=0700                 ; socket file mode (default 0700)
    ;chown=nobody:nogroup       ; socket file uid:gid owner
    ;username=user              ; (default is no username (open server))
    ;password=123               ; (default is no password (open server))

    ;[inet_http_server]         ; inet (TCP) server disabled by default
    ;port=127.0.0.1:9001        ; (ip_address:port specifier, *:port for all iface)
    ;username=user              ; (default is no username (open server))
    ;password=123               ; (default is no password (open server))

    [supervisord]
    logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
    logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)
    logfile_backups=10           ; (num of main logfile rotation backups;default 10)
    loglevel=info                ; (log level;default info; others: debug,warn,trace)
    pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
    nodaemon=false               ; (start in foreground if true;default false)
    minfds=1024                  ; (min. avail startup file descriptors;default 1024)
    minprocs=200                 ; (min. avail process descriptors;default 200)
    ;umask=022                   ; (process file creation umask;default 022)
    ;user=chrism                 ; (default is current user, required if root)
    ;identifier=supervisor       ; (supervisord identifier, default is 'supervisor')
    ;directory=/tmp              ; (default is not to cd during start)
    ;nocleanup=true              ; (don't clean up tempfiles at start;default false)
    ;childlogdir=/tmp            ; ('AUTO' child log dir, default $TEMP)
    ;environment=KEY=value       ; (key value pairs to add to environment)
    ;strip_ansi=false            ; (strip ansi escape codes in logs; def. false)

    ; the below section must remain in the config file for RPC
    ; (supervisorctl/web interface) to work, additional interfaces may be
    ; added by defining them in separate rpcinterface: sections
    [rpcinterface:supervisor]
    supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

    [supervisorctl]
    serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket
    ;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
    ;username=chris              ; should be same as http_username if set
    ;password=123                ; should be same as http_password if set
    ;prompt=mysupervisor         ; cmd line prompt (default "supervisor")
    ;history_file=~/.sc_history  ; use readline history if available

    [program:zookeeper]
    command=/home/matara/Tools/zookeeper-3.3.5/bin/zkServer.sh start-foreground
    process_name=%(program_name)s
    autostart=true
    autorestart=false
    stopsignal=KILL
    startsecs=1
    startretries=999
    redirect_stderr=false
    stopasgroup=true
    stdout_logfile=/home/matara/Tools/storm-0.8.2/logs/supervisord/zookeeperout
    stdout_logfile_maxbytes=10MB
    stdout_logfile_backups=10
    stdout_events_enabled=true
    stderr_logfile=/home/matara/Tools/storm-0.8.2/logs/supervisord/zookeepererr
    stderr_logfile_maxbytes=100MB
    stderr_logfile_backups=10
    stderr_events_enabled=true

    [program:nimbus]
    command=/home/matara/Tools/storm-0.8.2/bin/storm nimbus
    process_name=%(program_name)s ; _%(process_num)02d
    ; numprocs=3
    autostart=true
    autorestart=false
    startsecs=1
    startretries=999
    redirect_stderr=false
    stopsignal=KILL
    stopasgroup=true
    stdout_logfile=/home/matara/Tools/storm-0.8.2/logs/supervisord/nimbusout
    stdout_logfile_maxbytes=10MB
    stdout_logfile_backups=10
    stdout_events_enabled=true
    stderr_logfile=/home/matara/Tools/storm-0.8.2/logs/supervisord/nimbuserr
    stderr_logfile_maxbytes=100MB
    stderr_logfile_backups=10
    stderr_events_enabled=true

    [program:supervisor]
    command=/home/matara/Tools/storm-0.8.2/bin/storm supervisor
    process_name=%(program_name)s ; _%(process_num)02d
    ; numprocs=1
    autostart=true
    autorestart=false
    startsecs=1
    startretries=999
    redirect_stderr=false
    stopsignal=KILL
    stopasgroup=true
    stdout_logfile=/home/matara/Tools/storm-0.8.2/logs/supervisord/supervisor_%(process_num)02dout
    stdout_logfile_maxbytes=10MB
    stdout_logfile_backups=10
    stdout_events_enabled=true
    stderr_logfile=/home/matara/Tools/storm-0.8.2/logs/supervisord/supervisor_%(process_num)02derr
    stderr_logfile_maxbytes=100MB
    stderr_logfile_backups=10
    stderr_events_enabled=true

    [program:workload]
    command=/home/matara/Tools/storm-0.8.2/bin/storm jar /home/matara/Desktop/hw2/static_scheduled.jar Main
    process_name=%(program_name)s
    autostart=false
    autorestart=false
    startsecs=1
    startretries=999
    redirect_stderr=false
    stopsignal=KILL
    stopasgroup=true
    stdout_logfile=/home/matara/Tools/storm-0.8.2/logs/supervisord/workloadout
    stdout_logfile_maxbytes=10MB
    stdout_logfile_backups=10
    stdout_events_enabled=true
    stderr_logfile=/home/matara/Tools/storm-0.8.2/logs/supervisord/workloaderr
    stderr_logfile_maxbytes=100MB
    stderr_logfile_backups=10
    stderr_events_enabled=true

    [group:storm]
    programs=zookeeper,nimbus,supervisor ; each refers to 'x' in [program:x] definitions
    priority=999   

    18 Haziran 2013 Salı

    Supervisor Kurulumu

    Install the Python install tools to install the Supervisor package:
    # apt-get -y install python-setuptools
    
    Install the Supervisor package and add it to the system services:
    # easy_install supervisor
    # curl https://raw.github.com/gist/176149/88d0d68c4af22a7474ad1d011659ea2d27e35b8d/supervisord.sh > supervisord
    # chmod +x supervisord
    # mv supervisord /etc/init.d/supervisord
    # update-rc.d supervisord defaults
    
    Specify the configuration file by adding "-c /etc/supervisord.conf" to the "DAEMON_ARGS" variable:

    # vi /etc/init.d/supervisord
    DAEMON_ARGS="-c /etc/supervisord.conf"
    
    Create the supervisor configuration files:
    # echo_supervisord_conf > /etc/supervisord.conf
    # echo [include] >> /etc/supervisord.conf
    # echo files=/etc/supervisord/*.conf >> /etc/supervisord.conf
    # mkdir /etc/supervisord
    
    Start the service:
    # /etc/init.d/supervisord start
    
    Bu "hata.: Başka bir program zaten HTTP sunucularından birini kullanmak üzere yapılandırılmış bir bağlantı noktasını dinlediğini supervisord başlamadan önce ilk olarak bu programı kapatın." Alabilirsiniz Sunucu başladığında. / Tmp / supervisor.sock bağlantısını kesmek bu sorunu giderir.
    # unlink /tmp/supervisor.sock
    
    Yapılandırma aşağıdaki komutu kullanın yeniden:
    # supervisorctl reload
    

    29 Mayıs 2013 Çarşamba

    virtualenv ve pip üzerine

    İşimde ve kendi projelerimde genelde Django kullanıyorum. Django ile yazılım geliştirirken bir çok üçüncü parti uygulama kurmak gerekebiliyor. Örneğin migration işlemleri için south kurmak gerekiyor. Diyelim ubuntu kullanıyorsunuz ve south ubuntu deposunda var. Veya pip, easy_install gibi python paket sistemleri ile kurulum yapıyorsunuz. Bu durumda bu paketler sistemin geneline kuruluyor. Bu durumun ne gibi sıkıntıları var derseniz, projeye özel değişik versiyonda kütüphaneleri denemek zorlaşıyor. İşte tam bu sırada virtualenv gibi harika bir araç yardımımıza koşuyor. virtualenv kısaca bize özel bir python alanı yaratıyor ve orada yaptığımız kurulumların sadece orada geçerli olmasını sağlıyor. Şimdi ubuntu’da adım adım virtualenv kurulumu ve kullanımını inceleyelim.
    Öncesinde sistemimizde easy_install ve pip kurulu değilse bu işlemleri halledelim. Terminalde aşağıdaki komutu vererek paket kurulumlarımızı yapalım.
    1
    
    $ sudo apt-get install python-setuptools python-dev build-essential
    Evet kurmamız gereken .deb paketleri tamam. Şimdi pip kurmamız gerekiyor. İsterseniz virtualenv ile easy_install’ı kullanabilirsiniz. Ancak ben pip kullanmayı daha çok seviyorum. Bazı üstünlükleri olduğu bir gerçek easy_install’a karşı. Aşağıdaki komutu işletelim.
    1
    
    $ sudo easy_install pip
    pip kurulduğuna göre artık virtualenv’yi pip aracılığıyla kurabiliriz.
    1
    
    $ sudo pip install virtualenv
    virtualenv sisteme kuruldu ve sanal python ortamları yaratmamız için bir engelimiz kalmadı. Bir virtual environment (sanal ortam) yaratmak için aşağıdaki gibi bir komut işletmeniz gerekiyor.
    1
    2
    3
    
    $ virtualenv --no-site-packages –-distribute example
    
    New python executable in example/bin/python Installing distribute………………………………………………………………………………………………………………………done. New python executable in example/bin/pythonInstalling distribute ……………………………………………………………………………………………………………………………done.
    Buradaki example ortamımızın ismi. Bunu dilediğiniz gibi verebilirsiniz. Python ortamınız bu dizin içinde şekillenecek. İsterseniz path verebilirsiniz. Benim önerim python_environments gibi bir dizin açıp tüm ortamlarınızı burada bulundurmanız. Düzen iyidir
    virtualenv’ı kurduk ancak onu aktif etmeden kullanmaya başlayamıyoruz. Aktif etmek için aşağıdaki yolu izliyoruz.
    1
    
    $ source example/bin/active
    Bu komuttan sonra imlecin olduğu bölümün değiştiğini farkedersiniz. Genelde sanal ortamın adı yazar. Bir sorun yoksa artık aktif halde bir sanal ortamımız var. Sanal ortamdan çıkmak için diğer bir deyimle deaktif etmek isterseniz;
    1
    
    (example)~$ deactivate
    Python sanal ortamından çıkmış oluyorsunuz böylece. Şimdi sanal ortamımızda istediğimiz paketleri kuralım. Örnek olması açısından Django üzerinden gidelim istiyorum. Django kurmak için pip komutunu aktif edilmiş sanal ortamımız içindeyken yazıyoruz.
    1
    2
    3
    
    (example)~$ pip install Django
    
    Downloading/unpacking Django Downloading Django-1.3.tar.gz (6.5Mb): 6.5Mb downloaded Running setup.py egg_info for package Django Installing collected packages: Django Running setup.py install for Django changing mode of build/scripts-2.6/django-admin.py from 644 to 755 changing mode of /home/cihann/example/bin/django-admin.py to 755 Successfully installed Django Cleaning up…
    Django başarıyla kuruldu. Şu an Django’nun sadece example sanal ortamında kurulu olduğunu hatırlatalım. Ayrıca farkettiyseniz kurulum yaparken sudo ile yetki almaya vs. ihtiyaç duymadık. Sistem geneline kurulmadığı için bir yetki alma gereği duymuyor. Yazı biraz uzayacak ama virtualenv ile ufak bir Django uygulaması başlatalım istiyorum. Böylece requirements.txt denen dosya ile paket yönetiminede girmiş oluruz. Django artık sanal ortamda kurulu olduğuna göre şu komutu işletiyoruz.
    1
    
    (example)~$ django-admin.py startproject example_django
    Bu komutla bir Django projesi oluşturmuş olduk. Artık sanal ortamda pip ile paket kurmayı biliyoruz. Ancak bir çok paket kurmak istediğimizde bunları tek tek kurmak yerine paket listesini çıkarıp bunu bir dosyaya yazıp oradan kurulum ve yönetimi yapabiliriz. Bu dosyanın adı requirements.txt. Django projemizin içine gidelim ve requirements.txt adında bir dosya oluşturalım.
    1
    2
    3
    
    (example)~$ cd example_django/
    
    (example)~/example_django$ touch requirements.txt
    requirements.txt dosyamızın içine istediğimiz paketleri yazalım. Örnek olarak şöyle bir dosya ile başlayabiliriz.
    1
    
    South==0.7.3 django-taggit==0.9.2 Markdown==2.0.3
    Evet requirements.txt dosyamız hazır. Şimdi nasıl bu paketleri bu dosya üzerinden kuracağımızı görelim.
    1
    2
    3
    
    (example)~/example_django$ pip install -r requirements.txt
    
    Downloading/unpacking Markdown==2.0.3 (from -r requirements.txt (line 3)) Downloading Markdown-2.0.3.tar.gz (71Kb): 71Kb downloaded Running setup.py egg_info for package Markdown Downloading/unpacking django-taggit==0.9.2 (from -r requirements.txt (line 2)) Downloading django-taggit-0.9.2.tar.gz Running setup.py egg_info for package django-taggit Downloading/unpacking South==0.7.3 (from -r requirements.txt (line 1)) Downloading South-0.7.3.tar.gz (70Kb): 70Kb downloaded Running setup.py egg_info for package South Installing collected packages: django-taggit, Markdown, South Running setup.py install for django-taggit Running setup.py install for Markdown changing mode of build/scripts-2.6/markdown from 644 to 755 changing mode of /home/cihann/example/bin/markdown to 755 Running setup.py install for South Successfully installed django-taggit Markdown South Cleaning up…
    Süper! Paketler sanal ortamımıza kuruldu. virtualenv ile gördüğünüz üzere çok rahat bir Python çalışma ortamı kurulabiliyor. Geliştirdiğiniz uygulamayı başka bir sanal ortama taşıyıp orada farklı sürüm kütüphanelerle deneyebilirsiniz. Sanal ortamla işiniz bittiğinde onu silebilirsiniz.
    Mutlu kodlamalar (:

    Kaynak : http://cihanokyay.com/blog/2011/12/16/virtualenv-ve-pip-uzerine/